First big chunk of the refactor

mid-refactor of `take_overall_damage`

Fully refactors the (?:take|heal)_(?:overall|organ)_damage procs

Allows the dead to examine

Removes the `blinded` var

Refactor cyborg components so vision loss is instant

Robot life/death updates instantly

Adds instant updates for damage overlays and HUD icons for humans

Final reconciliation with the species refactor

Adds a stat debugging system and debugging logs

Also fixes instant death on species change

"Debugging logs" are used for stuff an admin wouldn't care about but
someone debugging would

I used it to fix people dying instantly when changing species due to
temporary deletion of the brain

Fox's requests

Adds a more careful updating system to our reagents system
This commit is contained in:
Crazylemon64
2018-10-07 17:52:04 -07:00
parent 280905bc20
commit 3db4229918
174 changed files with 3299 additions and 2045 deletions
+33 -8
View File
@@ -196,6 +196,9 @@ var/const/INGEST = 2
if(M)
chem_temp = M.bodytemperature
handle_reactions()
// a bitfield filled in by each reagent's `on_mob_life` to find out which states to update
var/update_flags = STATUS_UPDATE_NONE
for(var/A in reagent_list)
var/datum/reagent/R = A
if(!istype(R)) // How are non-reagents ending up in the reagents_list?
@@ -233,14 +236,18 @@ var/const/INGEST = 2
continue
//If you got this far, that means we can process whatever reagent this iteration is for. Handle things normally from here.
if(M && R)
R.on_mob_life(M)
update_flags |= R.on_mob_life(M)
if(R.volume >= R.overdose_threshold && !R.overdosed && R.overdose_threshold > 0)
R.overdosed = TRUE
R.overdose_start(M)
if(R.volume < R.overdose_threshold && R.overdosed)
R.overdosed = FALSE
if(R.overdosed)
R.overdose_process(M, R.volume >= R.overdose_threshold*2 ? 2 : 1)
var/list/overdose_results = R.overdose_process(M, R.volume >= R.overdose_threshold*2 ? 2 : 1)
if(overdose_results) // to protect against poorly-coded overdose procs
update_flags |= overdose_results[REAGENT_OVERDOSE_FLAGS]
else
log_runtime(EXCEPTION("Reagent '[R.name]' does not return an overdose info list!"))
for(var/A in addiction_list)
var/datum/reagent/R = A
@@ -250,18 +257,36 @@ var/const/INGEST = 2
R.addiction_stage++
switch(R.addiction_stage)
if(1)
R.addiction_act_stage1(M)
update_flags |= R.addiction_act_stage1(M)
if(2)
R.addiction_act_stage2(M)
update_flags |= R.addiction_act_stage2(M)
if(3)
R.addiction_act_stage3(M)
update_flags |= R.addiction_act_stage3(M)
if(4)
R.addiction_act_stage4(M)
update_flags |= R.addiction_act_stage4(M)
if(5)
R.addiction_act_stage5(M)
update_flags |= R.addiction_act_stage5(M)
if(prob(20) && (world.timeofday > (R.last_addiction_dose + ADDICTION_TIME))) //Each addiction lasts 8 minutes before it can end
to_chat(M, "<span class='notice'>You no longer feel reliant on [R.name]!</span>")
addiction_list.Remove(R)
if(update_flags & STATUS_UPDATE_HEALTH)
M.updatehealth("reagent metabolism")
else if(update_flags & STATUS_UPDATE_STAT)
// update_stat is called in updatehealth
M.update_stat("reagent metabolism")
if(update_flags & STATUS_UPDATE_CANMOVE)
M.update_canmove()
if(update_flags & STATUS_UPDATE_STAMINA)
M.handle_hud_icons_health()
M.update_stamina()
if(update_flags & STATUS_UPDATE_BLIND)
M.update_blind_effects()
if(update_flags & STATUS_UPDATE_BLURRY)
M.update_blurry_effects()
if(update_flags & STATUS_UPDATE_NEARSIGHTED)
M.update_nearsighted_effects()
if(update_flags & STATUS_UPDATE_DRUGGY)
M.update_druggy_effects()
update_total()
/datum/reagents/proc/death_metabolize(mob/living/M)
@@ -716,4 +741,4 @@ atom/proc/create_reagents(max_vol)
QDEL_LIST(reagent_list)
reagent_list = null
if(my_atom && my_atom.reagents == src)
my_atom.reagents = null
my_atom.reagents = null
+12 -5
View File
@@ -69,6 +69,7 @@
/datum/reagent/proc/on_mob_life(mob/living/M)
current_cycle++
holder.remove_reagent(id, metabolization_rate * M.metabolism_efficiency * M.digestion_ratio) //By default it slowly disappears.
return STATUS_UPDATE_NONE
/datum/reagent/proc/on_mob_death(mob/living/M) //use this to have chems have a "death-triggered" effect
return
@@ -102,15 +103,16 @@
// Called if the reagent has passed the overdose threshold and is set to be triggering overdose effects
/datum/reagent/proc/overdose_process(mob/living/M, severity)
var/effect = rand(1, 100) - severity
var/update_flags = STATUS_UPDATE_NONE
if(effect <= 8)
M.adjustToxLoss(severity)
return effect
update_flags |= (M.adjustToxLoss(severity, FALSE) ? STATUS_UPDATE_HEALTH : STATUS_UPDATE_NONE)
return list(effect, update_flags)
/datum/reagent/proc/overdose_start(mob/living/M)
return
/datum/reagent/proc/addiction_act_stage1(mob/living/M)
return
return STATUS_UPDATE_NONE
/datum/reagent/proc/addiction_act_stage2(mob/living/M)
if(prob(8))
@@ -119,6 +121,7 @@
M.emote("sneeze")
if(prob(4))
to_chat(M, "<span class='notice'>You feel a dull headache.</span>")
return STATUS_UPDATE_NONE
/datum/reagent/proc/addiction_act_stage3(mob/living/M)
if(prob(8))
@@ -127,6 +130,7 @@
M.emote("shiver")
if(prob(4))
to_chat(M, "<span class='warning'>You begin craving [name]!</span>")
return STATUS_UPDATE_NONE
/datum/reagent/proc/addiction_act_stage4(mob/living/M)
if(prob(8))
@@ -135,16 +139,19 @@
to_chat(M, "<span class='warning'>You have the strong urge for some [name]!</span>")
if(prob(4))
to_chat(M, "<span class='warning'>You REALLY crave some [name]!</span>")
return STATUS_UPDATE_NONE
/datum/reagent/proc/addiction_act_stage5(mob/living/M)
var/update_flags = STATUS_UPDATE_NONE
if(prob(8))
M.emote("twitch")
if(prob(6))
to_chat(M, "<span class='warning'>Your stomach lurches painfully!</span>")
M.visible_message("<span class='warning'>[M] gags and retches!</span>")
M.Stun(rand(2,4))
M.Weaken(rand(2,4))
update_flags |= M.Stun(rand(2,4), FALSE)
update_flags |= M.Weaken(rand(2,4), FALSE)
if(prob(5))
to_chat(M, "<span class='warning'>You feel like you can't live without [name]!</span>")
if(prob(5))
to_chat(M, "<span class='warning'>You would DIE for some [name] right now!</span>")
return update_flags
@@ -9,42 +9,42 @@
taste_message = "admin abuse"
/datum/reagent/medicine/adminordrazine/on_mob_life(mob/living/carbon/M)
M.setCloneLoss(0)
M.setOxyLoss(0)
M.setCloneLoss(0, FALSE)
M.setOxyLoss(0, FALSE)
M.radiation = 0
M.adjustBruteLoss(-5)
M.adjustFireLoss(-5)
M.adjustToxLoss(-5)
M.setBrainLoss(0)
M.adjustBruteLoss(-5, FALSE)
M.adjustFireLoss(-5, FALSE)
M.adjustToxLoss(-5, FALSE)
M.setBrainLoss(0, FALSE)
if(ishuman(M))
var/mob/living/carbon/human/H = M
for(var/thing in H.internal_organs)
var/obj/item/organ/internal/I = thing
I.receive_damage(-5)
I.receive_damage(-5, FALSE)
for(var/obj/item/organ/external/E in H.bodyparts)
if(E.mend_fracture())
E.perma_injury = 0
M.SetEyeBlind(0)
M.CureNearsighted()
M.CureBlind()
M.SetEyeBlind(0, FALSE)
M.CureNearsighted(FALSE)
M.CureBlind(FALSE)
M.CureMute()
M.CureDeaf()
M.CureEpilepsy()
M.CureTourettes()
M.CureCoughing()
M.CureNervous()
M.SetEyeBlurry(0)
M.SetWeakened(0)
M.SetStunned(0)
M.SetParalysis(0)
M.SetSilence(0)
M.SetEyeBlurry(0, FALSE)
M.SetWeakened(0, FALSE)
M.SetStunned(0, FALSE)
M.SetParalysis(0, FALSE)
M.SetSilence(0, FALSE)
M.SetHallucinate(0)
M.SetDizzy(0)
M.SetDrowsy(0)
M.SetStuttering(0)
M.SetSlur(0)
M.SetConfused(0)
M.SetSleeping(0)
M.SetSleeping(0, FALSE)
M.SetJitter(0)
for(var/thing in M.viruses)
var/datum/disease/D = thing
@@ -52,6 +52,7 @@
continue
D.cure(0)
..()
return STATUS_UPDATE_ALL
/datum/reagent/medicine/adminordrazine/nanites
name = "Nanites"
@@ -13,7 +13,7 @@
/datum/reagent/consumable/ethanol/on_mob_life(mob/living/M)
M.AdjustDrunk(alcohol_perc)
M.AdjustDizzy(dizzy_adj)
..()
return ..()
/datum/reagent/consumable/ethanol/reaction_obj(obj/O, volume)
if(istype(O,/obj/item/paper))
@@ -103,10 +103,12 @@
//copy paste from LSD... shoot me
/datum/reagent/consumable/ethanol/absinthe/on_mob_life(mob/living/M)
M.AdjustHallucinate(5)
..()
return ..()
/datum/reagent/consumable/ethanol/absinthe/overdose_process(mob/living/M, severity)
M.adjustToxLoss(1)
var/update_flags = STATUS_UPDATE_NONE
update_flags |= M.adjustToxLoss(1, FALSE)
return list(0, update_flags)
/datum/reagent/consumable/ethanol/rum
name = "Rum"
@@ -121,7 +123,9 @@
drink_desc = "Now you want to Pray for a pirate suit, don't you?"
/datum/reagent/consumable/ethanol/rum/overdose_process(mob/living/M, severity)
M.adjustToxLoss(1)
var/update_flags = STATUS_UPDATE_NONE
update_flags |= M.adjustToxLoss(1, FALSE)
return list(0, update_flags)
/datum/reagent/consumable/ethanol/mojito
name = "Mojito"
@@ -237,12 +241,13 @@
taste_message = "party"
/datum/reagent/consumable/ethanol/thirteenloko/on_mob_life(mob/living/M)
var/update_flags = STATUS_UPDATE_NONE
M.AdjustDrowsy(-7)
M.AdjustSleeping(-2)
update_flags |= M.AdjustSleeping(-2, FALSE)
if(M.bodytemperature > 310)
M.bodytemperature = max(310, M.bodytemperature - (5 * TEMPERATURE_DAMAGE_COEFFICIENT))
M.Jitter(5)
..()
return ..() | update_flags
/////////////////////////////////////////////////////////////////cocktail entities//////////////////////////////////////////////
@@ -475,7 +480,7 @@
/datum/reagent/consumable/ethanol/toxins_special/on_mob_life(mob/living/M)
if(M.bodytemperature < 330)
M.bodytemperature = min(330, M.bodytemperature + (15 * TEMPERATURE_DAMAGE_COEFFICIENT)) //310 is the normal bodytemp. 310.055
..()
return ..()
/datum/reagent/consumable/ethanol/beepsky_smash
name = "Beepsky Smash"
@@ -491,8 +496,9 @@
taste_message = "THE LAW"
/datum/reagent/consumable/ethanol/beepsky_smash/on_mob_life(mob/living/M)
M.Stun(1)
..()
var/update_flag = STATUS_UPDATE_NONE
update_flag |= M.Stun(1, FALSE)
return ..() | update_flag
/datum/reagent/consumable/ethanol/irish_cream
name = "Irish Cream"
@@ -640,7 +646,7 @@
/datum/reagent/consumable/ethanol/antifreeze/on_mob_life(mob/living/M)
if(M.bodytemperature < 330)
M.bodytemperature = min(330, M.bodytemperature + (20 * TEMPERATURE_DAMAGE_COEFFICIENT)) //310 is the normal bodytemp. 310.055
..()
return ..()
/datum/reagent/consumable/ethanol/barefoot
name = "Barefoot"
@@ -888,13 +894,14 @@
taste_message = "brain damageeeEEeee"
/datum/reagent/consumable/ethanol/neurotoxin/on_mob_life(mob/living/M)
var/update_flags = STATUS_UPDATE_NONE
if(current_cycle >= 13)
M.Weaken(3)
update_flags |= M.Weaken(3, FALSE)
if(current_cycle >= 55)
M.Druggy(55)
update_flags |= M.Druggy(55, FALSE)
if(current_cycle >= 200)
M.adjustToxLoss(2)
..()
update_flags |= M.adjustToxLoss(2, FALSE)
return ..() | update_flags
/datum/reagent/consumable/ethanol/hippies_delight
name = "Hippie's Delight"
@@ -908,25 +915,29 @@
drink_desc = "A drink enjoyed by people during the 1960's."
/datum/reagent/consumable/ethanol/hippies_delight/on_mob_life(mob/living/M)
M.Druggy(50)
var/update_flags = STATUS_UPDATE_NONE
update_flags |= M.Druggy(50, FALSE)
switch(current_cycle)
if(1 to 5)
if(!M.stuttering) M.stuttering = 1
M.Stuttering(1)
M.Dizzy(10)
if(prob(10)) M.emote(pick("twitch","giggle"))
if(prob(10))
M.emote(pick("twitch","giggle"))
if(5 to 10)
if(!M.stuttering) M.stuttering = 1
M.Stuttering(1)
M.Jitter(20)
M.Dizzy(20)
M.Druggy(45)
if(prob(20)) M.emote(pick("twitch","giggle"))
update_flags |= M.Druggy(45, FALSE)
if(prob(20))
M.emote(pick("twitch","giggle"))
if(10 to INFINITY)
if(!M.stuttering) M.stuttering = 1
M.Stuttering(1)
M.Jitter(40)
M.Dizzy(40)
M.Druggy(60)
if(prob(30)) M.emote(pick("twitch","giggle"))
..()
update_flags |= M.Druggy(60, FALSE)
if(prob(30))
M.emote(pick("twitch","giggle"))
return ..() | update_flags
/datum/reagent/consumable/ethanol/changelingsting
name = "Changeling Sting"
@@ -993,8 +1004,8 @@
/datum/reagent/consumable/ethanol/driestmartini/on_mob_life(mob/living/M)
if(current_cycle >= 55 && current_cycle < 115)
M.stuttering += 10
..()
M.AdjustStuttering(10)
return ..()
/datum/reagent/consumable/ethanol/kahlua
name = "Kahlua"
@@ -1008,11 +1019,12 @@
taste_message = "sweet alcohol"
/datum/reagent/consumable/ethanol/kahlua/on_mob_life(mob/living/M)
var/update_flags = STATUS_UPDATE_NONE
M.AdjustDizzy(-5)
M.AdjustDrowsy(-3)
M.AdjustSleeping(-2)
update_flags |= (M.AdjustSleeping(-2) ? STATUS_UPDATE_STAT : STATUS_UPDATE_NONE)
M.Jitter(5)
..()
return ..() | update_flags
/datum/reagent/ginsonic
name = "Gin and sonic"
@@ -1026,11 +1038,12 @@
taste_message = "SPEED"
/datum/reagent/ginsonic/on_mob_life(mob/living/M)
var/update_flags = STATUS_UPDATE_NONE
M.AdjustDrowsy(-5)
if(prob(25))
M.AdjustParalysis(-1)
M.AdjustStunned(-1)
M.AdjustWeakened(-1)
update_flags |= M.AdjustParalysis(-1, FALSE)
update_flags |= M.AdjustStunned(-1, FALSE)
update_flags |= M.AdjustWeakened(-1, FALSE)
if(prob(8))
M.reagents.add_reagent("methamphetamine",1.2)
var/sonic_message = pick("Gotta go fast!", "Time to speed, keed!", "I feel a need for speed!", "Let's juice.", "Juice time.", "Way Past Cool!")
@@ -1038,7 +1051,7 @@
M.say("[sonic_message]")
else
to_chat(M, "<span class='notice'>[sonic_message ]</span>")
..()
return ..() | update_flags
/datum/reagent/consumable/ethanol/applejack
name = "Applejack"
@@ -1101,6 +1114,7 @@
M.adjust_fire_stacks(3)
/datum/reagent/consumable/ethanol/dragons_breath/on_mob_life(mob/living/M)
var/update_flags = STATUS_UPDATE_NONE
if(M.reagents.has_reagent("milk"))
to_chat(M, "<span class='notice'>The milk stops the burning. Ahhh.</span>")
M.reagents.del_reagent("milk")
@@ -1111,7 +1125,7 @@
if(prob(50))
to_chat(M, "<span class='danger'>Your throat burns terribly!</span>")
M.emote(pick("scream","cry","choke","gasp"))
M.Stun(1)
update_flags |= M.Stun(1, FALSE)
if(prob(8))
to_chat(M, "<span class='danger'>Why!? WHY!?</span>")
if(prob(8))
@@ -1125,7 +1139,7 @@
M.visible_message("<span class='danger'>[M] is consumed in flames!</span>")
M.dust()
return
..()
return ..() | update_flags
// ROBOT ALCOHOL PAST THIS POINT
// WOOO!
@@ -11,7 +11,7 @@
if(iscarbon(M))
if(!M.get_int_organ(/obj/item/organ/internal/body_egg))
new/obj/item/organ/internal/body_egg/spider_eggs(M) //Yes, even Xenos can fall victim to the plague that is spider infestation.
..()
return ..()
/datum/reagent/nanomachines
@@ -24,7 +24,7 @@
/datum/reagent/nanomachines/on_mob_life(mob/living/carbon/M)
if(volume > 1.5)
M.ForceContractDisease(new /datum/disease/transformation/robot(0))
..()
return ..()
/datum/reagent/xenomicrobes
@@ -37,7 +37,7 @@
/datum/reagent/xenomicrobes/on_mob_life(mob/living/carbon/M)
if(volume > 1.5)
M.ContractDisease(new /datum/disease/transformation/xeno(0))
..()
return ..()
/datum/reagent/fungalspores
name = "Tubercle bacillus Cosmosis microbes"
@@ -49,7 +49,7 @@
/datum/reagent/fungalspores/on_mob_life(mob/living/carbon/M)
if(volume > 2.5)
M.ForceContractDisease(new /datum/disease/tuberculosis(0))
..()
return ..()
/datum/reagent/jagged_crystals
name = "Jagged Crystals"
@@ -61,7 +61,7 @@
/datum/reagent/jagged_crystals/on_mob_life(mob/living/carbon/M)
M.ForceContractDisease(new /datum/disease/berserker(0))
..()
return ..()
/datum/reagent/salmonella
name = "Salmonella"
@@ -73,7 +73,7 @@
/datum/reagent/salmonella/on_mob_life(mob/living/carbon/M)
M.ForceContractDisease(new /datum/disease/food_poisoning(0))
..()
return ..()
/datum/reagent/gibbis
name = "Gibbis"
@@ -86,7 +86,7 @@
/datum/reagent/gibbis/on_mob_life(mob/living/carbon/M)
if(volume > 2.5)
M.ForceContractDisease(new /datum/disease/gbs/curable(0))
..()
return ..()
/datum/reagent/prions
name = "Prions"
@@ -99,7 +99,7 @@
/datum/reagent/prions/on_mob_life(mob/living/carbon/M)
if(volume > 4.5)
M.ForceContractDisease(new /datum/disease/kuru(0))
..()
return ..()
/datum/reagent/grave_dust
name = "Grave Dust"
@@ -112,7 +112,7 @@
/datum/reagent/grave_dust/on_mob_life(mob/living/carbon/M)
if(volume > 4.5)
M.ForceContractDisease(new /datum/disease/vampire(0))
..()
return ..()
/datum/reagent/heartworms
name = "Space heartworms"
@@ -130,7 +130,7 @@
if(ate_heart)
ate_heart.remove(H)
qdel(ate_heart)
..()
return ..()
/datum/reagent/concentrated_initro
name = "Concentrated Initropidril"
@@ -146,7 +146,7 @@
var/mob/living/carbon/human/H = M
if(!H.undergoing_cardiac_arrest())
H.set_heartattack(TRUE) // rip in pepperoni
..()
return ..()
//virus foods
@@ -11,16 +11,17 @@
var/adj_temp_cool = 0
/datum/reagent/consumable/drink/on_mob_life(mob/living/M)
var/update_flags = STATUS_UPDATE_NONE
if(adj_dizzy)
M.AdjustDizzy(adj_dizzy)
if(adj_drowsy)
M.AdjustDrowsy(adj_drowsy)
if(adj_sleepy)
M.AdjustSleeping(adj_sleepy)
update_flags |= M.AdjustSleeping(adj_sleepy, FALSE)
if(adj_temp_hot)
if(M.bodytemperature < 310)//310 is the normal bodytemp. 310.055
M.bodytemperature = min(310, M.bodytemperature + (adj_temp_hot * TEMPERATURE_DAMAGE_COEFFICIENT))
if(adj_temp_cool)
if(M.bodytemperature > 310)//310 is the normal bodytemp. 310.055
M.bodytemperature = max(310, M.bodytemperature - (adj_temp_cool * TEMPERATURE_DAMAGE_COEFFICIENT))
..()
return ..() | update_flags
@@ -65,12 +65,13 @@
taste_message = "cola"
/datum/reagent/consumable/drink/cold/nuka_cola/on_mob_life(mob/living/M)
var/update_flags = STATUS_UPDATE_NONE
M.Jitter(20)
M.Druggy(30)
update_flags |= M.Druggy(30, FALSE)
M.AdjustDizzy(5)
M.SetDrowsy(0)
M.status_flags |= GOTTAGOFAST
..()
return ..() | update_flags
/datum/reagent/consumable/drink/cold/nuka_cola/on_mob_delete(mob/living/M)
M.status_flags &= ~GOTTAGOFAST
@@ -172,4 +173,4 @@
/datum/reagent/consumable/drink/cold/rewriter/on_mob_life(mob/living/M)
M.Jitter(5)
..()
return ..()
@@ -9,9 +9,10 @@
taste_message = "orange juice"
/datum/reagent/consumable/drink/orangejuicde/on_mob_life(mob/living/M)
if(M.getOxyLoss() && prob(30))
M.adjustOxyLoss(-1*REAGENTS_EFFECT_MULTIPLIER)
..()
var/update_flags = STATUS_UPDATE_NONE
if(prob(30))
update_flags |= M.adjustOxyLoss(-1*REAGENTS_EFFECT_MULTIPLIER, FALSE)
return ..() | update_flags
/datum/reagent/consumable/drink/tomatojuice
name = "Tomato Juice"
@@ -34,9 +35,10 @@
taste_message = "pineapple juice"
/datum/reagent/consumable/drink/tomatojuice/on_mob_life(mob/living/M)
if(M.getFireLoss() && prob(20))
M.adjustFireLoss(-1)
..()
var/update_flags = STATUS_UPDATE_NONE
if(prob(20))
update_flags |= M.adjustFireLoss(-1, FALSE)
return ..() | update_flags
/datum/reagent/consumable/drink/limejuice
name = "Lime Juice"
@@ -49,9 +51,10 @@
taste_message = "lime juice"
/datum/reagent/consumable/drink/limejuice/on_mob_life(mob/living/M)
if(M.getToxLoss() && prob(20))
M.adjustToxLoss(-1)
..()
var/update_flags = STATUS_UPDATE_NONE
if(prob(20))
update_flags |= M.adjustToxLoss(-1, FALSE)
return ..() | update_flags
/datum/reagent/consumable/drink/carrotjuice
name = "Carrot juice"
@@ -63,16 +66,17 @@
drink_desc = "It is just like a carrot but without crunching."
taste_message = "carrot juice"
/datum/reagent/consumable/drink/carrotjuicde/on_mob_life(mob/living/M)
M.AdjustEyeBlurry(-1)
M.AdjustEyeBlind(-1)
/datum/reagent/consumable/drink/carrotjuice/on_mob_life(mob/living/M)
var/update_flags = STATUS_UPDATE_NONE
update_flags |= M.AdjustEyeBlurry(-1, FALSE)
update_flags |= M.AdjustEyeBlind(-1, FALSE)
switch(current_cycle)
if(1 to 20)
//nothing
if(21 to INFINITY)
if(prob(current_cycle-10))
M.disabilities &= ~NEARSIGHTED
..()
update_flags |= M.CureNearsighted(FALSE)
return ..() | update_flags
/datum/reagent/consumable/drink/doctor_delight
name = "The Doctor's Delight"
@@ -86,9 +90,10 @@
taste_message = "healthy dietary choices"
/datum/reagent/consumable/drink/doctors_delight/on_mob_life(mob/living/M)
if(M.getToxLoss() && prob(20))
M.adjustToxLoss(-1)
..()
var/update_flags = STATUS_UPDATE_NONE
if(prob(20))
update_flags |= M.adjustToxLoss(-1, FALSE)
return ..() | update_flags
/datum/reagent/consumable/drink/triple_citrus
name = "Triple Citrus"
@@ -126,8 +131,9 @@
taste_message = "berry juice"
/datum/reagent/consumable/drink/poisonberryjuice/on_mob_life(mob/living/M)
M.adjustToxLoss(1)
..()
var/update_flags = STATUS_UPDATE_NONE
update_flags |= M.adjustToxLoss(1, FALSE)
return ..() | update_flags
/datum/reagent/consumable/applejuice
name = "Apple Juice"
@@ -171,10 +177,11 @@
taste_message = "banana juice"
/datum/reagent/consumable/drink/banana/on_mob_life(mob/living/M)
var/update_flags = STATUS_UPDATE_NONE
if((ishuman(M) && M.job in list("Clown") ) || issmall(M))
M.adjustBruteLoss(-1)
M.adjustFireLoss(-1)
..()
update_flags |= M.adjustBruteLoss(-1, FALSE)
update_flags |= M.adjustFireLoss(-1, FALSE)
return ..() | update_flags
/datum/reagent/consumable/drink/nothing
name = "Nothing"
@@ -186,10 +193,11 @@
taste_message = "nothing... how?"
/datum/reagent/consumable/drink/nothing/on_mob_life(mob/living/M)
var/update_flags = STATUS_UPDATE_NONE
if(ishuman(M) && M.job in list("Mime"))
M.adjustBruteLoss(-1)
M.adjustFireLoss(-1)
..()
update_flags |= M.adjustBruteLoss(-1, FALSE)
update_flags |= M.adjustFireLoss(-1, FALSE)
return ..() | update_flags
/datum/reagent/consumable/drink/potato_juice
name = "Potato Juice"
@@ -213,11 +221,12 @@
taste_message = "milk"
/datum/reagent/consumable/drink/milk/on_mob_life(mob/living/M)
if(M.getBruteLoss() && prob(20))
M.adjustBruteLoss(-1)
var/update_flags = STATUS_UPDATE_NONE
if(prob(20))
update_flags |= M.adjustBruteLoss(-1, FALSE)
if(holder.has_reagent("capsaicin"))
holder.remove_reagent("capsaicin", 2)
..()
return ..() | update_flags
/datum/reagent/consumable/drink/milk/soymilk
name = "Soy Milk"
@@ -275,13 +284,14 @@
taste_message = "coffee"
/datum/reagent/consumable/drink/coffee/on_mob_life(mob/living/M)
var/update_flags = STATUS_UPDATE_NONE
if(holder.has_reagent("frostoil"))
holder.remove_reagent("frostoil", 5)
if(prob(50))
M.AdjustParalysis(-1)
M.AdjustStunned(-1)
M.AdjustWeakened(-1)
..()
update_flags |= M.AdjustParalysis(-1, FALSE)
update_flags |= M.AdjustStunned(-1, FALSE)
update_flags |= M.AdjustWeakened(-1, FALSE)
return ..() | update_flags
/datum/reagent/consumable/drink/coffee/overdose_process(mob/living/M, severity)
if(volume > 45)
@@ -311,10 +321,11 @@
drink_desc = "A nice and refrshing beverage while you are reading."
/datum/reagent/consumable/drink/coffee/soy_latte/on_mob_life(mob/living/M)
..()
M.SetSleeping(0)
if(M.getBruteLoss() && prob(20))
M.adjustBruteLoss(-1)
var/update_flags = STATUS_UPDATE_NONE
update_flags |= M.SetSleeping(0, FALSE)
if(prob(20))
update_flags |= M.adjustBruteLoss(-1, FALSE)
return ..() | update_flags
/datum/reagent/consumable/drink/coffee/cafe_latte
name = "Cafe Latte"
@@ -328,10 +339,11 @@
drink_desc = "A nice, strong and refreshing beverage while you are reading."
/datum/reagent/consumable/drink/coffee/cafe_latte/on_mob_life(mob/living/M)
..()
M.SetSleeping(0)
if(M.getBruteLoss() && prob(20))
M.adjustBruteLoss(-1)
var/update_flags = STATUS_UPDATE_NONE
update_flags |= M.SetSleeping(0, FALSE)
if(prob(20))
update_flags |= M.adjustBruteLoss(-1, FALSE)
return ..() | update_flags
/datum/reagent/consumable/drink/coffee/cafe_latte/cafe_mocha
name = "Cafe Mocha"
@@ -357,9 +369,10 @@
taste_message = "tea"
/datum/reagent/consumable/drink/tea/on_mob_life(mob/living/M)
if(M.getToxLoss() && prob(20))
M.adjustToxLoss(-1)
..()
var/update_flags = STATUS_UPDATE_NONE
if(prob(20))
update_flags |= M.adjustToxLoss(-1, FALSE)
return ..() | update_flags
/datum/reagent/consumable/drink/tea/icetea
name = "Iced Tea"
@@ -383,10 +396,11 @@
taste_message = "honks"
/datum/reagent/consumable/drink/bananahonk/on_mob_life(mob/living/M)
var/update_flags = STATUS_UPDATE_NONE
if((ishuman(M) && M.job in list("Clown") ) || issmall(M))
M.adjustBruteLoss(-1)
M.adjustFireLoss(-1)
..()
update_flags |= M.adjustBruteLoss(-1, FALSE)
update_flags |= M.adjustFireLoss(-1, FALSE)
return ..() | update_flags
/datum/reagent/consumable/drink/silencer
name = "Silencer"
@@ -399,10 +413,11 @@
taste_message = "mphhhh"
/datum/reagent/consumable/drink/silencer/on_mob_life(mob/living/M)
var/update_flags = STATUS_UPDATE_NONE
if(ishuman(M) && M.job in list("Mime"))
M.adjustBruteLoss(-1)
M.adjustFireLoss(-1)
..()
update_flags |= M.adjustBruteLoss(-1, FALSE)
update_flags |= M.adjustFireLoss(-1, FALSE)
return ..() | update_flags
/datum/reagent/consumable/drink/chocolatepudding
name = "Chocolate Pudding"
+165 -124
View File
@@ -10,7 +10,7 @@
if(ishuman(M))
if(prob(7))
M.emote(pick("twitch","drool","moan","gasp"))
..()
return ..()
/datum/reagent/lithium
@@ -24,8 +24,9 @@
if(isturf(M.loc) && !istype(M.loc, /turf/space))
if(M.canmove && !M.restrained())
step(M, pick(cardinal))
if(prob(5)) M.emote(pick("twitch","drool","moan"))
..()
if(prob(5))
M.emote(pick("twitch","drool","moan"))
return ..()
/datum/reagent/lsd
name = "Lysergic acid diethylamide"
@@ -35,9 +36,10 @@
color = "#0000D8"
/datum/reagent/lsd/on_mob_life(mob/living/M)
M.Druggy(15)
var/update_flags = STATUS_UPDATE_NONE
update_flags |= M.Druggy(15, FALSE)
M.AdjustHallucinate(10)
..()
return ..() | update_flags
/datum/reagent/space_drugs
name = "Space drugs"
@@ -50,12 +52,14 @@
heart_rate_decrease = 1
/datum/reagent/space_drugs/on_mob_life(mob/living/M)
M.Druggy(15)
var/update_flags = STATUS_UPDATE_NONE
update_flags |= M.Druggy(15, FALSE)
if(isturf(M.loc) && !istype(M.loc, /turf/space))
if(M.canmove && !M.restrained())
step(M, pick(cardinal))
if(prob(7)) M.emote(pick("twitch","drool","moan","giggle"))
..()
if(prob(7))
M.emote(pick("twitch","drool","moan","giggle"))
return ..() | update_flags
/datum/reagent/psilocybin
name = "Psilocybin"
@@ -64,25 +68,29 @@
color = "#E700E7" // rgb: 231, 0, 231
/datum/reagent/psilocybin/on_mob_life(mob/living/M)
M.Druggy(30)
var/update_flags = STATUS_UPDATE_NONE
update_flags |= M.Druggy(30, FALSE)
switch(current_cycle)
if(1 to 5)
M.Stuttering(1)
M.Dizzy(5)
if(prob(10)) M.emote(pick("twitch","giggle"))
if(prob(10))
M.emote(pick("twitch","giggle"))
if(5 to 10)
M.Stuttering(1)
M.Jitter(10)
M.Dizzy(10)
M.Druggy(35)
if(prob(20)) M.emote(pick("twitch","giggle"))
update_flags |= M.Druggy(35, FALSE)
if(prob(20))
M.emote(pick("twitch","giggle"))
if(10 to INFINITY)
M.Stuttering(1)
M.Jitter(20)
M.Dizzy(20)
M.Druggy(40)
if(prob(30)) M.emote(pick("twitch","giggle"))
..()
update_flags |= M.Druggy(40, FALSE)
if(prob(30))
M.emote(pick("twitch","giggle"))
return ..() | update_flags
/datum/reagent/nicotine
name = "Nicotine"
@@ -95,55 +103,59 @@
heart_rate_increase = 1
/datum/reagent/nicotine/on_mob_life(mob/living/M)
var/update_flags = STATUS_UPDATE_NONE
var/smoke_message = pick("You feel relaxed.", "You feel calmed.", "You feel less stressed.", "You feel more placid.", "You feel more undivided.")
if(prob(5))
to_chat(M, "<span class='notice'>[smoke_message]</span>")
if(prob(50))
M.AdjustParalysis(-1)
M.AdjustStunned(-1)
M.AdjustWeakened(-1)
M.adjustStaminaLoss(-1*REAGENTS_EFFECT_MULTIPLIER)
..()
update_flags |= M.AdjustParalysis(-1, FALSE)
update_flags |= M.AdjustStunned(-1, FALSE)
update_flags |= M.AdjustWeakened(-1, FALSE)
update_flags |= M.adjustStaminaLoss(-1*REAGENTS_EFFECT_MULTIPLIER, FALSE)
return ..() | update_flags
/datum/reagent/nicotine/overdose_process(mob/living/M, severity)
var/effect = ..()
var/list/overdose_info = ..()
var/effect = overdose_info[REAGENT_OVERDOSE_EFFECT]
var/update_flags = overdose_info[REAGENT_OVERDOSE_FLAGS]
if(severity == 1)
if(effect <= 2)
M.visible_message("<span class='warning'>[M] looks nervous!</span>")
M.AdjustConfused(15)
M.adjustToxLoss(2)
update_flags |= M.adjustToxLoss(2, FALSE)
M.Jitter(10)
M.emote("twitch_s")
else if(effect <= 4)
M.visible_message("<span class='warning'>[M] is all sweaty!</span>")
M.bodytemperature += rand(15,30)
M.adjustToxLoss(3)
update_flags |= M.adjustToxLoss(3, FALSE)
else if(effect <= 7)
M.adjustToxLoss(4)
update_flags |= M.adjustToxLoss(4, FALSE)
M.emote("twitch")
M.Jitter(10)
else if(severity == 2)
if(effect <= 2)
M.emote("gasp")
to_chat(M, "<span class='warning'>You can't breathe!</span>")
M.adjustOxyLoss(15)
M.adjustToxLoss(3)
M.Stun(1)
update_flags |= M.adjustOxyLoss(15, FALSE)
update_flags |= M.adjustToxLoss(3, FALSE)
update_flags |= M.Stun(1, FALSE)
else if(effect <= 4)
to_chat(M, "<span class='warning'>You feel terrible!</span>")
M.emote("drool")
M.Jitter(10)
M.adjustToxLoss(5)
M.Weaken(1)
update_flags |= M.adjustToxLoss(5, FALSE)
update_flags |= M.Weaken(1, FALSE)
M.AdjustConfused(33)
else if(effect <= 7)
M.emote("collapse")
to_chat(M, "<span class='warning'>Your heart is pounding!</span>")
M << 'sound/effects/singlebeat.ogg'
M.Paralyse(5)
update_flags |= M.Paralyse(5, FALSE)
M.Jitter(30)
M.adjustToxLoss(6)
M.adjustOxyLoss(20)
update_flags |= M.adjustToxLoss(6, FALSE)
update_flags |= M.adjustOxyLoss(20, FALSE)
return list(effect, update_flags)
/datum/reagent/crank
name = "Crank"
@@ -155,9 +167,10 @@
addiction_chance = 50
/datum/reagent/crank/on_mob_life(mob/living/M)
M.AdjustParalysis(-2)
M.AdjustStunned(-2)
M.AdjustWeakened(-2)
var/update_flags = STATUS_UPDATE_NONE
update_flags |= M.AdjustParalysis(-2, FALSE)
update_flags |= M.AdjustStunned(-2, FALSE)
update_flags |= M.AdjustWeakened(-2, FALSE)
if(prob(15))
M.emote(pick("twitch", "twitch_s", "grumble", "laugh"))
if(prob(8))
@@ -169,13 +182,15 @@
M.bodytemperature += rand(1,10)
if(prob(4))
to_chat(M, "<span class='notice'>You feel kinda awful!</span>")
M.adjustToxLoss(1)
update_flags |= M.adjustToxLoss(1, FALSE)
M.AdjustJitter(30)
M.emote(pick("groan", "moan"))
..()
return ..() | update_flags
/datum/reagent/crank/overdose_process(mob/living/M, severity)
var/effect = ..()
var/list/overdose_info = ..()
var/effect = overdose_info[REAGENT_OVERDOSE_EFFECT]
var/update_flags = overdose_info[REAGENT_OVERDOSE_FLAGS]
if(severity == 1)
if(effect <= 2)
M.visible_message("<span class='warning'>[M] looks confused!</span>")
@@ -185,9 +200,9 @@
else if(effect <= 4)
M.visible_message("<span class='warning'>[M] is all sweaty!</span>")
M.bodytemperature += rand(5,30)
M.adjustBrainLoss(1)
M.adjustToxLoss(1)
M.Stun(2)
update_flags |= M.adjustBrainLoss(1, FALSE)
update_flags |= M.adjustToxLoss(1, FALSE)
update_flags |= M.Stun(2, FALSE)
else if(effect <= 7)
M.Jitter(30)
M.emote("grumble")
@@ -195,14 +210,14 @@
if(effect <= 2)
M.visible_message("<span class='warning'>[M] is sweating like a pig!</span>")
M.bodytemperature += rand(20,100)
M.adjustToxLoss(5)
M.Stun(3)
update_flags |= M.adjustToxLoss(5, FALSE)
update_flags |= M.Stun(3, FALSE)
else if(effect <= 4)
M.visible_message("<span class='warning'>[M] starts tweaking the hell out!</span>")
M.Jitter(100)
M.adjustToxLoss(2)
M.adjustBrainLoss(8)
M.Weaken(3)
update_flags |= M.adjustToxLoss(2, FALSE)
update_flags |= M.adjustBrainLoss(8, FALSE)
update_flags |= M.Weaken(3, FALSE)
M.AdjustConfused(25)
M.emote("scream")
M.reagents.add_reagent("jagged_crystals", 5)
@@ -210,8 +225,9 @@
M.emote("scream")
M.visible_message("<span class='warning'>[M] nervously scratches at [M.p_their()] skin!</span>")
M.Jitter(10)
M.adjustBruteLoss(5)
update_flags |= M.adjustBruteLoss(5, FALSE)
M.emote("twitch_s")
return list(effect, update_flags)
/datum/reagent/krokodil
name = "Krokodil"
@@ -224,9 +240,10 @@
/datum/reagent/krokodil/on_mob_life(mob/living/M)
var/update_flags = STATUS_UPDATE_NONE
M.AdjustJitter(-40)
if(prob(25))
M.adjustBrainLoss(1)
update_flags |= M.adjustBrainLoss(1, FALSE)
if(prob(15))
M.emote(pick("smile", "grin", "yawn", "laugh", "drool"))
if(prob(10))
@@ -236,49 +253,52 @@
if(prob(5))
to_chat(M, "<span class='notice'>You feel too chill!</span>")
M.emote(pick("yawn", "drool"))
M.Stun(1)
M.adjustToxLoss(1)
M.adjustBrainLoss(1)
update_flags |= M.Stun(1, FALSE)
update_flags |= M.adjustToxLoss(1, FALSE)
update_flags |= M.adjustBrainLoss(1, FALSE)
M.bodytemperature -= 20
if(prob(2))
to_chat(M, "<span class='warning'>Your skin feels all rough and dry.</span>")
M.adjustBruteLoss(2)
..()
update_flags |= M.adjustBruteLoss(2, FALSE)
return ..() | update_flags
/datum/reagent/krokodil/overdose_process(mob/living/M, severity)
var/effect = ..()
var/list/overdose_info = ..()
var/effect = overdose_info[REAGENT_OVERDOSE_EFFECT]
var/update_flags = overdose_info[REAGENT_OVERDOSE_FLAGS]
if(severity == 1)
if(effect <= 2)
M.visible_message("<span class='warning'>[M] looks dazed!</span>")
M.Stun(3)
update_flags |= M.Stun(3, FALSE)
M.emote("drool")
else if(effect <= 4)
M.emote("shiver")
M.bodytemperature -= 40
else if(effect <= 7)
to_chat(M, "<span class='warning'>Your skin is cracking and bleeding!</span>")
M.adjustBruteLoss(5)
M.adjustToxLoss(2)
M.adjustBrainLoss(1)
update_flags |= M.adjustBruteLoss(5, FALSE)
update_flags |= M.adjustToxLoss(2, FALSE)
update_flags |= M.adjustBrainLoss(1, FALSE)
M.emote("cry")
else if(severity == 2)
if(effect <= 2)
M.visible_message("<span class='warning'>[M]</b> sways and falls over!</span>")
M.adjustToxLoss(3)
M.adjustBrainLoss(3)
M.Weaken(8)
update_flags |= M.adjustToxLoss(3, FALSE)
update_flags |= M.adjustBrainLoss(3, FALSE)
update_flags |= M.Weaken(8, FALSE)
M.emote("faint")
else if(effect <= 4)
if(ishuman(M))
var/mob/living/carbon/human/H = M
H.visible_message("<span class='warning'>[M]'s skin is rotting away!</span>")
H.adjustBruteLoss(25)
update_flags |= H.adjustBruteLoss(25, FALSE)
H.emote("scream")
H.ChangeToHusk()
H.emote("faint")
else if(effect <= 7)
M.emote("shiver")
M.bodytemperature -= 70
return list(effect, update_flags)
/datum/reagent/methamphetamine
name = "Methamphetamine"
@@ -292,32 +312,35 @@
heart_rate_increase = 1
/datum/reagent/methamphetamine/on_mob_life(mob/living/M)
var/update_flags = STATUS_UPDATE_NONE
if(prob(5))
M.emote(pick("twitch_s","blink_r","shiver"))
if(current_cycle >= 25)
M.AdjustJitter(5)
M.AdjustDrowsy(-10)
M.AdjustParalysis(-2.5)
M.AdjustStunned(-2.5)
M.AdjustWeakened(-2.5)
M.adjustStaminaLoss(-2)
M.SetSleeping(0)
update_flags |= M.AdjustParalysis(-2.5, FALSE)
update_flags |= M.AdjustStunned(-2.5, FALSE)
update_flags |= M.AdjustWeakened(-2.5, FALSE)
update_flags |= M.adjustStaminaLoss(-2, FALSE)
update_flags |= M.SetSleeping(0, FALSE)
M.status_flags |= GOTTAGOFAST_METH
if(prob(50))
M.adjustBrainLoss(1.0)
..()
update_flags |= M.adjustBrainLoss(1, FALSE)
return ..() | update_flags
/datum/reagent/methamphetamine/on_mob_delete(mob/living/M)
M.status_flags &= ~GOTTAGOFAST_METH
..()
/datum/reagent/methamphetamine/overdose_process(mob/living/M, severity)
var/effect = ..()
var/list/overdose_info = ..()
var/effect = overdose_info[REAGENT_OVERDOSE_EFFECT]
var/update_flags = overdose_info[REAGENT_OVERDOSE_FLAGS]
if(severity == 1)
if(effect <= 2)
M.visible_message("<span class='warning'>[M] can't seem to control [M.p_their()] legs!</span>")
M.AdjustConfused(20)
M.Weaken(4)
update_flags |= M.Weaken(4, FALSE)
else if(effect <= 4)
M.visible_message("<span class='warning'>[M]'s hands flip out and flail everywhere!</span>")
M.drop_l_hand()
@@ -332,9 +355,10 @@
else if(effect <= 4)
M.visible_message("<span class='warning'>[M] falls to the floor and flails uncontrollably!</span>")
M.Jitter(10)
M.Weaken(10)
update_flags |= M.Weaken(10, FALSE)
else if(effect <= 7)
M.emote("laugh")
return list(effect, update_flags)
/datum/reagent/bath_salts
name = "Bath Salts"
@@ -348,6 +372,7 @@
/datum/reagent/bath_salts/on_mob_life(mob/living/M)
var/check = rand(0,100)
var/update_flags = STATUS_UPDATE_NONE
if(ishuman(M))
var/mob/living/carbon/human/H = M
var/obj/item/organ/external/head/head_organ = H.get_organ("head")
@@ -358,25 +383,25 @@
H.update_fhair()
H.visible_message("<span class='warning'>[H] has a wild look in [H.p_their()] eyes!</span>")
if(check < 60)
M.SetParalysis(0)
M.SetStunned(0)
M.SetWeakened(0)
update_flags |= M.SetParalysis(0, FALSE)
update_flags |= M.SetStunned(0, FALSE)
update_flags |= M.SetWeakened(0, FALSE)
if(check < 30)
M.emote(pick("twitch", "twitch_s", "scream", "drool", "grumble", "mumble"))
M.Druggy(15)
update_flags |= M.Druggy(15, FALSE)
if(check < 20)
M.AdjustConfused(10)
if(check < 8)
M.reagents.add_reagent(pick("methamphetamine", "crank", "neurotoxin"), rand(1,5))
M.visible_message("<span class='warning'>[M] scratches at something under [M.p_their()] skin!</span>")
M.adjustBruteLoss(5)
update_flags |= M.adjustBruteLoss(5, FALSE)
else if(check < 16)
M.AdjustHallucinate(30)
else if(check < 24)
to_chat(M, "<span class='userdanger'>They're coming for you!</span>")
else if(check < 28)
to_chat(M, "<span class='userdanger'>THEY'RE GONNA GET YOU!</span>")
..()
return ..() | update_flags
/datum/reagent/bath_salts/reaction_mob(mob/living/M, method=TOUCH, volume)
if(method == INGEST)
@@ -390,7 +415,9 @@
to_chat(M, "<span class='notice'>You feel a bit more salty than usual.</span>")
/datum/reagent/bath_salts/overdose_process(mob/living/M, severity)
var/effect = ..()
var/list/overdose_info = ..()
var/effect = overdose_info[REAGENT_OVERDOSE_EFFECT]
var/update_flags = overdose_info[REAGENT_OVERDOSE_FLAGS]
if(severity == 1)
if(effect <= 2)
M.visible_message("<span class='danger'>[M] flails around like a lunatic!</span>")
@@ -401,10 +428,10 @@
else if(effect <= 4)
M.visible_message("<span class='danger'>[M]'s eyes dilate!</span>")
M.emote("twitch_s")
M.adjustToxLoss(2)
M.adjustBrainLoss(1)
M.Stun(3)
M.EyeBlurry(7)
update_flags |= M.adjustToxLoss(2, FALSE)
update_flags |= M.adjustBrainLoss(1, FALSE)
update_flags |= M.Stun(3, FALSE)
update_flags |= M.EyeBlurry(7, FALSE)
M.reagents.add_reagent("jagged_crystals", 5)
else if(effect <= 7)
M.emote("faint")
@@ -412,25 +439,26 @@
else if(severity == 2)
if(effect <= 2)
M.visible_message("<span class='danger'>[M]'s eyes dilate!</span>")
M.adjustToxLoss(2)
M.adjustBrainLoss(1)
M.Stun(3)
M.EyeBlurry(7)
update_flags |= M.adjustToxLoss(2, FALSE)
update_flags |= M.adjustBrainLoss(1, FALSE)
update_flags |= M.Stun(3, FALSE)
update_flags |= M.EyeBlurry(7, FALSE)
M.reagents.add_reagent("jagged_crystals", 5)
else if(effect <= 4)
M.visible_message("<span class='danger'>[M] convulses violently and falls to the floor!</span>")
M.Jitter(50)
M.adjustToxLoss(2)
M.adjustBrainLoss(1)
M.Weaken(8)
update_flags |= M.adjustToxLoss(2, FALSE)
update_flags |= M.adjustBrainLoss(1, FALSE)
update_flags |= M.Weaken(8, FALSE)
M.emote("gasp")
M.reagents.add_reagent("jagged_crystals", 5)
else if(effect <= 7)
M.emote("scream")
M.visible_message("<span class='danger'>[M] tears at [M.p_their()] own skin!</span>")
M.adjustBruteLoss(5)
update_flags |= M.adjustBruteLoss(5, FALSE)
M.reagents.add_reagent("jagged_crystals", 5)
M.emote("twitch")
return list(effect, update_flags)
/datum/reagent/jenkem
name = "Jenkem"
@@ -442,11 +470,12 @@
taste_message = "puke... or worse"
/datum/reagent/jenkem/on_mob_life(mob/living/M)
var/update_flags = STATUS_UPDATE_NONE
M.Dizzy(5)
if(prob(10))
M.emote(pick("twitch_s","drool","moan"))
M.adjustToxLoss(1)
..()
update_flags |= M.adjustToxLoss(1, FALSE)
return ..() | update_flags
/datum/reagent/aranesp
name = "Aranesp"
@@ -456,9 +485,10 @@
color = "#60A584" // rgb: 96, 165, 132
/datum/reagent/aranesp/on_mob_life(mob/living/M)
M.adjustStaminaLoss(-40)
var/update_flags = STATUS_UPDATE_NONE
update_flags |= M.adjustStaminaLoss(-40, FALSE)
if(prob(90))
M.adjustToxLoss(1)
update_flags |= M.adjustToxLoss(1, FALSE)
if(prob(5))
M.emote(pick("twitch", "shake", "tremble","quiver", "twitch_s"))
var/high_message = pick("really buff", "on top of the world","like you're made of steel", "energized", "invigorated", "full of energy")
@@ -466,10 +496,10 @@
to_chat(M, "<span class='notice'>[high_message]!</span>")
if(prob(5))
to_chat(M, "<span class='danger'>You cannot breathe!</span>")
M.adjustOxyLoss(15)
M.Stun(1)
M.AdjustLoseBreath(1)
..()
update_flags |= M.adjustOxyLoss(15, FALSE)
update_flags |= M.Stun(1, FALSE)
M.AdjustLoseBreath(1, FALSE)
return ..() | update_flags
/datum/reagent/thc
name = "Tetrahydrocannabinol"
@@ -489,7 +519,7 @@
if(volume >= 50 && prob(25))
if(prob(10))
M.Drowsy(10)
..()
return ..()
/datum/reagent/fliptonium
name = "Fliptonium"
@@ -504,6 +534,7 @@
taste_message = "flips"
/datum/reagent/fliptonium/on_mob_life(mob/living/M)
var/update_flags = STATUS_UPDATE_NONE
if(current_cycle == 5)
M.SpinAnimation(speed = 11, loops = -1)
if(current_cycle == 10)
@@ -522,12 +553,12 @@
M.SpinAnimation(speed = 4, loops = -1)
M.AdjustDrowsy(-6)
M.AdjustParalysis(-1.5)
M.AdjustStunned(-1.5)
M.AdjustWeakened(-1.5)
M.adjustStaminaLoss(-1.5)
M.SetSleeping(0)
..()
update_flags |= M.AdjustParalysis(-1.5, FALSE)
update_flags |= M.AdjustStunned(-1.5, FALSE)
update_flags |= M.AdjustWeakened(-1.5, FALSE)
update_flags |= M.adjustStaminaLoss(-1.5, FALSE)
update_flags |= M.SetSleeping(0, FALSE)
return ..() | update_flags
/datum/reagent/fliptonium/reaction_mob(mob/living/M, method=TOUCH, volume)
if(method == INGEST || method == TOUCH)
@@ -538,12 +569,14 @@
M.SpinAnimation(speed = 12, loops = -1)
/datum/reagent/fliptonium/overdose_process(mob/living/M, severity)
var/effect = ..()
var/list/overdose_info = ..()
var/effect = overdose_info[REAGENT_OVERDOSE_EFFECT]
var/update_flags = overdose_info[REAGENT_OVERDOSE_FLAGS]
if(severity == 1)
if(effect <= 2)
M.visible_message("<span class='warning'>[M] can't seem to control [M.p_their()] legs!</span>")
M.AdjustConfused(33)
M.Weaken(2)
update_flags |= M.Weaken(2, FALSE)
else if(effect <= 4)
M.visible_message("<span class='warning'>[M]'s hands flip out and flail everywhere!</span>")
M.drop_l_hand()
@@ -558,9 +591,10 @@
else if(effect <= 4)
M.visible_message("<span class='warning'>[M] falls to the floor and flails uncontrollably!</span>")
M.Jitter(5)
M.Weaken(5)
update_flags |= M.Weaken(5, FALSE)
else if(effect <= 7)
M.emote("laugh")
return list(effect, update_flags)
//////////////////////////////
// Synth-Drugs //
@@ -580,28 +614,32 @@
taste_message = "wiper fluid"
/datum/reagent/lube/ultra/on_mob_life(mob/living/M)
var/update_flags = STATUS_UPDATE_NONE
var/high_message = pick("You feel your servos whir!", "You feel like you need to go faster.", "You feel like you were just overclocked!")
if(prob(1))
if(prob(1))
high_message = "0100011101001111010101000101010001000001010001110100111101000110010000010101001101010100!"
if(prob(5))
to_chat(M, "<span class='notice'>[high_message]</span>")
M.AdjustParalysis(-2)
M.AdjustStunned(-2)
M.AdjustWeakened(-2)
M.adjustStaminaLoss(-2)
update_flags |= M.AdjustParalysis(-2, FALSE)
update_flags |= M.AdjustStunned(-2, FALSE)
update_flags |= M.AdjustWeakened(-2, FALSE)
update_flags |= M.adjustStaminaLoss(-2, FALSE)
M.status_flags |= GOTTAGOFAST_METH
M.Jitter(3)
M.adjustBrainLoss(0.5)
update_flags |= M.adjustBrainLoss(0.5, FALSE)
if(prob(5))
M.emote(pick("twitch", "shiver"))
..()
return ..() | update_flags
/datum/reagent/lube/ultra/on_mob_delete(mob/living/M)
M.status_flags &= ~GOTTAGOFAST_METH
..()
/datum/reagent/lube/ultra/overdose_process(mob/living/M, severity)
var/list/overdose_info = ..()
var/effect = overdose_info[REAGENT_OVERDOSE_EFFECT]
var/update_flags = overdose_info[REAGENT_OVERDOSE_FLAGS]
if(prob(20))
M.emote("ping")
if(prob(33))
@@ -610,9 +648,9 @@
if(I)
M.drop_item()
if(prob(50))
M.adjustFireLoss(10)
M.adjustBrainLoss(pick(0.5, 0.6, 0.7, 0.8, 0.9, 1))
..()
update_flags |= M.adjustFireLoss(10, FALSE)
update_flags |= M.adjustBrainLoss(pick(0.5, 0.6, 0.7, 0.8, 0.9, 1), FALSE)
return list(effect, update_flags)
//Surge: Krokodil
/datum/reagent/surge
@@ -629,19 +667,21 @@
/datum/reagent/surge/on_mob_life(mob/living/M)
M.Druggy(15)
var/update_flags = STATUS_UPDATE_NONE
update_flags |= M.Druggy(15)
var/high_message = pick("You feel calm.", "You feel collected.", "You feel like you need to relax.")
if(prob(1))
if(prob(1))
high_message = "01010100010100100100000101001110010100110100001101000101010011100100010001000101010011100100001101000101."
if(prob(5))
to_chat(M, "<span class='notice'>[high_message]</span>")
..()
return ..() | update_flags
/datum/reagent/surge/overdose_process(mob/living/M, severity)
var/update_flags = STATUS_UPDATE_NONE
//Hit them with the same effects as an electrode!
M.Stun(5)
M.Weaken(5)
update_flags |= M.Stun(5, FALSE)
update_flags |= M.Weaken(5, FALSE)
M.Jitter(20)
M.apply_effect(STUTTER, 5)
if(prob(10))
@@ -654,5 +694,6 @@
B.pixel_x = rand(-20, 0)
B.pixel_y = rand(-20, 0)
B.icon = I
M.adjustFireLoss(rand(1,5)*REAGENTS_EFFECT_MULTIPLIER)
M.adjustBruteLoss(rand(1,5)*REAGENTS_EFFECT_MULTIPLIER)
update_flags |= M.adjustFireLoss(rand(1,5)*REAGENTS_EFFECT_MULTIPLIER, FALSE)
update_flags |= M.adjustBruteLoss(rand(1,5)*REAGENTS_EFFECT_MULTIPLIER, FALSE)
return list(0, update_flags)
@@ -14,7 +14,7 @@
var/mob/living/carbon/human/H = M
if(H.can_eat(diet_flags)) //Make sure the species has it's dietflag set, otherwise it can't digest any nutrients
H.nutrition += nutriment_factor // For hunger and fatness
..()
return ..()
/datum/reagent/consumable/nutriment // Pure nutriment, universally digestable and thus slightly less effective
name = "Nutriment"
@@ -25,16 +25,17 @@
color = "#664330" // rgb: 102, 67, 48
/datum/reagent/consumable/nutriment/on_mob_life(mob/living/M)
var/update_flags = STATUS_UPDATE_NONE
if(!(M.mind in ticker.mode.vampires))
if(ishuman(M))
var/mob/living/carbon/human/H = M
if(H.can_eat(diet_flags)) //Make sure the species has it's dietflag set, otherwise it can't digest any nutrients
if(prob(50))
M.adjustBruteLoss(-1)
update_flags |= M.adjustBruteLoss(-1, FALSE)
if(!(NO_BLOOD in H.dna.species.species_traits))//do not restore blood on things with no blood by nature.
if(H.blood_volume < BLOOD_VOLUME_NORMAL)
H.blood_volume += 0.4
..()
return ..() | update_flags
/datum/reagent/consumable/nutriment/protein // Meat-based protein, digestable by carnivores and omnivores, worthless to herbivores
name = "Protein"
@@ -59,9 +60,10 @@
taste_message = null
/datum/reagent/consumable/vitamin/on_mob_life(mob/living/M)
var/update_flags = STATUS_UPDATE_NONE
if(prob(50))
M.adjustBruteLoss(-1)
M.adjustFireLoss(-1)
update_flags |= M.adjustBruteLoss(-1, FALSE)
update_flags |= M.adjustFireLoss(-1, FALSE)
if(M.satiety < 600)
M.satiety += 30
if(ishuman(M))
@@ -69,7 +71,7 @@
if(!(NO_BLOOD in H.dna.species.species_traits))//do not restore blood on things with no blood by nature.
if(H.blood_volume < BLOOD_VOLUME_NORMAL)
H.blood_volume += 0.5
..()
return ..() | update_flags
/datum/reagent/consumable/sugar
name = "Sugar"
@@ -82,16 +84,17 @@
taste_message = "sweetness"
/datum/reagent/consumable/sugar/on_mob_life(mob/living/M)
var/update_flags = STATUS_UPDATE_NONE
M.AdjustDrowsy(-5)
if(current_cycle >= 90)
M.AdjustJitter(2)
if(prob(50))
M.AdjustParalysis(-1)
M.AdjustStunned(-1)
M.AdjustWeakened(-1)
update_flags |= M.AdjustParalysis(-1, FALSE)
update_flags |= M.AdjustStunned(-1, FALSE)
update_flags |= M.AdjustWeakened(-1, FALSE)
if(prob(4))
M.reagents.add_reagent("epinephrine", 1.2)
..()
return ..() | update_flags
/datum/reagent/consumable/sugar/overdose_start(mob/living/M)
to_chat(M, "<span class='danger'>You pass out from hyperglycemic shock!</span>")
@@ -99,10 +102,12 @@
..()
/datum/reagent/consumable/sugar/overdose_process(mob/living/M, severity)
M.Paralyse(3 * severity)
M.Weaken(4 * severity)
var/update_flags = STATUS_UPDATE_NONE
update_flags |= M.Paralyse(3 * severity, FALSE)
update_flags |= M.Weaken(4 * severity, FALSE)
if(prob(8))
M.adjustToxLoss(severity)
update_flags |= M.adjustToxLoss(severity, FALSE)
return list(0, update_flags)
/datum/reagent/consumable/soysauce
name = "Soysauce"
@@ -150,7 +155,7 @@
M.bodytemperature += 20 * TEMPERATURE_DAMAGE_COEFFICIENT
if(isslime(M))
M.bodytemperature += rand(20,25)
..()
return ..()
/datum/reagent/consumable/condensedcapsaicin
name = "Condensed Capsaicin"
@@ -163,7 +168,7 @@
/datum/reagent/consumable/condensedcapsaicin/on_mob_life(mob/living/M)
if(prob(5))
M.visible_message("<span class='warning'>[M] [pick("dry heaves!","coughs!","splutters!")]</span>")
..()
return ..()
/datum/reagent/consumable/condensedcapsaicin/reaction_mob(mob/living/M, method=TOUCH, volume)
if(method == TOUCH)
@@ -253,7 +258,7 @@
M.emote("shiver")
if(isslime(M))
M.bodytemperature -= rand(20,25)
..()
return ..()
/datum/reagent/consumable/frostoil/reaction_turf(turf/T, volume)
if(volume >= 5)
@@ -270,9 +275,10 @@
taste_message = "salt"
/datum/reagent/consumable/sodiumchloride/overdose_process(mob/living/M, severity)
var/update_flags = STATUS_UPDATE_NONE
if(prob(70))
M.adjustBrainLoss(1)
..()
update_flags |= M.adjustBrainLoss(1, FALSE)
return ..() | update_flags
/datum/reagent/consumable/blackpepper
name = "Black Pepper"
@@ -311,7 +317,7 @@
/datum/reagent/consumable/hot_coco/on_mob_life(mob/living/M)
if(M.bodytemperature < 310)//310 is the normal bodytemp. 310.055
M.bodytemperature = min(310, M.bodytemperature + (5 * TEMPERATURE_DAMAGE_COEFFICIENT))
..()
return ..()
/datum/reagent/consumable/sprinkles
name = "Sprinkles"
@@ -321,10 +327,11 @@
taste_message = "sweetness"
/datum/reagent/consumable/sprinkles/on_mob_life(mob/living/M)
var/update_flags = STATUS_UPDATE_NONE
if(ishuman(M) && M.job in list("Security Officer", "Security Pod Pilot", "Detective", "Warden", "Head of Security", "Brig Physician", "Internal Affairs Agent", "Magistrate"))
M.adjustBruteLoss(-1)
M.adjustFireLoss(-1)
..()
update_flags |= M.adjustBruteLoss(-1, FALSE)
update_flags |= M.adjustFireLoss(-1, FALSE)
return ..() | update_flags
/datum/reagent/consumable/cornoil
name = "Corn Oil"
@@ -376,7 +383,7 @@
/datum/reagent/consumable/hot_ramen/on_mob_life(mob/living/M)
if(M.bodytemperature < 310)//310 is the normal bodytemp. 310.055
M.bodytemperature = min(310, M.bodytemperature + (10 * TEMPERATURE_DAMAGE_COEFFICIENT))
..()
return ..()
/datum/reagent/consumable/hell_ramen
name = "Hell Ramen"
@@ -389,7 +396,7 @@
/datum/reagent/consumable/hell_ramen/on_mob_life(mob/living/M)
M.bodytemperature += 10 * TEMPERATURE_DAMAGE_COEFFICIENT
..()
return ..()
/datum/reagent/consumable/flour
name = "flour"
@@ -461,7 +468,7 @@
/datum/reagent/consumable/corn_syrup/on_mob_life(mob/living/M)
M.reagents.add_reagent("sugar", 1.2)
..()
return ..()
/datum/reagent/consumable/vhfcs
name = "Very-high-fructose corn syrup"
@@ -473,7 +480,7 @@
/datum/reagent/consumable/vhfcs/on_mob_life(mob/living/M)
M.reagents.add_reagent("sugar", 2.4)
..()
return ..()
/datum/reagent/consumable/honey
name = "Honey"
@@ -485,11 +492,12 @@
taste_message = "sweetness"
/datum/reagent/consumable/honey/on_mob_life(mob/living/M)
var/update_flags = STATUS_UPDATE_NONE
M.reagents.add_reagent("sugar", 3)
if(prob(20))
M.adjustBruteLoss(-3)
M.adjustFireLoss(-1)
..()
update_flags |= M.adjustBruteLoss(-3, FALSE)
update_flags |= M.adjustFireLoss(-1, FALSE)
return ..() | update_flags
/datum/reagent/consumable/onion
name = "Concentrated Onion Juice"
@@ -524,7 +532,7 @@
/datum/reagent/consumable/chocolate/on_mob_life(mob/living/M)
M.reagents.add_reagent("sugar", 0.8)
..()
return ..()
/datum/reagent/consumable/chocolate/reaction_turf(turf/T, volume)
if(volume >= 5 && !isspaceturf(T))
@@ -539,13 +547,14 @@
taste_message = "tea"
/datum/reagent/consumable/mugwort/on_mob_life(mob/living/M)
var/update_flags = STATUS_UPDATE_NONE
if(ishuman(M) && M.mind)
if(M.mind.special_role == SPECIAL_ROLE_WIZARD)
M.adjustToxLoss(-1*REAGENTS_EFFECT_MULTIPLIER)
M.adjustOxyLoss(-1*REAGENTS_EFFECT_MULTIPLIER)
M.adjustBruteLoss(-1*REAGENTS_EFFECT_MULTIPLIER)
M.adjustFireLoss(-1*REAGENTS_EFFECT_MULTIPLIER)
..()
update_flags |= M.adjustToxLoss(-1*REAGENTS_EFFECT_MULTIPLIER, FALSE)
update_flags |= M.adjustOxyLoss(-1*REAGENTS_EFFECT_MULTIPLIER, FALSE)
update_flags |= M.adjustBruteLoss(-1*REAGENTS_EFFECT_MULTIPLIER, FALSE)
update_flags |= M.adjustFireLoss(-1*REAGENTS_EFFECT_MULTIPLIER, FALSE)
return ..() | update_flags
/datum/reagent/consumable/porktonium
name = "Porktonium"
@@ -563,6 +572,7 @@
if(prob(8))
M.reagents.add_reagent("radium", 15)
M.reagents.add_reagent("cyanide", 10)
return list(0, STATUS_UPDATE_NONE)
/datum/reagent/consumable/chicken_soup
name = "Chicken soup"
@@ -585,7 +595,7 @@
/datum/reagent/consumable/cheese/on_mob_life(mob/living/M)
if(prob(3))
M.reagents.add_reagent("cholesterol", rand(1,2))
..()
return ..()
/datum/reagent/consumable/cheese/reaction_turf(turf/T, volume)
if(volume >= 5 && !isspaceturf(T))
@@ -601,9 +611,11 @@
taste_message = "cheese?"
/datum/reagent/consumable/fake_cheese/overdose_process(mob/living/M, severity)
var/update_flags = STATUS_UPDATE_NONE
if(prob(8))
to_chat(M, "<span class='warning'>You feel something squirming in your stomach. Your thoughts turn to cheese and you begin to sweat.</span>")
M.adjustToxLoss(rand(1,2))
update_flags |= M.adjustToxLoss(rand(1,2), FALSE)
return list(0, update_flags)
/datum/reagent/consumable/weird_cheese
name = "Weird cheese"
@@ -617,7 +629,7 @@
/datum/reagent/consumable/weird_cheese/on_mob_life(mob/living/M)
if(prob(5))
M.reagents.add_reagent("cholesterol", rand(1,3))
..()
return ..()
/datum/reagent/consumable/weird_cheese/reaction_turf(turf/T, volume)
if(volume >= 5 && !isspaceturf(T))
@@ -634,7 +646,7 @@
/datum/reagent/consumable/beans/on_mob_life(mob/living/M)
if(prob(10))
M.emote("fart")
..()
return ..()
/datum/reagent/consumable/bread
name = "Bread"
@@ -657,7 +669,7 @@
M.reagents.add_reagent("cholesterol", rand(1,3))
if(prob(8))
M.reagents.add_reagent("porktonium", 5)
..()
return ..()
/datum/reagent/consumable/hydrogenated_soybeanoil
name = "Partially hydrogenated space-soybean oil"
@@ -678,19 +690,21 @@
metabolization_rate = 0.4
else
metabolization_rate = 0.2
..()
return ..()
/datum/reagent/consumable/hydrogenated_soybeanoil/overdose_process(mob/living/M, severity)
var/update_flags = STATUS_UPDATE_NONE
if(prob(33))
to_chat(M, "<span class='warning'>You feel horribly weak.</span>")
if(prob(10))
to_chat(M, "<span class='warning'>You cannot breathe!</span>")
M.adjustOxyLoss(5)
update_flags |= M.adjustOxyLoss(5, FALSE)
if(prob(5))
to_chat(M, "<span class='warning'>You feel a sharp pain in your chest!</span>")
M.adjustOxyLoss(25)
M.Stun(5)
M.Paralyse(10)
update_flags |= M.adjustOxyLoss(25, FALSE)
update_flags |= M.Stun(5, FALSE)
update_flags |= M.Paralyse(10, FALSE)
return list(0, update_flags)
/datum/reagent/consumable/meatslurry
name = "Meat Slurry"
@@ -703,7 +717,7 @@
/datum/reagent/consumable/meatslurry/on_mob_life(mob/living/M)
if(prob(4))
M.reagents.add_reagent("cholesterol", rand(1,3))
..()
return ..()
/datum/reagent/consumable/meatslurry/reaction_turf(turf/T, volume)
if(prob(10) && volume >= 5 && !isspaceturf(T))
@@ -742,7 +756,7 @@
else if(prob(6))
to_chat(M, "<span class='warning'>[pick("You feel ill.","Your stomach churns.","You feel queasy.","You feel sick.")]</span>")
M.emote(pick("groan","moan"))
..()
return ..()
/datum/reagent/consumable/pepperoni
name = "Pepperoni"
@@ -786,8 +800,9 @@
/datum/reagent/questionmark/reaction_mob(mob/living/M, method=TOUCH, volume)
if(method == INGEST)
M.Stun(2)
M.Weaken(2)
M.Stun(2, FALSE)
M.Weaken(2, FALSE)
M.update_canmove()
to_chat(M, "<span class='danger'>Ugh! Eating that was a terrible idea!</span>")
M.ForceContractDisease(new /datum/disease/food_poisoning(0))
@@ -801,13 +816,14 @@
taste_message = "excellent cuisine"
/datum/reagent/msg/on_mob_life(mob/living/M)
var/update_flags = STATUS_UPDATE_NONE
if(prob(5))
if(prob(10))
M.adjustToxLoss(rand(2.4))
update_flags |= M.adjustToxLoss(rand(2.4), FALSE)
if(prob(7))
to_chat(M, "<span class='warning'>A horrible migraine overpowers you.</span>")
M.Stun(rand(2,5))
..()
update_flags |= M.Stun(rand(2,5), FALSE)
return ..() | update_flags
/datum/reagent/cholesterol
name = "cholesterol"
@@ -818,22 +834,23 @@
taste_message = "heart attack"
/datum/reagent/cholesterol/on_mob_life(mob/living/M)
var/update_flags = STATUS_UPDATE_NONE
if(volume >= 25 && prob(volume*0.15))
to_chat(M, "<span class='warning'>Your chest feels [pick("weird","uncomfortable","nasty","gross","odd","unusual","warm")]!</span>")
M.adjustToxLoss(rand(1,2))
update_flags |= M.adjustToxLoss(rand(1,2), FALSE)
else if(volume >= 45 && prob(volume*0.08))
to_chat(M, "<span class='warning'>Your chest [pick("hurts","stings","aches","burns")]!</span>")
M.adjustToxLoss(rand(2,4))
M.Stun(1)
update_flags |= M.adjustToxLoss(rand(2,4), FALSE)
update_flags |= M.Stun(1, FALSE)
else if(volume >= 150 && prob(volume*0.01))
to_chat(M, "<span class='warning'>Your chest is burning with pain!</span>")
M.Stun(1)
M.Weaken(1)
update_flags |= M.Stun(1, FALSE)
update_flags |= M.Weaken(1, FALSE)
if(ishuman(M))
var/mob/living/carbon/human/H = M
if(!H.undergoing_cardiac_arrest())
H.set_heartattack(TRUE)
..()
return ..() | update_flags
/datum/reagent/fungus
name = "Space fungus"
@@ -868,7 +885,7 @@
var/spooky_message = pick("You notice something moving out of the corner of your eye, but nothing is there...", "Your eyes twitch, you feel like something you can't see is here...", "You've got the heebie-jeebies.", "You feel uneasy.", "You shudder as if cold...", "You feel something gliding across your back...")
if(prob(8))
to_chat(M, "<span class='warning'>[spooky_message]</span>")
..()
return ..()
/datum/reagent/ectoplasm/reaction_mob(mob/living/M, method=TOUCH, volume)
if(method == INGEST)
@@ -879,12 +896,12 @@
if(volume >= 10 && !isspaceturf(T))
new /obj/item/reagent_containers/food/snacks/ectoplasm(T)
///Vomit///
/datum/reagent/consumable/bread/reaction_turf(turf/T, volume)
if(volume >= 5 && !isspaceturf(T))
new /obj/item/reagent_containers/food/snacks/breadslice(T)
///Vomit///
/datum/reagent/vomit
name = "Vomit"
id = "vomit"
@@ -921,15 +938,16 @@
taste_message = "mold"
/datum/reagent/consumable/entpoly/on_mob_life(mob/living/M)
var/update_flags = STATUS_UPDATE_NONE
if(current_cycle >= 10)
M.Paralyse(2)
update_flags |= M.Paralyse(2, FALSE)
if(prob(20))
M.LoseBreath(4)
M.adjustBrainLoss(2 * REAGENTS_EFFECT_MULTIPLIER)
M.adjustToxLoss(3 * REAGENTS_EFFECT_MULTIPLIER)
M.adjustStaminaLoss(10 * REAGENTS_EFFECT_MULTIPLIER)
M.EyeBlurry(5)
..()
update_flags |= M.LoseBreath(4, FALSE)
update_flags |= M.adjustBrainLoss(2 * REAGENTS_EFFECT_MULTIPLIER, FALSE)
update_flags |= M.adjustToxLoss(3 * REAGENTS_EFFECT_MULTIPLIER, FALSE)
update_flags |= M.adjustStaminaLoss(10 * REAGENTS_EFFECT_MULTIPLIER, FALSE)
update_flags |= M.EyeBlurry(5, FALSE)
return ..() | update_flags
/datum/reagent/consumable/tinlux
name = "Tinea Luxor"
@@ -943,7 +961,7 @@
if(!light_activated)
M.set_light(2)
light_activated = 1
..()
return ..()
/datum/reagent/consumable/tinlux/on_mob_delete(mob/living/M)
M.set_light(0)
@@ -957,7 +975,8 @@
taste_message = "sweetness"
/datum/reagent/consumable/vitfro/on_mob_life(mob/living/M)
var/update_flags = STATUS_UPDATE_NONE
if(prob(80))
M.adjustBruteLoss(-1 * REAGENTS_EFFECT_MULTIPLIER)
M.adjustFireLoss(-1 * REAGENTS_EFFECT_MULTIPLIER)
..()
update_flags |= M.adjustBruteLoss(-1 * REAGENTS_EFFECT_MULTIPLIER, FALSE)
update_flags |= M.adjustFireLoss(-1 * REAGENTS_EFFECT_MULTIPLIER, FALSE)
return ..() | update_flags
@@ -20,7 +20,7 @@
var/mob/living/carbon/human/H = M
if(H.traumatic_shock < 100)
H.shock_stage = 0
..()
return ..()
/datum/reagent/medicine/sterilizine
name = "Sterilizine"
@@ -49,17 +49,20 @@
overdose_threshold = 40
/datum/reagent/medicine/synaptizine/on_mob_life(mob/living/M)
var/update_flags = STATUS_UPDATE_NONE
M.AdjustDrowsy(-5)
M.AdjustParalysis(-1)
M.AdjustStunned(-1)
M.AdjustWeakened(-1)
M.SetSleeping(0)
update_flags |= M.AdjustParalysis(-1, FALSE)
update_flags |= M.AdjustStunned(-1, FALSE)
update_flags |= M.AdjustWeakened(-1, FALSE)
update_flags |= M.SetSleeping(0, FALSE)
if(prob(50))
M.adjustBrainLoss(-1.0)
..()
update_flags |= M.adjustBrainLoss(-1, FALSE)
return ..() | update_flags
/datum/reagent/medicine/synaptizine/overdose_process(mob/living/M, severity)
var/effect = ..()
var/list/overdose_info = ..()
var/effect = overdose_info[REAGENT_OVERDOSE_EFFECT]
var/update_flags = overdose_info[REAGENT_OVERDOSE_FLAGS]
if(severity == 1)
if(effect <= 1)
M.visible_message("<span class='warning'>[M] suddenly and violently vomits!</span>")
@@ -67,7 +70,7 @@
else if(effect <= 3)
M.emote(pick("groan","moan"))
if(effect <= 8)
M.adjustToxLoss(1)
update_flags |= M.adjustToxLoss(1, FALSE)
else if(severity == 2)
if(effect <= 2)
M.visible_message("<span class='warning'>[M] suddenly and violently vomits!</span>")
@@ -75,9 +78,10 @@
else if(effect <= 5)
M.visible_message("<span class='warning'>[M] staggers and drools, [M.p_their()] eyes bloodshot!</span>")
M.Dizzy(8)
M.Weaken(4)
update_flags |= M.Weaken(4, FALSE)
if(effect <= 15)
M.adjustToxLoss(1)
update_flags |= M.adjustToxLoss(1, FALSE)
return list(effect, update_flags)
/datum/reagent/medicine/mitocholide
name = "Mitocholide"
@@ -93,7 +97,7 @@
//Mitocholide is hard enough to get, it's probably fair to make this all internal organs
for(var/obj/item/organ/internal/I in H.internal_organs)
I.heal_internal_damage(0.4)
..()
return ..()
/datum/reagent/medicine/mitocholide/reaction_obj(obj/O, volume)
if(istype(O, /obj/item/organ))
@@ -110,18 +114,19 @@
heart_rate_decrease = 1
/datum/reagent/medicine/cryoxadone/on_mob_life(mob/living/M)
var/update_flags = STATUS_UPDATE_NONE
if(M.bodytemperature < 265)
M.adjustCloneLoss(-4)
M.adjustOxyLoss(-10)
M.adjustToxLoss(-3)
M.adjustBruteLoss(-12)
M.adjustFireLoss(-12)
update_flags |= M.adjustCloneLoss(-4, FALSE)
update_flags |= M.adjustOxyLoss(-10, FALSE)
update_flags |= M.adjustToxLoss(-3, FALSE)
update_flags |= M.adjustBruteLoss(-12, FALSE)
update_flags |= M.adjustFireLoss(-12, FALSE)
if(ishuman(M))
var/mob/living/carbon/human/H = M
var/obj/item/organ/external/head/head = H.get_organ("head")
if(head)
head.disfigured = FALSE
..()
return ..() | update_flags
/datum/reagent/medicine/rezadone
name = "Rezadone"
@@ -132,21 +137,24 @@
overdose_threshold = 30
/datum/reagent/medicine/rezadone/on_mob_life(mob/living/M)
M.setCloneLoss(0) //Rezadone is almost never used in favor of cryoxadone. Hopefully this will change that.
M.adjustCloneLoss(-1) //What? We just set cloneloss to 0. Why? Simple; this is so external organs properly unmutate.
M.adjustBruteLoss(-1)
M.adjustFireLoss(-1)
var/update_flags = STATUS_UPDATE_NONE
update_flags |= M.setCloneLoss(0, FALSE) //Rezadone is almost never used in favor of cryoxadone. Hopefully this will change that.
update_flags |= M.adjustCloneLoss(-1, FALSE) //What? We just set cloneloss to 0. Why? Simple; this is so external organs properly unmutate. // why don't you fix the code instead
update_flags |= M.adjustBruteLoss(-1, FALSE)
update_flags |= M.adjustFireLoss(-1, FALSE)
if(ishuman(M))
var/mob/living/carbon/human/H = M
var/obj/item/organ/external/head/head = H.get_organ("head")
if(head)
head.disfigured = FALSE
..()
return ..() | update_flags
/datum/reagent/medicine/rezadone/overdose_process(mob/living/M, severity)
M.adjustToxLoss(1)
var/update_flags = STATUS_UPDATE_NONE
update_flags |= M.adjustToxLoss(1, FALSE)
M.Dizzy(5)
M.Jitter(5)
return list(0, update_flags)
/datum/reagent/medicine/spaceacillin
name = "Spaceacillin"
@@ -165,8 +173,9 @@
metabolization_rate = 3
/datum/reagent/medicine/silver_sulfadiazine/on_mob_life(mob/living/M)
M.adjustFireLoss(-2*REAGENTS_EFFECT_MULTIPLIER)
..()
var/update_flags = STATUS_UPDATE_NONE
update_flags |= M.adjustFireLoss(-2*REAGENTS_EFFECT_MULTIPLIER, FALSE)
return ..() | update_flags
/datum/reagent/medicine/silver_sulfadiazine/reaction_mob(mob/living/M, method=TOUCH, volume, show_message = 1)
if(iscarbon(M))
@@ -189,8 +198,9 @@
metabolization_rate = 3
/datum/reagent/medicine/styptic_powder/on_mob_life(mob/living/M)
M.adjustBruteLoss(-2*REAGENTS_EFFECT_MULTIPLIER)
..()
var/update_flags = STATUS_UPDATE_NONE
update_flags |= M.adjustBruteLoss(-2*REAGENTS_EFFECT_MULTIPLIER, FALSE)
return ..() | update_flags
/datum/reagent/medicine/styptic_powder/reaction_mob(mob/living/M, method=TOUCH, volume, show_message = 1)
if(iscarbon(M))
@@ -216,15 +226,16 @@
taste_message = "salt"
/datum/reagent/medicine/salglu_solution/on_mob_life(mob/living/M)
var/update_flags = STATUS_UPDATE_NONE
if(prob(33))
M.adjustBruteLoss(-2*REAGENTS_EFFECT_MULTIPLIER)
M.adjustFireLoss(-2*REAGENTS_EFFECT_MULTIPLIER)
update_flags |= M.adjustBruteLoss(-2*REAGENTS_EFFECT_MULTIPLIER, FALSE)
update_flags |= M.adjustFireLoss(-2*REAGENTS_EFFECT_MULTIPLIER, FALSE)
if(ishuman(M) && prob(33))
var/mob/living/carbon/human/H = M
if(!(NO_BLOOD in H.dna.species.species_traits))//do not restore blood on things with no blood by nature.
if(H.blood_volume < BLOOD_VOLUME_NORMAL)
H.blood_volume += 1
..()
return ..() | update_flags
/datum/reagent/medicine/synthflesh
name = "Synthflesh"
@@ -255,12 +266,13 @@
color = "#000000"
/datum/reagent/medicine/charcoal/on_mob_life(mob/living/M)
M.adjustToxLoss(-1.5*REAGENTS_EFFECT_MULTIPLIER)
var/update_flags = STATUS_UPDATE_NONE
update_flags |= M.adjustToxLoss(-1.5*REAGENTS_EFFECT_MULTIPLIER, FALSE)
if(prob(50))
for(var/datum/reagent/R in M.reagents.reagent_list)
if(R != src)
M.reagents.remove_reagent(R.id,1)
..()
return ..() | update_flags
/datum/reagent/medicine/omnizine
name = "Omnizine"
@@ -273,30 +285,33 @@
addiction_chance = 5
/datum/reagent/medicine/omnizine/on_mob_life(mob/living/M)
M.adjustToxLoss(-1*REAGENTS_EFFECT_MULTIPLIER)
M.adjustOxyLoss(-1*REAGENTS_EFFECT_MULTIPLIER)
M.adjustBruteLoss(-2*REAGENTS_EFFECT_MULTIPLIER)
M.adjustFireLoss(-2*REAGENTS_EFFECT_MULTIPLIER)
var/update_flags = STATUS_UPDATE_NONE
update_flags |= M.adjustToxLoss(-1*REAGENTS_EFFECT_MULTIPLIER, FALSE)
update_flags |= M.adjustOxyLoss(-1*REAGENTS_EFFECT_MULTIPLIER, FALSE)
update_flags |= M.adjustBruteLoss(-2*REAGENTS_EFFECT_MULTIPLIER, FALSE)
update_flags |= M.adjustFireLoss(-2*REAGENTS_EFFECT_MULTIPLIER, FALSE)
if(prob(50))
M.AdjustLoseBreath(-1)
..()
return ..() | update_flags
/datum/reagent/medicine/omnizine/overdose_process(mob/living/M, severity)
var/effect = ..()
var/list/overdose_info = ..()
var/effect = overdose_info[REAGENT_OVERDOSE_EFFECT]
var/update_flags = overdose_info[REAGENT_OVERDOSE_FLAGS]
if(severity == 1) //lesser
M.stuttering += 1
M.AdjustStuttering(1)
if(effect <= 1)
M.visible_message("<span class='warning'>[M] suddenly cluches [M.p_their()] gut!</span>")
M.emote("scream")
M.Stun(4)
M.Weaken(4)
update_flags |= M.Stun(4, FALSE)
update_flags |= M.Weaken(4, FALSE)
else if(effect <= 3)
M.visible_message("<span class='warning'>[M] completely spaces out for a moment.</span>")
M.AdjustConfused(15)
else if(effect <= 5)
M.visible_message("<span class='warning'>[M] stumbles and staggers.</span>")
M.Dizzy(5)
M.Weaken(3)
update_flags |= M.Weaken(3, FALSE)
else if(effect <= 7)
M.visible_message("<span class='warning'>[M] shakes uncontrollably.</span>")
M.Jitter(30)
@@ -304,16 +319,17 @@
if(effect <= 2)
M.visible_message("<span class='warning'>[M] suddenly cluches [M.p_their()] gut!</span>")
M.emote("scream")
M.Stun(7)
M.Weaken(7)
update_flags |= M.Stun(7, FALSE)
update_flags |= M.Weaken(7, FALSE)
else if(effect <= 5)
M.visible_message("<span class='warning'>[M] jerks bolt upright, then collapses!</span>")
M.Paralyse(5)
M.Weaken(4)
update_flags |= M.Paralyse(5, FALSE)
update_flags |= M.Weaken(4, FALSE)
else if(effect <= 8)
M.visible_message("<span class='warning'>[M] stumbles and staggers.</span>")
M.Dizzy(5)
M.Weaken(3)
update_flags |= M.Weaken(3, FALSE)
return list(effect, update_flags)
/datum/reagent/medicine/calomel
name = "Calomel"
@@ -324,14 +340,15 @@
metabolization_rate = 0.8
/datum/reagent/medicine/calomel/on_mob_life(mob/living/M)
var/update_flags = STATUS_UPDATE_NONE
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*REAGENTS_EFFECT_MULTIPLIER)
update_flags |= M.adjustToxLoss(5*REAGENTS_EFFECT_MULTIPLIER, FALSE)
if(prob(6))
M.fakevomit()
..()
return ..() | update_flags
/datum/reagent/medicine/potass_iodide
name = "Potassium Iodide"
@@ -343,7 +360,7 @@
/datum/reagent/medicine/potass_iodide/on_mob_life(mob/living/M)
if(prob(80))
M.radiation = max(0, M.radiation-1)
..()
return ..()
/datum/reagent/medicine/pen_acid
name = "Pentetic Acid"
@@ -353,16 +370,17 @@
color = "#C8A5DC"
/datum/reagent/medicine/pen_acid/on_mob_life(mob/living/M)
var/update_flags = STATUS_UPDATE_NONE
for(var/datum/reagent/R in M.reagents.reagent_list)
if(R != src)
M.reagents.remove_reagent(R.id,4)
M.radiation = max(0, M.radiation-7)
if(prob(75))
M.adjustToxLoss(-4*REAGENTS_EFFECT_MULTIPLIER)
update_flags |= M.adjustToxLoss(-4*REAGENTS_EFFECT_MULTIPLIER, FALSE)
if(prob(33))
M.adjustBruteLoss(1*REAGENTS_EFFECT_MULTIPLIER)
M.adjustFireLoss(1*REAGENTS_EFFECT_MULTIPLIER)
..()
update_flags |= M.adjustBruteLoss(1*REAGENTS_EFFECT_MULTIPLIER, FALSE)
update_flags |= M.adjustFireLoss(1*REAGENTS_EFFECT_MULTIPLIER, FALSE)
return ..() | update_flags
/datum/reagent/medicine/sal_acid
name = "Salicylic Acid"
@@ -375,13 +393,14 @@
overdose_threshold = 25
/datum/reagent/medicine/sal_acid/on_mob_life(mob/living/M)
var/update_flags = STATUS_UPDATE_NONE
if(prob(55))
M.adjustBruteLoss(-2*REAGENTS_EFFECT_MULTIPLIER)
update_flags |= M.adjustBruteLoss(-2*REAGENTS_EFFECT_MULTIPLIER, FALSE)
if(ishuman(M))
var/mob/living/carbon/human/H = M
if(H.traumatic_shock < 100)
H.shock_stage = 0
..()
return ..() | update_flags
/datum/reagent/medicine/salbutamol
name = "Salbutamol"
@@ -392,9 +411,10 @@
metabolization_rate = 0.2
/datum/reagent/medicine/salbutamol/on_mob_life(mob/living/M)
M.adjustOxyLoss(-6*REAGENTS_EFFECT_MULTIPLIER)
var/update_flags = STATUS_UPDATE_NONE
update_flags |= M.adjustOxyLoss(-6*REAGENTS_EFFECT_MULTIPLIER, FALSE)
M.AdjustLoseBreath(-4)
..()
return ..() | update_flags
/datum/reagent/medicine/perfluorodecalin
name = "Perfluorodecalin"
@@ -406,14 +426,15 @@
addiction_chance = 20
/datum/reagent/medicine/perfluorodecalin/on_mob_life(mob/living/carbon/human/M)
M.adjustOxyLoss(-25*REAGENTS_EFFECT_MULTIPLIER)
var/update_flags = STATUS_UPDATE_NONE
update_flags |= M.adjustOxyLoss(-25*REAGENTS_EFFECT_MULTIPLIER, FALSE)
if(volume >= 4)
M.LoseBreath(6)
M.Silence(6)
if(prob(33))
M.adjustBruteLoss(-1*REAGENTS_EFFECT_MULTIPLIER)
M.adjustFireLoss(-1*REAGENTS_EFFECT_MULTIPLIER)
..()
update_flags |= M.adjustBruteLoss(-1*REAGENTS_EFFECT_MULTIPLIER, FALSE)
update_flags |= M.adjustFireLoss(-1*REAGENTS_EFFECT_MULTIPLIER, FALSE)
return ..() | update_flags
/datum/reagent/medicine/ephedrine
name = "Ephedrine"
@@ -426,22 +447,25 @@
addiction_chance = 25
/datum/reagent/medicine/ephedrine/on_mob_life(mob/living/M)
var/update_flags = STATUS_UPDATE_NONE
M.AdjustDrowsy(-5)
M.AdjustParalysis(-1)
M.AdjustStunned(-1)
M.AdjustWeakened(-1)
M.adjustStaminaLoss(-1*REAGENTS_EFFECT_MULTIPLIER)
update_flags |= M.AdjustParalysis(-1, FALSE)
update_flags |= M.AdjustStunned(-1, FALSE)
update_flags |= M.AdjustWeakened(-1, FALSE)
update_flags |= M.adjustStaminaLoss(-1*REAGENTS_EFFECT_MULTIPLIER, FALSE)
M.AdjustLoseBreath(-1, bound_lower = 5)
if(M.oxyloss > 75)
M.adjustOxyLoss(-1)
update_flags |= M.adjustOxyLoss(-1, FALSE)
if(M.health < 0 || M.health > 0 && prob(33))
M.adjustToxLoss(-1)
M.adjustBruteLoss(-1)
M.adjustFireLoss(-1)
..()
update_flags |= M.adjustToxLoss(-1, FALSE)
update_flags |= M.adjustBruteLoss(-1, FALSE)
update_flags |= M.adjustFireLoss(-1, FALSE)
return ..() | update_flags
/datum/reagent/medicine/ephedrine/overdose_process(mob/living/M, severity)
var/effect = ..()
var/list/overdose_info = ..()
var/effect = overdose_info[REAGENT_OVERDOSE_EFFECT]
var/update_flags = overdose_info[REAGENT_OVERDOSE_FLAGS]
if(severity == 1)
if(effect <= 1)
M.visible_message("<span class='warning'>[M] suddenly and violently vomits!</span>")
@@ -457,9 +481,10 @@
else if(effect <= 5)
M.visible_message("<span class='warning'>[M.name] staggers and drools, [M.p_their()] eyes bloodshot!</span>")
M.Dizzy(2)
M.Weaken(3)
update_flags |= M.Weaken(3, FALSE)
if(effect <= 15)
M.emote("collapse")
return list(effect, update_flags)
/datum/reagent/medicine/diphenhydramine
name = "Diphenhydramine"
@@ -476,10 +501,10 @@
if(prob(7))
M.emote("yawn")
if(prob(3))
M.Stun(2)
M.AdjustDrowsy(1)
M.visible_message("<span class='notice'>[M] looks a bit dazed.</span>")
..()
return ..()
/datum/reagent/medicine/morphine
name = "Morphine"
@@ -516,19 +541,20 @@
color = "#C8A5DC"
/datum/reagent/medicine/oculine/on_mob_life(mob/living/M)
var/update_flags = STATUS_UPDATE_NONE
if(prob(80))
if(ishuman(M))
var/mob/living/carbon/human/H = M
var/obj/item/organ/internal/eyes/E = H.get_int_organ(/obj/item/organ/internal/eyes)
if(istype(E))
E.heal_internal_damage(1)
M.AdjustEyeBlurry(-1)
M.AdjustEarDamage(-1)
update_flags |= M.AdjustEyeBlurry(-1, FALSE)
update_flags |= M.AdjustEarDamage(-1, FALSE)
if(prob(50))
M.CureNearsighted()
update_flags |= M.CureNearsighted(FALSE)
if(prob(30))
M.CureBlind()
M.SetEyeBlind(0)
update_flags |= M.CureBlind(FALSE)
update_flags |= M.SetEyeBlind(0, FALSE)
if(M.ear_damage <= 25)
if(prob(30))
M.SetEarDeaf(0)
@@ -544,21 +570,22 @@
overdose_threshold = 25
/datum/reagent/medicine/atropine/on_mob_life(mob/living/M)
var/update_flags = STATUS_UPDATE_NONE
M.AdjustDizzy(1)
M.Confused(5)
if(prob(4))
M.emote("collapse")
M.AdjustLoseBreath(-5, bound_lower = 5)
if(M.oxyloss > 65)
M.adjustOxyLoss(-10*REAGENTS_EFFECT_MULTIPLIER)
update_flags |= M.adjustOxyLoss(-10*REAGENTS_EFFECT_MULTIPLIER, FALSE)
if(M.health < -25)
M.adjustToxLoss(-1)
M.adjustBruteLoss(-3*REAGENTS_EFFECT_MULTIPLIER)
M.adjustFireLoss(-3*REAGENTS_EFFECT_MULTIPLIER)
update_flags |= M.adjustToxLoss(-1, FALSE)
update_flags |= M.adjustBruteLoss(-3*REAGENTS_EFFECT_MULTIPLIER, FALSE)
update_flags |= M.adjustFireLoss(-3*REAGENTS_EFFECT_MULTIPLIER, FALSE)
else if(M.health > -60)
M.adjustToxLoss(1)
update_flags |= M.adjustToxLoss(1, FALSE)
M.reagents.remove_reagent("sarin", 20)
..()
return ..() | update_flags
/datum/reagent/medicine/epinephrine
name = "Epinephrine"
@@ -570,29 +597,32 @@
overdose_threshold = 20
/datum/reagent/medicine/epinephrine/on_mob_life(mob/living/M)
var/update_flags = STATUS_UPDATE_NONE
M.AdjustDrowsy(-5)
if(prob(20))
M.AdjustParalysis(-1)
update_flags |= M.AdjustParalysis(-1, FALSE)
if(prob(20))
M.AdjustStunned(-1)
update_flags |= M.AdjustStunned(-1, FALSE)
if(prob(20))
M.AdjustWeakened(-1)
update_flags |= M.AdjustWeakened(-1, FALSE)
if(prob(5))
M.SetSleeping(0)
update_flags |= M.SetSleeping(0, FALSE)
if(prob(5))
M.adjustBrainLoss(-1)
update_flags |= M.adjustBrainLoss(-1, FALSE)
holder.remove_reagent("histamine", 15)
M.AdjustLoseBreath(-1, bound_lower = 3)
if(M.oxyloss > 35)
M.adjustOxyLoss(-10*REAGENTS_EFFECT_MULTIPLIER)
update_flags |= M.adjustOxyLoss(-10*REAGENTS_EFFECT_MULTIPLIER, FALSE)
if(M.health < -10 && M.health > -65)
M.adjustToxLoss(-1*REAGENTS_EFFECT_MULTIPLIER)
M.adjustBruteLoss(-1*REAGENTS_EFFECT_MULTIPLIER)
M.adjustFireLoss(-1*REAGENTS_EFFECT_MULTIPLIER)
..()
update_flags |= M.adjustToxLoss(-1*REAGENTS_EFFECT_MULTIPLIER, FALSE)
update_flags |= M.adjustBruteLoss(-1*REAGENTS_EFFECT_MULTIPLIER, FALSE)
update_flags |= M.adjustFireLoss(-1*REAGENTS_EFFECT_MULTIPLIER, FALSE)
return ..() | update_flags
/datum/reagent/medicine/epinephrine/overdose_process(mob/living/M, severity)
var/effect = ..()
var/list/overdose_info = ..()
var/effect = overdose_info[REAGENT_OVERDOSE_EFFECT]
var/update_flags = overdose_info[REAGENT_OVERDOSE_FLAGS]
if(severity == 1)
if(effect <= 1)
M.visible_message("<span class='warning'>[M] suddenly and violently vomits!</span>")
@@ -608,7 +638,7 @@
else if(effect <= 5)
M.visible_message("<span class='warning'>[M] staggers and drools, [M.p_their()] eyes bloodshot!</span>")
M.Dizzy(2)
M.Weaken(3)
update_flags |= M.Weaken(3, FALSE)
if(effect <= 15)
M.emote("collapse")
@@ -621,10 +651,11 @@
metabolization_rate = 0.2
/datum/reagent/medicine/strange_reagent/on_mob_life(mob/living/M)
var/update_flags = STATUS_UPDATE_NONE
if(prob(10))
M.adjustBruteLoss(2*REAGENTS_EFFECT_MULTIPLIER)
M.adjustToxLoss(2*REAGENTS_EFFECT_MULTIPLIER)
..()
update_flags |= M.adjustBruteLoss(2*REAGENTS_EFFECT_MULTIPLIER, FALSE)
update_flags |= M.adjustToxLoss(2*REAGENTS_EFFECT_MULTIPLIER, FALSE)
return ..() | update_flags
/datum/reagent/medicine/strange_reagent/reaction_mob(mob/living/M, method=TOUCH, volume)
if(volume < 1)
@@ -685,8 +716,9 @@
color = "#D1D1F1"
/datum/reagent/medicine/mannitol/on_mob_life(mob/living/M)
M.adjustBrainLoss(-3)
..()
var/update_flags = STATUS_UPDATE_NONE
update_flags |= M.adjustBrainLoss(-3, FALSE)
return ..() | update_flags
/datum/reagent/medicine/mutadone
name = "Mutadone"
@@ -722,12 +754,13 @@
color = "#009CA8"
/datum/reagent/medicine/antihol/on_mob_life(mob/living/M)
var/update_flags = STATUS_UPDATE_NONE
M.SetSlur(0)
M.AdjustDrunk(-4)
M.reagents.remove_all_type(/datum/reagent/consumable/ethanol, 8, 0, 1)
if(M.toxloss <= 25)
M.adjustToxLoss(-2.0)
..()
update_flags |= M.adjustToxLoss(-2.0, FALSE)
return ..() | update_flags
/datum/reagent/medicine/stimulants
name = "Stimulants"
@@ -737,26 +770,28 @@
can_synth = FALSE
/datum/reagent/medicine/stimulants/on_mob_life(mob/living/M)
var/update_flags = STATUS_UPDATE_NONE
if(volume > 5)
M.adjustOxyLoss(-5*REAGENTS_EFFECT_MULTIPLIER)
M.adjustToxLoss(-5*REAGENTS_EFFECT_MULTIPLIER)
M.adjustBruteLoss(-10*REAGENTS_EFFECT_MULTIPLIER)
M.adjustFireLoss(-10*REAGENTS_EFFECT_MULTIPLIER)
M.setStaminaLoss(0)
update_flags |= M.adjustOxyLoss(-5*REAGENTS_EFFECT_MULTIPLIER, FALSE)
update_flags |= M.adjustToxLoss(-5*REAGENTS_EFFECT_MULTIPLIER, FALSE)
update_flags |= M.adjustBruteLoss(-10*REAGENTS_EFFECT_MULTIPLIER, FALSE)
update_flags |= M.adjustFireLoss(-10*REAGENTS_EFFECT_MULTIPLIER, FALSE)
update_flags |= M.setStaminaLoss(0, FALSE)
M.SetSlowed(0)
M.AdjustDizzy(-10)
M.AdjustDrowsy(-10)
M.SetConfused(0)
M.SetSleeping(0)
update_flags |= M.SetSleeping(0, FALSE)
var/status = CANSTUN | CANWEAKEN | CANPARALYSE
M.status_flags &= ~status
else
M.status_flags |= CANSTUN | CANWEAKEN | CANPARALYSE
M.adjustToxLoss(2)
M.adjustBruteLoss(1)
update_flags |= M.adjustToxLoss(2, FALSE)
update_flags |= M.adjustBruteLoss(1, FALSE)
if(prob(10))
M.Stun(3)
..()
update_flags |= M.Stun(3, FALSE)
return ..() | update_flags
/datum/reagent/medicine/stimulants/on_mob_delete(mob/living/M)
M.status_flags |= CANSTUN | CANWEAKEN | CANPARALYSE
@@ -772,27 +807,30 @@
can_synth = FALSE
/datum/reagent/medicine/stimulative_agent/on_mob_life(mob/living/M)
var/update_flags = STATUS_UPDATE_NONE
M.status_flags |= GOTTAGOFAST
if(M.health < 50 && M.health > 0)
M.adjustOxyLoss(-1*REAGENTS_EFFECT_MULTIPLIER)
M.adjustToxLoss(-1*REAGENTS_EFFECT_MULTIPLIER)
M.adjustBruteLoss(-1*REAGENTS_EFFECT_MULTIPLIER)
M.adjustFireLoss(-1*REAGENTS_EFFECT_MULTIPLIER)
M.AdjustParalysis(-3)
M.AdjustStunned(-3)
M.AdjustWeakened(-3)
M.adjustStaminaLoss(-5*REAGENTS_EFFECT_MULTIPLIER)
..()
update_flags |= M.adjustOxyLoss(-1*REAGENTS_EFFECT_MULTIPLIER, FALSE)
update_flags |= M.adjustToxLoss(-1*REAGENTS_EFFECT_MULTIPLIER, FALSE)
update_flags |= M.adjustBruteLoss(-1*REAGENTS_EFFECT_MULTIPLIER, FALSE)
update_flags |= M.adjustFireLoss(-1*REAGENTS_EFFECT_MULTIPLIER, FALSE)
update_flags |= M.AdjustParalysis(-3, FALSE)
update_flags |= M.AdjustStunned(-3, FALSE)
update_flags |= M.AdjustWeakened(-3, FALSE)
update_flags |= M.adjustStaminaLoss(-5*REAGENTS_EFFECT_MULTIPLIER, FALSE)
return ..() | update_flags
/datum/reagent/medicine/stimulative_agent/on_mob_delete(mob/living/M)
M.status_flags &= ~GOTTAGOFAST
..()
/datum/reagent/medicine/stimulative_agent/overdose_process(mob/living/M, severity)
var/update_flags = STATUS_UPDATE_NONE
if(prob(33))
M.adjustStaminaLoss(2.5*REAGENTS_EFFECT_MULTIPLIER)
M.adjustToxLoss(1*REAGENTS_EFFECT_MULTIPLIER)
update_flags |= M.adjustStaminaLoss(2.5*REAGENTS_EFFECT_MULTIPLIER, FALSE)
update_flags |= M.adjustToxLoss(1*REAGENTS_EFFECT_MULTIPLIER, FALSE)
M.AdjustLoseBreath(1)
return list(0, update_flags)
/datum/reagent/medicine/insulin
name = "Insulin"
@@ -835,6 +873,7 @@
color = "#FFDCFF"
/datum/reagent/medicine/haloperidol/on_mob_life(mob/living/M)
var/update_flags = STATUS_UPDATE_NONE
M.reagents.remove_reagent("crank", 5)
M.reagents.remove_reagent("methamphetamine", 5)
M.reagents.remove_reagent("space_drugs", 5)
@@ -845,7 +884,7 @@
M.reagents.remove_reagent("bath_salts", 5)
M.reagents.remove_reagent("lsd", 5)
M.reagents.remove_reagent("thc", 5)
M.AdjustDruggy(-5)
update_flags |= M.AdjustDruggy(-5, FALSE)
M.AdjustHallucinate(-5)
M.AdjustJitter(-5)
if(prob(50))
@@ -853,8 +892,8 @@
if(prob(10))
M.emote("drool")
if(prob(20))
M.adjustBrainLoss(1)
..()
update_flags |= M.adjustBrainLoss(1, FALSE)
return ..() | update_flags
/datum/reagent/medicine/ether
name = "Ether"
@@ -886,13 +925,14 @@
can_synth = FALSE
/datum/reagent/medicine/syndicate_nanites/on_mob_life(mob/living/M)
M.adjustBruteLoss(-5*REAGENTS_EFFECT_MULTIPLIER) //A ton of healing - this is a 50 telecrystal investment.
M.adjustFireLoss(-5*REAGENTS_EFFECT_MULTIPLIER)
M.adjustOxyLoss(-15*REAGENTS_EFFECT_MULTIPLIER)
M.adjustToxLoss(-5*REAGENTS_EFFECT_MULTIPLIER)
M.adjustBrainLoss(-15*REAGENTS_EFFECT_MULTIPLIER)
M.adjustCloneLoss(-3*REAGENTS_EFFECT_MULTIPLIER)
..()
var/update_flags = STATUS_UPDATE_NONE
update_flags |= M.adjustBruteLoss(-5*REAGENTS_EFFECT_MULTIPLIER, FALSE) //A ton of healing - this is a 50 telecrystal investment.
update_flags |= M.adjustFireLoss(-5*REAGENTS_EFFECT_MULTIPLIER, FALSE)
update_flags |= M.adjustOxyLoss(-15*REAGENTS_EFFECT_MULTIPLIER, FALSE)
update_flags |= M.adjustToxLoss(-5*REAGENTS_EFFECT_MULTIPLIER, FALSE)
update_flags |= M.adjustBrainLoss(-15*REAGENTS_EFFECT_MULTIPLIER, FALSE)
update_flags |= M.adjustCloneLoss(-3*REAGENTS_EFFECT_MULTIPLIER, FALSE)
return ..() | update_flags
/datum/reagent/medicine/omnizine_diluted
name = "Diluted Omnizine"
@@ -904,17 +944,20 @@
metabolization_rate = 0.1
/datum/reagent/medicine/omnizine_diluted/on_mob_life(mob/living/M)
M.adjustToxLoss(-0.5*REAGENTS_EFFECT_MULTIPLIER)
M.adjustOxyLoss(-0.5*REAGENTS_EFFECT_MULTIPLIER)
M.adjustBruteLoss(-0.5*REAGENTS_EFFECT_MULTIPLIER)
M.adjustFireLoss(-0.5*REAGENTS_EFFECT_MULTIPLIER)
..()
var/update_flags = STATUS_UPDATE_NONE
update_flags |= M.adjustToxLoss(-0.5*REAGENTS_EFFECT_MULTIPLIER, FALSE)
update_flags |= M.adjustOxyLoss(-0.5*REAGENTS_EFFECT_MULTIPLIER, FALSE)
update_flags |= M.adjustBruteLoss(-0.5*REAGENTS_EFFECT_MULTIPLIER, FALSE)
update_flags |= M.adjustFireLoss(-0.5*REAGENTS_EFFECT_MULTIPLIER, FALSE)
return ..() | update_flags
/datum/reagent/medicine/omnizine_diluted/overdose_process(mob/living/M, severity)
M.adjustToxLoss(1.5*REAGENTS_EFFECT_MULTIPLIER)
M.adjustOxyLoss(1.5*REAGENTS_EFFECT_MULTIPLIER)
M.adjustBruteLoss(1.5*REAGENTS_EFFECT_MULTIPLIER)
M.adjustFireLoss(1.5*REAGENTS_EFFECT_MULTIPLIER)
var/update_flags = STATUS_UPDATE_NONE
update_flags |= M.adjustToxLoss(1.5*REAGENTS_EFFECT_MULTIPLIER, FALSE)
update_flags |= M.adjustOxyLoss(1.5*REAGENTS_EFFECT_MULTIPLIER, FALSE)
update_flags |= M.adjustBruteLoss(1.5*REAGENTS_EFFECT_MULTIPLIER, FALSE)
update_flags |= M.adjustFireLoss(1.5*REAGENTS_EFFECT_MULTIPLIER, FALSE)
return list(0, update_flags)
//virus-specific symptom reagents
@@ -925,6 +968,7 @@
color = "#EC536D" // rgb: 236, 83, 109
/datum/reagent/medicine/synaphydramine/on_mob_life(mob/living/M)
var/update_flags = STATUS_UPDATE_NONE
M.AdjustDrowsy(-5)
if(holder.has_reagent("lsd"))
holder.remove_reagent("lsd", 5)
@@ -932,8 +976,8 @@
holder.remove_reagent("histamine", 5)
M.AdjustHallucinate(-10)
if(prob(30))
M.adjustToxLoss(1)
..()
update_flags |= M.adjustToxLoss(1, FALSE)
return ..() | update_flags
//////////////////////////////
// Synth-Meds //
@@ -949,10 +993,11 @@
process_flags = SYNTHETIC
/datum/reagent/medicine/degreaser/on_mob_life(mob/living/M)
var/update_flags = STATUS_UPDATE_NONE
if(prob(50)) //Same effects as coffee, to help purge ill effects like paralysis
M.AdjustParalysis(-1)
M.AdjustStunned(-1)
M.AdjustWeakened(-1)
update_flags |= M.AdjustParalysis(-1, FALSE)
update_flags |= M.AdjustStunned(-1, FALSE)
update_flags |= M.AdjustWeakened(-1, FALSE)
M.AdjustConfused(-5)
for(var/datum/reagent/R in M.reagents.reagent_list)
if(R != src)
@@ -961,7 +1006,7 @@
M.reagents.remove_reagent(R.id, 5)
else
M.reagents.remove_reagent(R.id,1)
..()
return ..() | update_flags
/datum/reagent/medicine/degreaser/reaction_turf(turf/simulated/T, volume)
if(volume >= 1 && istype(T))
@@ -978,8 +1023,9 @@
process_flags = SYNTHETIC
/datum/reagent/medicine/liquid_solder/on_mob_life(mob/living/M)
M.adjustBrainLoss(-3)
..()
var/update_flags = STATUS_UPDATE_NONE
update_flags |= M.adjustBrainLoss(-3, FALSE)
return ..() | update_flags
@@ -993,11 +1039,14 @@
overdose_threshold = 30
/datum/reagent/medicine/bicaridine/on_mob_life(mob/living/M)
M.adjustBruteLoss(-2*REAGENTS_EFFECT_MULTIPLIER)
..()
var/update_flags = STATUS_UPDATE_NONE
update_flags |= M.adjustBruteLoss(-2*REAGENTS_EFFECT_MULTIPLIER, FALSE)
return ..() | update_flags
/datum/reagent/medicine/bicaridine/overdose_process(mob/living/M)
M.adjustBruteLoss(4*REAGENTS_EFFECT_MULTIPLIER)
var/update_flags = STATUS_UPDATE_NONE
update_flags |= M.adjustBruteLoss(4*REAGENTS_EFFECT_MULTIPLIER, FALSE)
return list(0, update_flags)
/datum/reagent/medicine/kelotane
name = "Kelotane"
@@ -1008,11 +1057,14 @@
overdose_threshold = 30
/datum/reagent/medicine/kelotane/on_mob_life(mob/living/M)
M.adjustFireLoss(-2*REAGENTS_EFFECT_MULTIPLIER)
..()
var/update_flags = STATUS_UPDATE_NONE
update_flags |= M.adjustFireLoss(-2*REAGENTS_EFFECT_MULTIPLIER, FALSE)
return ..() | update_flags
/datum/reagent/medicine/kelotane/overdose_process(mob/living/M)
M.adjustFireLoss(4*REAGENTS_EFFECT_MULTIPLIER)
var/update_flags = STATUS_UPDATE_NONE
update_flags |= M.adjustFireLoss(4*REAGENTS_EFFECT_MULTIPLIER, FALSE)
return ..() | update_flags
/datum/reagent/medicine/earthsblood //Created by ambrosia gaia plants
@@ -1023,20 +1075,23 @@
overdose_threshold = 25
/datum/reagent/medicine/earthsblood/on_mob_life(mob/living/M)
M.adjustBruteLoss(-3 * REAGENTS_EFFECT_MULTIPLIER)
M.adjustFireLoss(-3 * REAGENTS_EFFECT_MULTIPLIER)
M.adjustOxyLoss(-15 * REAGENTS_EFFECT_MULTIPLIER)
M.adjustToxLoss(-3 * REAGENTS_EFFECT_MULTIPLIER)
M.adjustBrainLoss(2 * REAGENTS_EFFECT_MULTIPLIER) //This does, after all, come from ambrosia, and the most powerful ambrosia in existence, at that!
M.adjustCloneLoss(-1 * REAGENTS_EFFECT_MULTIPLIER)
M.adjustStaminaLoss(-30 * REAGENTS_EFFECT_MULTIPLIER)
var/update_flags = STATUS_UPDATE_NONE
update_flags |= M.adjustBruteLoss(-3 * REAGENTS_EFFECT_MULTIPLIER, FALSE)
update_flags |= M.adjustFireLoss(-3 * REAGENTS_EFFECT_MULTIPLIER, FALSE)
update_flags |= M.adjustOxyLoss(-15 * REAGENTS_EFFECT_MULTIPLIER, FALSE)
update_flags |= M.adjustToxLoss(-3 * REAGENTS_EFFECT_MULTIPLIER, FALSE)
update_flags |= M.adjustBrainLoss(2 * REAGENTS_EFFECT_MULTIPLIER, FALSE) //This does, after all, come from ambrosia, and the most powerful ambrosia in existence, at that!
update_flags |= M.adjustCloneLoss(-1 * REAGENTS_EFFECT_MULTIPLIER, FALSE)
update_flags |= M.adjustStaminaLoss(-30 * REAGENTS_EFFECT_MULTIPLIER, FALSE)
M.SetJitter(min(max(0, M.jitteriness + 3), 30))
M.SetDruggy(min(max(0, M.druggy + 10), 15)) //See above
..()
update_flags |= M.SetDruggy(min(max(0, M.druggy + 10), 15), FALSE) //See above
return ..() | update_flags
/datum/reagent/medicine/earthsblood/overdose_process(mob/living/M)
var/update_flags = STATUS_UPDATE_NONE
M.SetHallucinate(min(max(0, M.hallucination + 10), 50))
M.adjustToxLoss(5 * REAGENTS_EFFECT_MULTIPLIER)
update_flags |= M.adjustToxLoss(5 * REAGENTS_EFFECT_MULTIPLIER, FALSE)
return list(0, update_flags)
/datum/reagent/medicine/corazone
name = "Corazone"
@@ -1055,6 +1110,7 @@
can_synth = FALSE
/datum/reagent/medicine/nanocalcium/on_mob_life(mob/living/carbon/human/M)
var/update_flags = STATUS_UPDATE_NONE
switch(current_cycle)
if(1 to 19)
M.AdjustJitter(4)
@@ -1063,15 +1119,15 @@
if(20 to 43)
//If they have stimulants or stimulant drugs then just apply toxin damage instead.
if(M.reagents.has_reagent("methamphetamine") || M.reagents.has_reagent("crank") || M.reagents.has_reagent("bath_salts") || M.reagents.has_reagent("stimulative_agent") || M.reagents.has_reagent("stimulants"))
M.adjustToxLoss(10)
update_flags |= M.adjustToxLoss(10, FALSE)
else //apply debilitating effects
if(prob(75))
M.AdjustConfused(5)
else
M.AdjustWeakened(5)
update_flags |= M.AdjustWeakened(5, FALSE)
if(44)
to_chat(M, "<span class='warning'>Your body goes rigid, you cannot move at all!</span>")
M.AdjustWeakened(15)
update_flags |= M.AdjustWeakened(15, FALSE)
if(45 to INFINITY) // Start fixing bones | If they have stimulants or stimulant drugs in their system then the nanites won't work.
if(M.reagents.has_reagent("methamphetamine") || M.reagents.has_reagent("crank") || M.reagents.has_reagent("bath_salts") || M.reagents.has_reagent("stimulative_agent") || M.reagents.has_reagent("stimulants"))
return ..()
@@ -1082,4 +1138,4 @@
to_chat(M, "<span class='notice'>You feel a burning sensation in your [E.name] as it straightens involuntarily!</span>")
E.rejuvenate() //Repair it completely.
break
..()
return ..() | update_flags
@@ -250,8 +250,9 @@
taste_message = null
/datum/reagent/acetone/on_mob_life(mob/living/M)
M.adjustToxLoss(1.5)
..()
var/update_flags = STATUS_UPDATE_NONE
update_flags |= M.adjustToxLoss(1.5, FALSE)
return ..() | update_flags
/datum/reagent/saltpetre
name = "Saltpetre"
@@ -362,20 +363,21 @@
taste_message = "mexican cuisine"
/datum/reagent/fartonium/on_mob_life(mob/living/M)
var/update_flags = STATUS_UPDATE_NONE
if(prob(66))
M.emote("fart")
if(holder.has_reagent("simethicone"))
if(prob(25))
to_chat(M, "<span class='danger'>[pick("Oh god, something doesn't feel right!", "IT HURTS!", "FUCK!", "Something is seriously wrong!", "THE PAIN!", "You feel like you're gonna die!")]</span>")
M.adjustBruteLoss(1)
update_flags |= M.adjustBruteLoss(1, FALSE)
if(prob(10))
M.custom_emote(1,"strains, but nothing happens.")
M.adjustBruteLoss(2)
update_flags |= M.adjustBruteLoss(2, FALSE)
if(prob(5))
M.emote("scream")
M.adjustBruteLoss(4)
..()
update_flags |= M.adjustBruteLoss(4, FALSE)
return ..() | update_flags
/datum/reagent/hugs
name = "Pure hugs"
@@ -412,7 +414,7 @@
M.visible_message("<span class='notice'>[M] gives [C] a [pick("hug","warm embrace")].</span>")
playsound(get_turf(M), 'sound/weapons/thudswoosh.ogg', 50, 1, -1)
break
..()
return ..()
/datum/reagent/love/on_mob_delete(mob/living/M)
M.can_change_intents = 1
@@ -432,7 +434,7 @@
/datum/reagent/royal_bee_jelly/on_mob_life(mob/living/M)
if(prob(2))
M.say(pick("Bzzz...","BZZ BZZ","Bzzzzzzzzzzz..."))
..()
return ..()
/datum/reagent/growthserum
name = "Growth serum"
@@ -459,7 +461,7 @@
H.resize = newsize/current_size
current_size = newsize
H.update_transform()
..()
return ..()
/datum/reagent/growthserum/on_mob_delete(mob/living/M)
M.resize = 1/current_size
@@ -493,9 +495,10 @@
taste_message = "puke"
/datum/reagent/plantnutriment/on_mob_life(mob/living/M)
var/update_flags = STATUS_UPDATE_NONE
if(prob(tox_prob))
M.adjustToxLoss(1*REAGENTS_EFFECT_MULTIPLIER)
..()
update_flags |= M.adjustToxLoss(1*REAGENTS_EFFECT_MULTIPLIER, FALSE)
return ..() | update_flags
/datum/reagent/plantnutriment/eznutriment
name = "E-Z-Nutrient"
@@ -43,23 +43,24 @@
taste_message = "a permaban"
/datum/reagent/consumable/drink/berry_banned/on_mob_life(mob/living/M)
var/update_flags = STATUS_UPDATE_NONE
if(prob(10))
var/heal_type = rand(0, 5) //still prefer the string version
switch(heal_type)
if(0)
M.adjustBruteLoss(-0.5*REAGENTS_EFFECT_MULTIPLIER)
update_flags |= M.adjustBruteLoss(-0.5*REAGENTS_EFFECT_MULTIPLIER, FALSE)
if(1)
M.adjustFireLoss(-0.5*REAGENTS_EFFECT_MULTIPLIER)
update_flags |= M.adjustFireLoss(-0.5*REAGENTS_EFFECT_MULTIPLIER, FALSE)
if(2)
M.adjustToxLoss(-0.5*REAGENTS_EFFECT_MULTIPLIER)
update_flags |= M.adjustToxLoss(-0.5*REAGENTS_EFFECT_MULTIPLIER, FALSE)
if(3)
M.adjustOxyLoss(-0.5*REAGENTS_EFFECT_MULTIPLIER)
update_flags |= M.adjustOxyLoss(-0.5*REAGENTS_EFFECT_MULTIPLIER, FALSE)
if(4)
M.adjustCloneLoss(-0.5*REAGENTS_EFFECT_MULTIPLIER)
update_flags |= M.adjustCloneLoss(-0.5*REAGENTS_EFFECT_MULTIPLIER, FALSE)
if(5)
M.adjustBrainLoss(-1*REAGENTS_EFFECT_MULTIPLIER)
update_flags |= M.adjustBrainLoss(-1*REAGENTS_EFFECT_MULTIPLIER, FALSE)
to_chat(M, "<span class='notice'>You feel slightly rejuvinated!</span>")
..()
return ..() | update_flags
//Berry Banned 2: This one is tasty and toxic. Deals toxin damage and MAYBE plays the "BWOINK!" sound if it kills someone?
/datum/reagent/consumable/drink/berry_banned2
@@ -71,11 +72,12 @@
taste_message = "a permaban"
/datum/reagent/consumable/drink/berry_banned2/on_mob_life(mob/living/M)
var/update_flags = STATUS_UPDATE_NONE
if(prob(50))
M.adjustToxLoss(2*REAGENTS_EFFECT_MULTIPLIER) //double strength of poison berry juice alone, because it's concentrated (this is equal to the damage of normal toxin, less often)
update_flags |= M.adjustToxLoss(2*REAGENTS_EFFECT_MULTIPLIER, FALSE) //double strength of poison berry juice alone, because it's concentrated (this is equal to the damage of normal toxin, less often)
if(prob(10))
to_chat(M, "<span class='notice'>You feel slightly rejuvinated!</span>") //meta this!
..()
return ..() | update_flags
/datum/reagent/consumable/drink/berry_banned2/on_mob_death(mob/living/M)
M << sound('sound/effects/adminhelp.ogg',0,1,0,25)
@@ -103,7 +105,7 @@
"THIS DOOR WAS SHOCKED WHEN I GOT HERE",
"ANIMALS ARE NOT CREW")
M.say(pick(tider_talk))
..()
return ..()
//Grape Granade: causes the drinker to sometimes burp, has a low chance to cause a goonchem vortex that pushes things within a very small radius (1-2 tiles) away from the drinker
/datum/reagent/consumable/drink/grape_granade
@@ -122,7 +124,7 @@
to_chat(M, "<span class='notice'>You feel ready to burst! Oh wait, just a burp...</span>")
else if(prob(25))
M.emote("burp")
..()
return ..()
//Meteor Malt: Sometimes causes screen shakes for the drinker like a meteor impact, low chance to add 1-5 units of a random mineral reagent to the drinker's blood (iron, copper, silver, gold, uranium, carbon, etc)
/datum/reagent/consumable/drink/meteor_malt
@@ -141,4 +143,4 @@
var/amount = rand(1, 5)
var/mineral = pick("copper", "iron", "gold", "carbon", "silver", "aluminum", "silicon", "sodiumchloride", "plasma")
M.reagents.add_reagent(mineral, amount)
..()
return ..()
@@ -24,13 +24,14 @@
taste_message = "corporate assets going to waste"
/datum/reagent/plasma/on_mob_life(mob/living/M)
M.adjustToxLoss(1*REAGENTS_EFFECT_MULTIPLIER)
var/update_flags = STATUS_UPDATE_NONE
update_flags |= M.adjustToxLoss(1*REAGENTS_EFFECT_MULTIPLIER, FALSE)
if(holder.has_reagent("epinephrine"))
holder.remove_reagent("epinephrine", 2)
if(iscarbon(M))
var/mob/living/carbon/C = M
C.adjustPlasma(10)
..()
return ..() | update_flags
/datum/reagent/plasma/reaction_mob(mob/living/M, method=TOUCH, volume)//Splashing people with plasma is stronger than fuel!
if(method == TOUCH)
@@ -80,10 +81,11 @@
taste_message = null
/datum/reagent/clf3/on_mob_life(mob/living/M)
var/update_flags = STATUS_UPDATE_NONE
M.adjust_fire_stacks(2)
var/burndmg = max(0.3*M.fire_stacks, 0.3)
M.adjustFireLoss(burndmg)
..()
update_flags |= M.adjustFireLoss(burndmg, FALSE)
return ..() | update_flags
/datum/reagent/clf3/reaction_turf(turf/simulated/T, volume)
if(prob(1) && istype(T, /turf/simulated/floor/plating))
@@ -167,10 +169,11 @@
process_flags = ORGANIC | SYNTHETIC
/datum/reagent/phlogiston/on_mob_life(mob/living/M)
var/update_flags = STATUS_UPDATE_NONE
M.adjust_fire_stacks(1)
var/burndmg = max(0.3*M.fire_stacks, 0.3)
M.adjustFireLoss(burndmg)
..()
update_flags |= M.adjustFireLoss(burndmg, FALSE)
return ..() | update_flags
/datum/reagent/phlogiston/reaction_mob(mob/living/M, method=TOUCH, volume)
M.adjust_fire_stacks(1)
@@ -187,7 +190,7 @@
/datum/reagent/napalm/on_mob_life(mob/living/M)
M.adjust_fire_stacks(1)
..()
return ..()
/datum/reagent/napalm/reaction_mob(mob/living/M, method=TOUCH, volume)
if(method == TOUCH)
@@ -204,7 +207,7 @@
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"))
@@ -229,7 +232,7 @@
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"))
@@ -276,11 +279,12 @@
taste_message = "corporate assets going to waste"
/datum/reagent/plasma_dust/on_mob_life(mob/living/M)
M.adjustToxLoss(3)
var/update_flags = STATUS_UPDATE_NONE
update_flags |= M.adjustToxLoss(3, FALSE)
if(iscarbon(M))
var/mob/living/carbon/C = M
C.adjustPlasma(20)
..()
return ..() | update_flags
/datum/reagent/plasma_dust/reaction_mob(mob/living/M, method=TOUCH, volume)//Splashing people with plasma dust is stronger than fuel!
if(method == TOUCH)
+179 -140
View File
@@ -6,8 +6,9 @@
color = "#CF3600" // rgb: 207, 54, 0
/datum/reagent/toxin/on_mob_life(mob/living/M)
M.adjustToxLoss(2)
..()
var/update_flags = STATUS_UPDATE_NONE
update_flags |= M.adjustToxLoss(2, FALSE)
return ..() | update_flags
/datum/reagent/spider_venom
name = "Spider venom"
@@ -17,8 +18,9 @@
color = "#CF3600" // rgb: 207, 54, 0
/datum/reagent/spider_venom/on_mob_life(mob/living/M)
M.adjustToxLoss(1.5)
..()
var/update_flags = STATUS_UPDATE_NONE
update_flags |= M.adjustToxLoss(1.5, FALSE)
return ..() | update_flags
/datum/reagent/minttoxin
name = "Mint Toxin"
@@ -31,7 +33,7 @@
/datum/reagent/minttoxin/on_mob_life(mob/living/M)
if(FAT in M.mutations)
M.gib()
..()
return ..()
/datum/reagent/slimejelly
name = "Slime Jelly"
@@ -42,12 +44,13 @@
taste_message = "slimes"
/datum/reagent/slimejelly/on_mob_life(mob/living/M)
var/update_flags = STATUS_UPDATE_NONE
if(prob(10))
to_chat(M, "<span class='danger'>Your insides are burning!</span>")
M.adjustToxLoss(rand(20,60)*REAGENTS_EFFECT_MULTIPLIER)
update_flags |= M.adjustToxLoss(rand(20,60)*REAGENTS_EFFECT_MULTIPLIER, FALSE)
else if(prob(40))
M.adjustBruteLoss(-5*REAGENTS_EFFECT_MULTIPLIER)
..()
update_flags |= M.adjustBruteLoss(-5*REAGENTS_EFFECT_MULTIPLIER, FALSE)
return ..() | update_flags
/datum/reagent/slimetoxin
name = "Mutation Toxin"
@@ -67,7 +70,7 @@
to_chat(M, "<span class='danger'>Your body reacts violently to light.</span> <span class='notice'>However, it naturally heals in darkness.</span>")
to_chat(M, "<span class='danger'>Aside from your new traits, you are mentally unchanged and retain your prior obligations.</span>")
human.set_species(/datum/species/shadow)
..()
return ..()
/datum/reagent/aslimetoxin
name = "Advanced Mutation Toxin"
@@ -93,9 +96,10 @@
taste_message = "metal"
/datum/reagent/mercury/on_mob_life(mob/living/M)
var/update_flags = STATUS_UPDATE_NONE
if(prob(70))
M.adjustBrainLoss(1)
..()
return ..() | update_flags
/datum/reagent/chlorine
name = "Chlorine"
@@ -108,8 +112,9 @@
taste_message = "fire"
/datum/reagent/chlorine/on_mob_life(mob/living/M)
M.adjustFireLoss(1)
..()
var/update_flags = STATUS_UPDATE_NONE
update_flags |= M.adjustFireLoss(1, FALSE)
return ..() | update_flags
/datum/reagent/fluorine
name = "Fluorine"
@@ -122,9 +127,10 @@
taste_message = "spicy freshness"
/datum/reagent/fluorine/on_mob_life(mob/living/M)
M.adjustFireLoss(1)
M.adjustToxLoss(1*REAGENTS_EFFECT_MULTIPLIER)
..()
var/update_flags = STATUS_UPDATE_NONE
update_flags |= M.adjustFireLoss(1, FALSE)
update_flags |= M.adjustToxLoss(1*REAGENTS_EFFECT_MULTIPLIER, FALSE)
return ..() | update_flags
/datum/reagent/radium
name = "Radium"
@@ -137,7 +143,7 @@
/datum/reagent/radium/on_mob_life(mob/living/M)
if(M.radiation < 80)
M.apply_effect(4, IRRADIATE, negate_armor = 1)
..()
return ..()
/datum/reagent/radium/reaction_turf(turf/T, volume)
if(volume >= 3 && !isspaceturf(T))
@@ -167,7 +173,7 @@
M.apply_effect(2*REAGENTS_EFFECT_MULTIPLIER, IRRADIATE, negate_armor = 1)
if(prob(4))
randmutb(M)
..()
return ..()
/datum/reagent/uranium
@@ -180,7 +186,7 @@
/datum/reagent/uranium/on_mob_life(mob/living/M)
M.apply_effect(2, IRRADIATE, negate_armor = 1)
..()
return ..()
/datum/reagent/uranium/reaction_turf(turf/T, volume)
if(volume >= 3 && !isspaceturf(T))
@@ -196,8 +202,9 @@
metabolization_rate = 0.2
/datum/reagent/lexorin/on_mob_life(mob/living/M)
M.adjustToxLoss(1)
..()
var/update_flags = STATUS_UPDATE_NONE
update_flags |= M.adjustToxLoss(1, FALSE)
return ..() | update_flags
/datum/reagent/sacid
@@ -210,8 +217,9 @@
taste_message = "<span class='userdanger'>ACID</span>"
/datum/reagent/sacid/on_mob_life(mob/living/M)
M.adjustFireLoss(1)
..()
var/update_flags = STATUS_UPDATE_NONE
update_flags |= M.adjustFireLoss(1, FALSE)
return ..() | update_flags
/datum/reagent/sacid/reaction_mob(mob/living/M, method=TOUCH, volume)
if(method == TOUCH)
@@ -282,8 +290,9 @@
color = "#003333" // rgb: 0, 51, 51
/datum/reagent/carpotoxin/on_mob_life(mob/living/M)
M.adjustToxLoss(2*REAGENTS_EFFECT_MULTIPLIER)
..()
var/update_flags = STATUS_UPDATE_NONE
update_flags |= M.adjustToxLoss(2*REAGENTS_EFFECT_MULTIPLIER, FALSE)
return ..() | update_flags
/datum/reagent/staminatoxin
name = "Tirizene"
@@ -294,9 +303,10 @@
data = 13
/datum/reagent/staminatoxin/on_mob_life(mob/living/M)
M.adjustStaminaLoss(REAGENTS_EFFECT_MULTIPLIER * data)
var/update_flags = STATUS_UPDATE_NONE
update_flags |= M.adjustStaminaLoss(REAGENTS_EFFECT_MULTIPLIER * data, FALSE)
data = max(data - 1, 3)
..()
return ..() | update_flags
/datum/reagent/spore
@@ -306,10 +316,11 @@
color = "#9ACD32"
/datum/reagent/spores/on_mob_life(mob/living/M)
M.adjustToxLoss(1)
var/update_flags = STATUS_UPDATE_NONE
update_flags |= M.adjustToxLoss(1, FALSE)
M.damageoverlaytemp = 60
M.EyeBlurry(3)
..()
update_flags |= M.EyeBlurry(3)
return ..() | update_flags
/datum/reagent/beer2 //disguised as normal beer for use by emagged service borgs
name = "Beer"
@@ -323,13 +334,14 @@
taste_message = "beer"
/datum/reagent/beer2/on_mob_life(mob/living/M)
var/update_flags = STATUS_UPDATE_NONE
switch(current_cycle)
if(1 to 50)
M.Sleeping(2)
update_flags |= M.Sleeping(2, FALSE)
if(51 to INFINITY)
M.Sleeping(2)
M.adjustToxLoss((current_cycle - 50)*REAGENTS_EFFECT_MULTIPLIER)
..()
update_flags |= M.Sleeping(2, FALSE)
update_flags |= M.adjustToxLoss((current_cycle - 50)*REAGENTS_EFFECT_MULTIPLIER, FALSE)
return ..() | update_flags
/datum/reagent/polonium
name = "Polonium"
@@ -344,7 +356,7 @@
/datum/reagent/polonium/on_mob_life(mob/living/M)
M.apply_effect(8, IRRADIATE, negate_armor = 1)
..()
return ..()
/datum/reagent/histamine
name = "Histamine"
@@ -365,60 +377,64 @@
M.emote("drool")
/datum/reagent/histamine/on_mob_life(mob/living/M)
var/update_flags = STATUS_UPDATE_NONE
if(prob(20))
M.emote(pick("twitch", "grumble", "sneeze", "cough"))
if(prob(10))
to_chat(M, "<span class='notice'>Your eyes itch.</span>")
M.emote(pick("blink", "sneeze"))
M.AdjustEyeBlurry(3)
update_flags |= M.AdjustEyeBlurry(3, FALSE)
if(prob(10))
M.visible_message("<span class='danger'>[M] scratches at an itch.</span>")
M.adjustBruteLoss(1)
update_flags |= M.adjustBruteLoss(1, FALSE)
M.emote("grumble")
if(prob(5))
to_chat(M, "<span class='danger'>You're getting a rash!</span>")
M.adjustBruteLoss(2)
..()
update_flags |= M.adjustBruteLoss(2, FALSE)
return ..() | update_flags
/datum/reagent/histamine/overdose_process(mob/living/M, severity)
var/effect = ..()
var/list/overdose_info = ..()
var/effect = overdose_info[REAGENT_OVERDOSE_EFFECT]
var/update_flags = overdose_info[REAGENT_OVERDOSE_FLAGS]
if(severity == 1)
if(effect <= 2)
to_chat(M, "<span class='warning'>You feel mucus running down the back of your throat.</span>")
M.adjustToxLoss(1)
update_flags |= M.adjustToxLoss(1, FALSE)
M.Jitter(4)
M.emote(pick("sneeze", "cough"))
else if(effect <= 4)
M.stuttering += rand(0,5)
M.AdjustStuttering(rand(0,5))
if(prob(25))
M.emote(pick("choke","gasp"))
M.adjustOxyLoss(5)
update_flags |= M.adjustOxyLoss(5, FALSE)
else if(effect <= 7)
to_chat(M, "<span class='warning'>Your chest hurts!</span>")
M.emote(pick("cough","gasp"))
M.adjustOxyLoss(3)
update_flags |= M.adjustOxyLoss(3, FALSE)
else if(severity == 2)
if(effect <= 2)
M.visible_message("<span class='warning'>[M] breaks out in hives!</span>")
M.adjustBruteLoss(6)
update_flags |= M.adjustBruteLoss(6, FALSE)
else if(effect <= 4)
M.visible_message("<span class='warning'>[M] has a horrible coughing fit!</span>")
M.Jitter(10)
M.stuttering += rand(0,5)
M.AdjustStuttering(rand(0,5))
M.emote("cough")
if(prob(40))
M.emote(pick("choke","gasp"))
M.adjustOxyLoss(6)
M.Weaken(8)
update_flags |= M.adjustOxyLoss(6, FALSE)
update_flags |= M.Weaken(8, FALSE)
else if(effect <= 7)
to_chat(M, "<span class='warning'>Your heartbeat is pounding inside your head!</span>")
M << 'sound/effects/singlebeat.ogg'
M.emote("collapse")
M.adjustOxyLoss(8)
M.adjustToxLoss(3)
M.Weaken(3)
update_flags |= M.adjustOxyLoss(8, FALSE)
update_flags |= M.adjustToxLoss(3, FALSE)
update_flags |= M.Weaken(3, FALSE)
M.emote(pick("choke", "gasp"))
to_chat(M, "<span class='warning'>You feel like you're dying!</span>")
return list(effect, update_flags)
/datum/reagent/formaldehyde
name = "Formaldehyde"
@@ -429,10 +445,11 @@
penetrates_skin = TRUE
/datum/reagent/formaldehyde/on_mob_life(mob/living/M)
M.adjustToxLoss(1*REAGENTS_EFFECT_MULTIPLIER)
var/update_flags = STATUS_UPDATE_NONE
update_flags |= M.adjustToxLoss(1*REAGENTS_EFFECT_MULTIPLIER, FALSE)
if(prob(10))
M.reagents.add_reagent("histamine",rand(5,15))
..()
return ..() | update_flags
/datum/reagent/venom
name = "Venom"
@@ -445,26 +462,29 @@
can_synth = FALSE
/datum/reagent/venom/on_mob_life(mob/living/M)
var/update_flags = STATUS_UPDATE_NONE
if(prob(25))
M.reagents.add_reagent("histamine",rand(5,10))
if(volume < 20)
M.adjustToxLoss(1)
M.adjustBruteLoss(1)
update_flags |= M.adjustToxLoss(1, FALSE)
update_flags |= M.adjustBruteLoss(1, FALSE)
else if(volume < 40)
if(prob(8))
M.fakevomit()
M.adjustToxLoss(2)
M.adjustBruteLoss(2)
..()
update_flags |= M.adjustToxLoss(2, FALSE)
update_flags |= M.adjustBruteLoss(2, FALSE)
return ..() | update_flags
/datum/reagent/venom/overdose_process(mob/living/M)
var/update_flags = STATUS_UPDATE_NONE
if(volume >= 40)
if(prob(4))
M.visible_message("<span class='danger'><B>[M]</B> starts convulsing violently!</span>", "You feel as if your body is tearing itself apart!")
M.Weaken(15)
update_flags |= M.Weaken(15, FALSE)
M.AdjustJitter(1000)
spawn(rand(20, 100))
M.gib()
return list(0, update_flags)
/datum/reagent/neurotoxin2
name = "Neurotoxin"
@@ -475,6 +495,7 @@
metabolization_rate = 1
/datum/reagent/neurotoxin2/on_mob_life(mob/living/M)
var/update_flags = STATUS_UPDATE_NONE
switch(current_cycle)
if(1 to 4)
current_cycle++
@@ -489,19 +510,19 @@
if(13)
M.emote("faint")
if(14 to INFINITY)
M.Paralyse(10)
update_flags |= M.Paralyse(10, FALSE)
M.Drowsy(20)
M.AdjustJitter(-30)
if(M.getBrainLoss() <= 80)
M.adjustBrainLoss(1)
update_flags |= M.adjustBrainLoss(1, FALSE)
else
if(prob(10))
M.adjustBrainLoss(1)
update_flags |= M.adjustBrainLoss(1, FALSE)
if(prob(10))
M.emote("drool")
M.adjustToxLoss(1)
..()
update_flags |= M.adjustToxLoss(1, FALSE)
return ..() | update_flags
/datum/reagent/cyanide
name = "Cyanide"
@@ -514,7 +535,8 @@
taste_message = "almonds"
/datum/reagent/cyanide/on_mob_life(mob/living/M)
M.adjustToxLoss(1.5*REAGENTS_EFFECT_MULTIPLIER)
var/update_flags = STATUS_UPDATE_NONE
update_flags |= M.adjustToxLoss(1.5*REAGENTS_EFFECT_MULTIPLIER, FALSE)
if(prob(5))
M.emote("drool")
if(prob(10))
@@ -523,9 +545,9 @@
M.emote("gasp")
if(prob(8))
to_chat(M, "<span class='danger'>You feel horrendously weak!</span>")
M.Stun(2)
M.adjustToxLoss(2)
..()
update_flags |= M.Stun(2, FALSE)
update_flags |= M.adjustToxLoss(2, FALSE)
return ..() | update_flags
/datum/reagent/itching_powder
name = "Itching Powder"
@@ -537,6 +559,7 @@
penetrates_skin = TRUE
/datum/reagent/itching_powder/on_mob_life(mob/living/M)
var/update_flags = STATUS_UPDATE_STAT
if(prob(25))
M.emote(pick("twitch", "laugh", "sneeze", "cry"))
if(prob(20))
@@ -544,22 +567,22 @@
M.emote(pick("laugh", "giggle"))
if(prob(15))
M.visible_message("<span class='danger'>[M] scratches at an itch.</span>")
M.adjustBruteLoss(1)
M.Stun(rand(0,1))
update_flags |= M.adjustBruteLoss(1, FALSE)
update_flags |= M.Stun(rand(0,1), FALSE)
M.emote("grumble")
if(prob(10))
to_chat(M, "<span class='danger'>So itchy!</span>")
M.adjustBruteLoss(2)
update_flags |= M.adjustBruteLoss(2, FALSE)
if(prob(6))
M.reagents.add_reagent("histamine", rand(1,3))
if(prob(2))
to_chat(M, "<span class='danger'>AHHHHHH!</span>")
M.adjustBruteLoss(5)
M.Weaken(5)
update_flags |= M.adjustBruteLoss(5, FALSE)
update_flags |= M.Weaken(5, FALSE)
M.AdjustJitter(6)
M.visible_message("<span class='danger'>[M] falls to the floor, scratching [M.p_them()]self violently!</span>")
M.emote("scream")
..()
return ..() | update_flags
/datum/reagent/facid
name = "Fluorosulfuric Acid"
@@ -571,9 +594,10 @@
taste_message = "<span class='userdanger'>ACID</span>"
/datum/reagent/facid/on_mob_life(mob/living/M)
M.adjustToxLoss(1*REAGENTS_EFFECT_MULTIPLIER)
M.adjustFireLoss(1)
..()
var/update_flags = STATUS_UPDATE_NONE
update_flags |= M.adjustToxLoss(1*REAGENTS_EFFECT_MULTIPLIER, FALSE)
update_flags |= M.adjustFireLoss(1, FALSE)
return ..() | update_flags
/datum/reagent/facid/reaction_mob(mob/living/M, method=TOUCH, volume)
if(method == TOUCH || method == INGEST)
@@ -635,26 +659,27 @@
taste_message = null
/datum/reagent/initropidril/on_mob_life(mob/living/M)
var/update_flags = STATUS_UPDATE_NONE
if(prob(33))
M.adjustToxLoss(rand(5,25))
update_flags |= M.adjustToxLoss(rand(5,25), FALSE)
if(prob(33))
to_chat(M, "<span class='danger'>You feel horribly weak.</span>")
M.Stun(2)
update_flags |= M.Stun(2, FALSE)
if(prob(10))
to_chat(M, "<span class='danger'>You cannot breathe!</span>")
M.adjustOxyLoss(10)
update_flags |= M.adjustOxyLoss(10, FALSE)
M.AdjustLoseBreath(1)
if(prob(10))
to_chat(M, "<span class='danger'>Your chest is burning with pain!</span>")
M.adjustOxyLoss(10)
update_flags |= M.adjustOxyLoss(10, FALSE)
M.AdjustLoseBreath(1)
M.Stun(3)
M.Weaken(2)
update_flags |= M.Stun(3, FALSE)
update_flags |= M.Weaken(2, FALSE)
if(ishuman(M))
var/mob/living/carbon/human/H = M
if(!H.undergoing_cardiac_arrest())
H.set_heartattack(TRUE) // rip in pepperoni
..()
return ..() | update_flags
/datum/reagent/pancuronium
name = "Pancuronium"
@@ -666,6 +691,7 @@
taste_message = null
/datum/reagent/pancuronium/on_mob_life(mob/living/M)
var/update_flags = STATUS_UPDATE_NONE
switch(current_cycle)
if(1 to 5)
if(prob(10))
@@ -673,12 +699,12 @@
if(6 to 10)
if(prob(8))
to_chat(M, "<span class='danger'>You feel [pick("weak", "horribly weak", "numb", "like you can barely move", "tingly")].</span>")
M.Stun(1)
update_flags |= M.Stun(1, FALSE)
else if(prob(8))
M.emote(pick("drool", "tremble"))
if(11 to INFINITY)
M.Stun(20)
M.Weaken(20)
update_flags |= M.Stun(20, FALSE)
update_flags |= M.Weaken(20, FALSE)
if(prob(10))
M.emote(pick("drool", "tremble", "gasp"))
M.AdjustLoseBreath(1)
@@ -687,7 +713,7 @@
if(prob(7))
to_chat(M, "<span class='danger'>You can't breathe!</span>")
M.AdjustLoseBreath(3)
..()
return ..() | update_flags
/datum/reagent/sodium_thiopental
name = "Sodium Thiopental"
@@ -700,6 +726,7 @@
taste_message = null
/datum/reagent/sodium_thiopental/on_mob_life(mob/living/M)
var/update_flags = STATUS_UPDATE_NONE
switch(current_cycle)
if(1)
M.emote("drool")
@@ -708,14 +735,14 @@
M.Drowsy(20)
if(5)
M.emote("faint")
M.Weaken(5)
update_flags |= M.Weaken(5, FALSE)
if(6 to INFINITY)
M.Paralyse(20)
update_flags |= M.Paralyse(20, FALSE)
M.AdjustJitter(-50)
if(prob(10))
M.emote("drool")
M.adjustBrainLoss(1)
..()
update_flags |= M.adjustBrainLoss(1, FALSE)
return ..() | update_flags
/datum/reagent/ketamine
name = "Ketamine"
@@ -729,20 +756,21 @@
taste_message = null
/datum/reagent/ketamine/on_mob_life(mob/living/M)
var/update_flags = STATUS_UPDATE_NONE
switch(current_cycle)
if(1 to 5)
if(prob(25))
M.emote("yawn")
if(6 to 9)
M.AdjustEyeBlurry(5)
update_flags |= M.AdjustEyeBlurry(5, FALSE)
if(prob(35))
M.emote("yawn")
if(10)
M.emote("faint")
M.Weaken(5)
update_flags |= M.Weaken(5, FALSE)
if(11 to INFINITY)
M.Paralyse(25)
..()
update_flags |= M.Paralyse(25, FALSE)
return ..() | update_flags
/datum/reagent/sulfonal
name = "Sulfonal"
@@ -753,6 +781,7 @@
metabolization_rate = 0.1
/datum/reagent/sulfonal/on_mob_life(mob/living/M)
var/update_flags = STATUS_UPDATE_NONE
M.AdjustJitter(-30)
switch(current_cycle)
if(1 to 10)
@@ -765,10 +794,10 @@
if(22 to INFINITY)
if(prob(20))
M.emote("faint")
M.Paralyse(5)
update_flags |= M.Paralyse(5, FALSE)
M.Drowsy(20)
M.adjustToxLoss(1)
..()
update_flags |= M.adjustToxLoss(1, FALSE)
return ..() | update_flags
/datum/reagent/amanitin
name = "Amanitin"
@@ -792,19 +821,20 @@
taste_message = "battery acid"
/datum/reagent/lipolicide/on_mob_life(mob/living/M)
var/update_flags = STATUS_UPDATE_NONE
if(!M.nutrition)
switch(rand(1,3))
if(1)
to_chat(M, "<span class='warning'>You feel hungry...</span>")
if(2)
M.adjustToxLoss(1)
update_flags |= M.adjustToxLoss(1, FALSE)
to_chat(M, "<span class='warning'>Your stomach grumbles painfully!</span>")
else
if(prob(60))
var/fat_to_burn = max(round(M.nutrition/100,1), 5)
M.nutrition = max(0, M.nutrition-fat_to_burn)
M.overeatduration = 0
..()
return ..() | update_flags
/datum/reagent/coniine
name = "Coniine"
@@ -816,9 +846,10 @@
can_synth = FALSE
/datum/reagent/coniine/on_mob_life(mob/living/M)
M.adjustToxLoss(2)
var/update_flags = STATUS_UPDATE_NONE
update_flags |= M.adjustToxLoss(2, FALSE)
M.AdjustLoseBreath(5)
..()
return ..() | update_flags
/datum/reagent/curare
name = "Curare"
@@ -830,28 +861,29 @@
penetrates_skin = TRUE
/datum/reagent/curare/on_mob_life(mob/living/M)
M.adjustToxLoss(1)
M.adjustOxyLoss(1)
var/update_flags = STATUS_UPDATE_NONE
update_flags |= M.adjustToxLoss(1, FALSE)
update_flags |= M.adjustOxyLoss(1, FALSE)
switch(current_cycle)
if(1 to 5)
if(prob(20))
M.emote(pick("drool", "pale", "gasp"))
if(6 to 10)
M.AdjustEyeBlurry(5)
update_flags |= M.AdjustEyeBlurry(5, FALSE)
if(prob(8))
to_chat(M, "<span class='danger'>You feel [pick("weak", "horribly weak", "numb", "like you can barely move", "tingly")].</span>")
M.Stun(1)
update_flags |= M.Stun(1, FALSE)
else if(prob(8))
M.emote(pick("drool","pale", "gasp"))
M.emote(pick("drool", "pale", "gasp"))
if(11 to INFINITY)
M.Stun(30)
update_flags |= M.Stun(30, FALSE)
M.Drowsy(20)
if(prob(20))
M.emote(pick("drool", "faint", "pale", "gasp", "collapse"))
else if(prob(8))
to_chat(M, "<span class='danger'>You can't [pick("breathe", "move", "feel your legs", "feel your face", "feel anything")]!</span>")
M.AdjustLoseBreath(1)
..()
return ..() | update_flags
/datum/reagent/heparin //Based on a real-life anticoagulant.
name = "Heparin"
@@ -862,11 +894,12 @@
metabolization_rate = 0.2 * REAGENTS_METABOLISM
/datum/reagent/heparin/on_mob_life(mob/living/M)
var/update_flags = STATUS_UPDATE_NONE
if(ishuman(M))
var/mob/living/carbon/human/H = M
H.bleed_rate = min(H.bleed_rate + 2, 8)
H.adjustBruteLoss(1)
..()
update_flags |= H.adjustBruteLoss(1, FALSE)
return ..() | update_flags
/datum/reagent/sarin
name = "Sarin"
@@ -880,6 +913,7 @@
taste_message = null
/datum/reagent/sarin/on_mob_life(mob/living/M)
var/update_flags = STATUS_UPDATE_NONE
switch(current_cycle)
if(1 to 15)
M.AdjustJitter(20)
@@ -888,23 +922,23 @@
if(16 to 30)
if(prob(25))
M.emote(pick("twitch","twitch","drool","quiver","tremble"))
M.AdjustEyeBlurry(5)
update_flags |= M.AdjustEyeBlurry(5, FALSE)
M.Stuttering(5)
if(prob(10))
M.Confused(15)
if(prob(15))
M.Stun(1)
update_flags |= M.Stun(1, FALSE)
M.emote("scream")
if(30 to 60)
M.AdjustEyeBlurry(5)
update_flags |= M.AdjustEyeBlurry(5, FALSE)
M.Stuttering(5)
if(prob(10))
M.Stun(1)
update_flags |= M.Stun(1, FALSE)
M.emote(pick("twitch","twitch","drool","shake","tremble"))
if(prob(5))
M.emote("collapse")
if(prob(5))
M.Weaken(3)
update_flags |= M.Weaken(3, FALSE)
M.visible_message("<span class='warning'>[M] has a seizure!</span>")
M.SetJitter(1000)
if(prob(5))
@@ -915,15 +949,15 @@
if(prob(15))
M.emote(pick("gasp", "choke", "cough","twitch", "shake", "tremble","quiver","drool", "twitch","collapse"))
M.LoseBreath(5)
M.adjustToxLoss(1)
M.adjustBrainLoss(1)
M.Weaken(4)
update_flags |= M.adjustToxLoss(1, FALSE)
update_flags |= M.adjustBrainLoss(1, FALSE)
update_flags |= M.Weaken(4, FALSE)
if(prob(8))
M.fakevomit()
M.adjustToxLoss(1)
M.adjustBrainLoss(1)
M.adjustFireLoss(1)
..()
update_flags |= M.adjustToxLoss(1, FALSE)
update_flags |= M.adjustBrainLoss(1, FALSE)
update_flags |= M.adjustFireLoss(1, FALSE)
return ..() | update_flags
/datum/reagent/glyphosate
name = "Glyphosate"
@@ -934,8 +968,9 @@
var/lethality = 0 //Glyphosate is non-toxic to people
/datum/reagent/glyphosate/on_mob_life(mob/living/M)
M.adjustToxLoss(lethality)
..()
var/update_flags = STATUS_UPDATE_NONE
update_flags |= M.adjustToxLoss(lethality, FALSE)
return ..() | update_flags
/datum/reagent/glyphosate/reaction_turf(turf/simulated/wall/W, volume) // Clear off wallrot fungi
if(istype(W) && W.rotting)
@@ -985,8 +1020,9 @@
color = "#4B004B" // rgb: 75, 0, 75
/datum/reagent/pestkiller/on_mob_life(mob/living/M)
M.adjustToxLoss(1)
..()
var/update_flags = STATUS_UPDATE_NONE
update_flags |= M.adjustToxLoss(1, FALSE)
return ..() | update_flags
/datum/reagent/pestkiller/reaction_mob(mob/living/M, method=TOUCH, volume)
if(iscarbon(M))
@@ -1008,19 +1044,20 @@
taste_message = "sweetness"
/datum/reagent/capulettium/on_mob_life(mob/living/M)
var/update_flags = STATUS_UPDATE_NONE
switch(current_cycle)
if(1 to 5)
M.AdjustEyeBlurry(10)
update_flags |= M.AdjustEyeBlurry(10, FALSE)
if(6 to 10)
M.Drowsy(10)
if(11)
M.Paralyse(10)
update_flags |= M.Paralyse(10, FALSE)
M.visible_message("<B>[M]</B> seizes up and falls limp, [M.p_their()] eyes dead and lifeless...") //so you can't trigger deathgasp emote on people. Edge case, but necessary.
if(12 to 60)
M.Paralyse(10)
update_flags |= M.Paralyse(10, FALSE)
if(61 to INFINITY)
M.AdjustEyeBlurry(10)
..()
update_flags |= M.AdjustEyeBlurry(10, FALSE)
return ..() | update_flags
/datum/reagent/capulettium_plus
name = "Capulettium Plus"
@@ -1033,7 +1070,7 @@
/datum/reagent/capulettium_plus/on_mob_life(mob/living/M)
M.Silence(2)
..()
return ..()
/datum/reagent/toxic_slurry
name = "Toxic Slurry"
@@ -1043,14 +1080,15 @@
color = "#00C81E"
/datum/reagent/toxic_slurry/on_mob_life(mob/living/M)
var/update_flags = STATUS_UPDATE_NONE
if(prob(10))
M.adjustToxLoss(rand(2.4))
update_flags |= M.adjustToxLoss(rand(2.4), FALSE)
if(prob(7))
to_chat(M, "<span class='danger'>A horrible migraine overpowers you.</span>")
M.Stun(rand(2,5))
update_flags |= M.Stun(rand(2,5), FALSE)
if(prob(7))
M.fakevomit(1)
..()
return ..() | update_flags
/datum/reagent/glowing_slurry
name = "Glowing Slurry"
@@ -1079,7 +1117,7 @@
randmutg(M)
domutcheck(M, null)
M.UpdateAppearance()
..()
return ..()
/datum/reagent/ants
name = "Ants"
@@ -1091,8 +1129,9 @@
taste_message = "<span class='warning'>ANTS OH GOD</span>"
/datum/reagent/ants/on_mob_life(mob/living/M)
M.adjustBruteLoss(2)
..()
var/update_flags = STATUS_UPDATE_NONE
update_flags |= M.adjustBruteLoss(2, FALSE)
return ..() | update_flags
/datum/reagent/ants/reaction_mob(mob/living/M, method=TOUCH, volume) //NOT THE ANTS
if(iscarbon(M))
@@ -1118,4 +1157,4 @@
shock_timer = 0
M.electrocute_act(rand(5,20), "Teslium in their body", 1, 1) //Override because it's caused from INSIDE of you
playsound(M, "sparks", 50, 1)
..()
return ..()
@@ -316,7 +316,7 @@
M.fakevomit(1)
else
M.fakevomit(0)
..()
return ..()
/datum/reagent/fishwater/toiletwater
name = "Toilet Water"
@@ -342,6 +342,7 @@
taste_message = null
/datum/reagent/holywater/on_mob_life(mob/living/M)
var/update_flags = STATUS_UPDATE_NONE
M.AdjustJitter(-5)
if(current_cycle >= 30) // 12 units, 60 seconds @ metabolism 0.4 units & tick rate 2.0 sec
M.AdjustStuttering(4, bound_lower = 0, bound_upper = 20)
@@ -370,7 +371,7 @@
if(M.mind.vampire.bloodusable)
M.Stuttering(1)
M.Jitter(30)
M.adjustStaminaLoss(5)
update_flags |= M.adjustStaminaLoss(5, FALSE)
if(prob(20))
M.emote("scream")
M.mind.vampire.nullified = max(5, M.mind.vampire.nullified + 2)
@@ -388,7 +389,7 @@
M.mind.vampire.nullified = max(5, M.mind.vampire.nullified + 2)
if(5 to 12)
to_chat(M, "<span class = 'danger'>You feel an intense burning inside of you!</span>")
M.adjustFireLoss(1)
update_flags |= M.adjustFireLoss(1, FALSE)
M.Stuttering(1)
M.Jitter(20)
if(prob(20))
@@ -400,13 +401,13 @@
O.show_message(text("<span class = 'danger'>[] suddenly bursts into flames!</span>", M), 1)
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.adjustFireLoss(3) //Hence the other damages... ain't I a bastard?
update_flags |= M.adjustFireLoss(3, FALSE) //Hence the other damages... ain't I a bastard?
M.Stuttering(1)
M.Jitter(30)
if(prob(40))
M.emote("scream")
M.mind.vampire.nullified = max(5, M.mind.vampire.nullified + 2)
..()
return ..() | update_flags
/datum/reagent/holywater/reaction_mob(mob/living/M, method=TOUCH, volume)
@@ -442,23 +443,24 @@
taste_message = null
/datum/reagent/fuel/unholywater/on_mob_life(mob/living/M)
var/update_flags = STATUS_UPDATE_NONE
if(iscultist(M))
M.AdjustDrowsy(-5)
M.AdjustParalysis(-1)
M.AdjustStunned(-2)
M.AdjustWeakened(-2)
M.adjustToxLoss(-2)
M.adjustFireLoss(-2)
M.adjustOxyLoss(-2)
M.adjustBruteLoss(-2)
update_flags |= M.AdjustParalysis(-1, FALSE)
update_flags |= M.AdjustStunned(-2, FALSE)
update_flags |= M.AdjustWeakened(-2, FALSE)
update_flags |= M.adjustToxLoss(-2, FALSE)
update_flags |= M.adjustFireLoss(-2, FALSE)
update_flags |= M.adjustOxyLoss(-2, FALSE)
update_flags |= M.adjustBruteLoss(-2, FALSE)
else
M.adjustBrainLoss(3)
M.adjustToxLoss(1)
M.adjustFireLoss(2)
M.adjustOxyLoss(2)
M.adjustBruteLoss(2)
update_flags |= M.adjustBrainLoss(3, FALSE)
update_flags |= M.adjustToxLoss(1, FALSE)
update_flags |= M.adjustFireLoss(2, FALSE)
update_flags |= M.adjustOxyLoss(2, FALSE)
update_flags |= M.adjustBruteLoss(2, FALSE)
M.AdjustCultSlur(10)//CUASE WHY THE HELL NOT
..()
return ..() | update_flags
/datum/reagent/hellwater
name = "Hell Water"
@@ -470,12 +472,13 @@
taste_message = "admin abuse"
/datum/reagent/hellwater/on_mob_life(mob/living/M)
var/update_flags = STATUS_UPDATE_NONE
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)
..()
update_flags |= M.adjustToxLoss(1, FALSE)
update_flags |= M.adjustFireLoss(1, FALSE) //Hence the other damages... ain't I a bastard?
update_flags |= M.adjustBrainLoss(5, FALSE)
return ..() | update_flags
/datum/reagent/liquidgibs
name = "Liquid gibs"