This commit is contained in:
Seris02
2020-03-09 16:49:32 +08:00
1093 changed files with 386415 additions and 224664 deletions
+6 -1
View File
@@ -303,6 +303,8 @@
if(R.overdose_threshold)
if(R.volume > R.overdose_threshold && !R.overdosed)
R.overdosed = 1
var/turf/CT = get_turf(C)
log_reagent("OVERDOSE START: [key_name(C)] at [AREACOORD(CT)] started overdosing on [R.volume] units of [R].")
need_mob_update += R.overdose_start(C)
if(R.addiction_threshold)
if(R.volume > R.addiction_threshold && !is_type_in_list(R, cached_addictions))
@@ -340,13 +342,16 @@
addiction_tick++
if(C && need_mob_update) //some of the metabolized reagents had effects on the mob that requires some updates.
C.updatehealth()
C.update_canmove()
C.update_mobility()
C.update_stamina()
update_total()
/datum/reagents/proc/remove_addiction(datum/reagent/R)
to_chat(my_atom, "<span class='notice'>You feel like you've gotten over your need for [R.name].</span>")
SEND_SIGNAL(my_atom, COMSIG_CLEAR_MOOD_EVENT, "[R.type]_overdose")
if(ismob(my_atom))
var/turf/T = get_turf(my_atom)
log_reagent("OVERDOSE STOP: [key_name(my_atom)] at [AREACOORD(T)] got over their need for [R].")
addiction_list.Remove(R)
qdel(R)
+20 -20
View File
@@ -78,7 +78,6 @@ GLOBAL_LIST_INIT(name2reagent, build_name2reagent())
current_cycle++
if(holder)
holder.remove_reagent(type, metabolization_rate * M.metabolism_efficiency) //By default it slowly disappears.
return
//called when a mob processes chems when dead.
/datum/reagent/proc/on_mob_dead(mob/living/carbon/M)
@@ -87,15 +86,15 @@ GLOBAL_LIST_INIT(name2reagent, build_name2reagent())
current_cycle++
if(holder)
holder.remove_reagent(type, metabolization_rate * M.metabolism_efficiency) //By default it slowly disappears.
return
// Called when this reagent is first added to a mob
/datum/reagent/proc/on_mob_add(mob/living/L, amount)
if(!iscarbon(L))
return
var/mob/living/carbon/M = L
var/turf/T = get_turf(M)
log_reagent("MOB ADD: on_mob_add(): [key_name(M)] at [AREACOORD(T)] - [volume] of [type] with [purity] purity")
if (purity == 1)
log_game("CHEM: [L] ckey: [L.key] has ingested [volume]u of [type]")
return
if(cached_purity == 1)
cached_purity = purity
@@ -112,20 +111,18 @@ GLOBAL_LIST_INIT(name2reagent, build_name2reagent())
R.name = name//Negative effects are hidden
if(R.chemical_flags & REAGENT_INVISIBLE)
R.chemical_flags |= (REAGENT_INVISIBLE)
log_game("FERMICHEM: [M] ckey: [M.key] has ingested [volume]u of [inverse_chem]")
return
log_reagent("MOB ADD: on_mob_add() (impure): merged [volume] of [inverse_chem]")
else if (impure_chem)
var/impureVol = amount * (1 - purity) //turns impure ratio into impure chem
if(!(chemical_flags & REAGENT_SPLITRETAINVOL))
M.reagents.remove_reagent(type, (impureVol), FALSE)
M.reagents.add_reagent(impure_chem, impureVol, FALSE, other_purity = 1-cached_purity)
log_game("FERMICHEM: [M] ckey: [M.key] has ingested [volume - impureVol]u of [type]")
log_game("FERMICHEM: [M] ckey: [M.key] has ingested [volume]u of [impure_chem]")
return
log_reagent("MOB ADD: on_mob_add() (mixed purity): merged [volume - impureVol] of [type] and [volume] of [impure_chem]")
// Called when this reagent is removed while inside a mob
/datum/reagent/proc/on_mob_delete(mob/living/L)
return
var/turf/T = get_turf(L)
log_reagent("MOB DELETE: on_mob_delete: [key_name(L)] at [AREACOORD(T)] - [type]")
// Called when this reagent first starts being metabolized by a liver
/datum/reagent/proc/on_mob_metabolize(mob/living/L)
@@ -146,8 +143,9 @@ GLOBAL_LIST_INIT(name2reagent, build_name2reagent())
/datum/reagent/proc/on_merge(data, amount, mob/living/carbon/M, purity)
if(!iscarbon(M))
return
var/turf/T = get_turf(M)
log_reagent("MOB ADD: on_merge(): [key_name(M)] at [AREACOORD(T)] - [volume] of [type] with [purity] purity")
if (purity == 1)
log_game("FERMICHEM: [M] ckey: [M.key] has ingested [volume]u of [type]")
return
cached_purity = purity //purity SHOULD be precalculated from the add_reagent, update cache.
if (purity < 0)
@@ -163,16 +161,13 @@ GLOBAL_LIST_INIT(name2reagent, build_name2reagent())
R.name = name//Negative effects are hidden
if(R.chemical_flags & REAGENT_INVISIBLE)
R.chemical_flags |= (REAGENT_INVISIBLE)
log_game("FERMICHEM: [M] ckey: [M.key] has merged [volume]u of [inverse_chem]")
return
log_reagent("MOB ADD: on_merge() (impure): merged [volume] of [inverse_chem]")
else if (impure_chem) //SPLIT
var/impureVol = amount * (1 - purity)
if(!(chemical_flags & REAGENT_SPLITRETAINVOL))
M.reagents.remove_reagent(type, impureVol, FALSE)
M.reagents.add_reagent(impure_chem, impureVol, FALSE, other_purity = 1-cached_purity)
log_game("FERMICHEM: [M] ckey: [M.key] has merged [volume - impureVol]u of [type]")
log_game("FERMICHEM: [M] ckey: [M.key] has merged [volume]u of [impure_chem]")
return
log_reagent("MOB ADD: on_merge() (mixed purity): merged [volume - impureVol] of [type] and [volume] of [impure_chem]")
/datum/reagent/proc/on_update(atom/A)
return
@@ -188,31 +183,26 @@ GLOBAL_LIST_INIT(name2reagent, build_name2reagent())
/datum/reagent/proc/overdose_start(mob/living/M)
to_chat(M, "<span class='userdanger'>You feel like you took too much of [name]!</span>")
SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "[type]_overdose", /datum/mood_event/overdose, name)
return
/datum/reagent/proc/addiction_act_stage1(mob/living/M)
SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "[type]_overdose", /datum/mood_event/withdrawal_light, name)
if(prob(30))
to_chat(M, "<span class='notice'>You feel like having some [name] right about now.</span>")
return
/datum/reagent/proc/addiction_act_stage2(mob/living/M)
SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "[type]_overdose", /datum/mood_event/withdrawal_medium, name)
if(prob(30))
to_chat(M, "<span class='notice'>You feel like you need [name]. You just can't get enough.</span>")
return
/datum/reagent/proc/addiction_act_stage3(mob/living/M)
SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "[type]_overdose", /datum/mood_event/withdrawal_severe, name)
if(prob(30))
to_chat(M, "<span class='danger'>You have an intense craving for [name].</span>")
return
/datum/reagent/proc/addiction_act_stage4(mob/living/M)
SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "[type]_overdose", /datum/mood_event/withdrawal_critical, name)
if(prob(30))
to_chat(M, "<span class='boldannounce'>You're not feeling good at all! You really need some [name].</span>")
return
/proc/pretty_string_from_reagent_list(list/reagent_list)
//Convert reagent list to a printable string for logging etc
@@ -221,3 +211,13 @@ GLOBAL_LIST_INIT(name2reagent, build_name2reagent())
rs += "[R.name], [R.volume]"
return rs.Join(" | ")
//For easy bloodsucker disgusting and blood removal
/datum/reagent/proc/disgust_bloodsucker(mob/living/carbon/C, disgust, blood_change, blood_puke = TRUE, force)
if(isvamp(C))
var/datum/antagonist/bloodsucker/bloodsuckerdatum = C.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER)
if(disgust)
bloodsuckerdatum.handle_eat_human_food(disgust, blood_puke, force)
if(blood_change)
bloodsuckerdatum.AddBloodVolume(blood_change)
@@ -579,8 +579,8 @@ All effects don't start immediately, but rather get worse over time; the rate is
value = 1.3
/datum/reagent/consumable/ethanol/bloody_mary/on_mob_life(mob/living/carbon/C)
if((HAS_TRAIT(C, TRAIT_NOMARROW)))
return
if(isvamp(C))
disgust_bloodsucker(FALSE, 1) //Bloodsuckers get SOME blood from it, for style reasons.
if(C.blood_volume < (BLOOD_VOLUME_NORMAL*C.blood_ratio))
C.blood_volume = min((BLOOD_VOLUME_NORMAL*C.blood_ratio), C.blood_volume + 3) //Bloody Mary quickly restores blood loss.
..()
@@ -20,7 +20,7 @@
/datum/reagent/drug/space_drugs/on_mob_life(mob/living/carbon/M)
M.set_drugginess(15)
if(isturf(M.loc) && !isspaceturf(M.loc))
if(M.canmove)
if(CHECK_MOBILITY(M, MOBILITY_MOVE))
if(prob(10))
step(M, pick(GLOB.cardinals))
if(prob(7))
@@ -52,8 +52,7 @@
var/smoke_message = pick("You feel relaxed.", "You feel calmed.","You feel alert.","You feel rugged.")
to_chat(M, "<span class='notice'>[smoke_message]</span>")
SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "smoked", /datum/mood_event/smoked, name)
M.AdjustStun(-20, 0)
M.AdjustKnockdown(-20, 0)
M.AdjustAllImmobility(-20, 0)
M.AdjustUnconscious(-20, 0)
M.adjustStaminaLoss(-0.5*REM, 0)
..()
@@ -72,8 +71,7 @@
if(prob(5))
var/high_message = pick("You feel jittery.", "You feel like you gotta go fast.", "You feel like you need to step it up.")
to_chat(M, "<span class='notice'>[high_message]</span>")
M.AdjustStun(-20, 0)
M.AdjustKnockdown(-20, 0)
M.AdjustAllImmobility(-20, 0)
M.AdjustUnconscious(-20, 0)
..()
. = 1
@@ -182,8 +180,7 @@
var/high_message = pick("You feel hyper.", "You feel like you need to go faster.", "You feel like you can run the world.")
if(prob(5))
to_chat(M, "<span class='notice'>[high_message]</span>")
M.AdjustStun(-40, 0)
M.AdjustKnockdown(-40, 0)
M.AdjustAllImmobility(-40, 0)
M.AdjustUnconscious(-40, 0)
M.adjustStaminaLoss(-7.5 * REM, 0)
if(jitter)
@@ -197,7 +194,7 @@
. = 1
/datum/reagent/drug/methamphetamine/overdose_process(mob/living/M)
if(M.canmove && !ismovableatom(M.loc))
if(CHECK_MOBILITY(M, MOBILITY_MOVE) && !ismovableatom(M.loc))
for(var/i in 1 to 4)
step(M, pick(GLOB.cardinals))
if(prob(20))
@@ -224,7 +221,7 @@
..()
/datum/reagent/drug/methamphetamine/addiction_act_stage3(mob/living/M)
if(M.canmove && !ismovableatom(M.loc))
if(CHECK_MOBILITY(M, MOBILITY_MOVE) && !ismovableatom(M.loc))
for(var/i = 0, i < 4, i++)
step(M, pick(GLOB.cardinals))
M.Jitter(15)
@@ -234,7 +231,7 @@
..()
/datum/reagent/drug/methamphetamine/addiction_act_stage4(mob/living/carbon/human/M)
if(M.canmove && !ismovableatom(M.loc))
if(CHECK_MOBILITY(M, MOBILITY_MOVE) && !ismovableatom(M.loc))
for(var/i = 0, i < 8, i++)
step(M, pick(GLOB.cardinals))
M.Jitter(20)
@@ -286,7 +283,7 @@
M.adjustStaminaLoss(-5, 0)
M.adjustOrganLoss(ORGAN_SLOT_BRAIN, 4)
M.hallucination += 5
if(M.canmove && !ismovableatom(M.loc))
if(CHECK_MOBILITY(M, MOBILITY_MOVE) && !ismovableatom(M.loc))
step(M, pick(GLOB.cardinals))
step(M, pick(GLOB.cardinals))
..()
@@ -294,7 +291,7 @@
/datum/reagent/drug/bath_salts/overdose_process(mob/living/M)
M.hallucination += 5
if(M.canmove && !ismovableatom(M.loc))
if(CHECK_MOBILITY(M, MOBILITY_MOVE) && !ismovableatom(M.loc))
for(var/i in 1 to 8)
step(M, pick(GLOB.cardinals))
if(prob(20))
@@ -305,7 +302,7 @@
/datum/reagent/drug/bath_salts/addiction_act_stage1(mob/living/M)
M.hallucination += 10
if(M.canmove && !ismovableatom(M.loc))
if(CHECK_MOBILITY(M, MOBILITY_MOVE) && !ismovableatom(M.loc))
for(var/i = 0, i < 8, i++)
step(M, pick(GLOB.cardinals))
M.Jitter(5)
@@ -316,7 +313,7 @@
/datum/reagent/drug/bath_salts/addiction_act_stage2(mob/living/M)
M.hallucination += 20
if(M.canmove && !ismovableatom(M.loc))
if(CHECK_MOBILITY(M, MOBILITY_MOVE) && !ismovableatom(M.loc))
for(var/i = 0, i < 8, i++)
step(M, pick(GLOB.cardinals))
M.Jitter(10)
@@ -328,7 +325,7 @@
/datum/reagent/drug/bath_salts/addiction_act_stage3(mob/living/M)
M.hallucination += 30
if(M.canmove && !ismovableatom(M.loc))
if(CHECK_MOBILITY(M, MOBILITY_MOVE) && !ismovableatom(M.loc))
for(var/i = 0, i < 12, i++)
step(M, pick(GLOB.cardinals))
M.Jitter(15)
@@ -340,7 +337,7 @@
/datum/reagent/drug/bath_salts/addiction_act_stage4(mob/living/carbon/human/M)
M.hallucination += 30
if(M.canmove && !ismovableatom(M.loc))
if(CHECK_MOBILITY(M, MOBILITY_MOVE) && !ismovableatom(M.loc))
for(var/i = 0, i < 16, i++)
step(M, pick(GLOB.cardinals))
M.Jitter(50)
@@ -323,7 +323,7 @@
victim.blind_eyes(2)
victim.confused = max(M.confused, 3)
victim.damageoverlaytemp = 60
victim.Knockdown(80, override_hardstun = 0.1, override_stamdmg = min(reac_volume * 3, 15))
victim.DefaultCombatKnockdown(80, override_hardstun = 0.1, override_stamdmg = min(reac_volume * 3, 15))
return
else if ( eyes_covered ) // Eye cover is better than mouth cover
victim.blur_eyes(3)
@@ -336,7 +336,7 @@
victim.blind_eyes(3)
victim.confused = max(M.confused, 6)
victim.damageoverlaytemp = 75
victim.Knockdown(80, override_hardstun = 0.1, override_stamdmg = min(reac_volume * 5, 25))
victim.DefaultCombatKnockdown(80, override_hardstun = 0.1, override_stamdmg = min(reac_volume * 5, 25))
victim.update_damage_hud()
/datum/reagent/consumable/condensedcapsaicin/on_mob_life(mob/living/carbon/M)
@@ -46,8 +46,7 @@
REMOVE_TRAITS_NOT_IN(M, list(SPECIES_TRAIT, ROUNDSTART_TRAIT, ORGAN_TRAIT))
M.set_blurriness(0)
M.set_blindness(0)
M.SetKnockdown(0, 0)
M.SetStun(0, 0)
M.SetAllImmobility(0, 0)
M.SetUnconscious(0, 0)
M.silent = FALSE
M.dizziness = 0
@@ -87,8 +86,7 @@
/datum/reagent/medicine/synaptizine/on_mob_life(mob/living/carbon/M)
M.drowsyness = max(M.drowsyness-5, 0)
M.AdjustStun(-20, 0)
M.AdjustKnockdown(-20, 0)
M.AdjustAllImmobility(-20, 0)
M.AdjustUnconscious(-20, 0)
if(holder.has_reagent(/datum/reagent/toxin/mindbreaker))
holder.remove_reagent(/datum/reagent/toxin/mindbreaker, 5)
@@ -595,7 +593,7 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M)
/datum/reagent/medicine/salbutamol
name = "Salbutamol"
description = "Rapidly restores oxygen deprivation as well as preventing more of it to an extent."
description = "Rapidly restores oxygen deprivation as well as preventing more of it to an extent. Causes jittering."
reagent_state = LIQUID
color = "#00FFFF"
metabolization_rate = 0.25 * REAGENTS_METABOLISM
@@ -605,6 +603,7 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M)
M.adjustOxyLoss(-3*REM, 0)
if(M.losebreath >= 4)
M.losebreath -= 2
M.Jitter(5)
..()
. = 1
@@ -636,10 +635,9 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M)
pH = 12
/datum/reagent/medicine/ephedrine/on_mob_life(mob/living/carbon/M)
M.AdjustStun(-20, 0)
M.AdjustKnockdown(-20, 0)
M.AdjustUnconscious(-20, 0)
M.adjustStaminaLoss(-4.5*REM, 0)
M.AdjustAllImmobility(-20, FALSE)
M.AdjustUnconscious(-20, FALSE)
M.adjustStaminaLoss(-4.5*REM, FALSE)
M.Jitter(10)
if(prob(50))
M.confused = max(M.confused, 1)
@@ -847,8 +845,7 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M)
M.adjustStaminaLoss(-0.5*REM, 0)
. = 1
if(prob(20))
M.AdjustStun(-20, 0)
M.AdjustKnockdown(-20, 0)
M.AdjustAllImmobility(-20, 0)
M.AdjustUnconscious(-20, 0)
..()
@@ -1002,21 +999,20 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M)
/datum/reagent/medicine/stimulants/on_mob_life(mob/living/carbon/M)
if(M.health < 50 && M.health > 0)
M.adjustOxyLoss(-1*REM, 0)
M.adjustToxLoss(-1*REM, 0)
M.adjustBruteLoss(-1*REM, 0)
M.adjustFireLoss(-1*REM, 0)
M.AdjustStun(-60, 0)
M.AdjustKnockdown(-60, 0)
M.AdjustUnconscious(-60, 0)
M.adjustStaminaLoss(-20*REM, 0)
M.adjustOxyLoss(-1*REM, FALSE)
M.adjustToxLoss(-1*REM, FALSE)
M.adjustBruteLoss(-1*REM, FALSE)
M.adjustFireLoss(-1*REM, FALSE)
M.AdjustAllImmobility(-60, FALSE)
M.AdjustUnconscious(-60, FALSE)
M.adjustStaminaLoss(-20*REM, FALSE)
..()
. = 1
/datum/reagent/medicine/stimulants/overdose_process(mob/living/M)
if(prob(33))
M.adjustStaminaLoss(2.5*REM, 0)
M.adjustToxLoss(1*REM, 0)
M.adjustStaminaLoss(2.5*REM, FALSE)
M.adjustToxLoss(1*REM, FALSE)
M.losebreath++
. = 1
..()
@@ -1045,12 +1041,12 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M)
pH = 5
/datum/reagent/medicine/bicaridine/on_mob_life(mob/living/carbon/M)
M.adjustBruteLoss(-2*REM, 0)
M.adjustBruteLoss(-2*REM, FALSE)
..()
. = 1
/datum/reagent/medicine/bicaridine/overdose_process(mob/living/M)
M.adjustBruteLoss(4*REM, 0)
M.adjustBruteLoss(4*REM, FALSE)
..()
. = 1
@@ -1063,12 +1059,12 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M)
pH = 9.7
/datum/reagent/medicine/dexalin/on_mob_life(mob/living/carbon/M)
M.adjustOxyLoss(-2*REM, 0)
M.adjustOxyLoss(-2*REM, FALSE)
..()
. = 1
/datum/reagent/medicine/dexalin/overdose_process(mob/living/M)
M.adjustOxyLoss(4*REM, 0)
M.adjustOxyLoss(4*REM, FALSE)
..()
. = 1
@@ -1081,12 +1077,12 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M)
pH = 9
/datum/reagent/medicine/kelotane/on_mob_life(mob/living/carbon/M)
M.adjustFireLoss(-2*REM, 0)
M.adjustFireLoss(-2*REM, FALSE)
..()
. = 1
/datum/reagent/medicine/kelotane/overdose_process(mob/living/M)
M.adjustFireLoss(4*REM, 0)
M.adjustFireLoss(4*REM, FALSE)
..()
. = 1
@@ -1100,14 +1096,14 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M)
pH = 10
/datum/reagent/medicine/antitoxin/on_mob_life(mob/living/carbon/M)
M.adjustToxLoss(-2*REM, 0)
M.adjustToxLoss(-2*REM, FALSE)
for(var/datum/reagent/toxin/R in M.reagents.reagent_list)
M.reagents.remove_reagent(R.type,1)
..()
. = 1
/datum/reagent/medicine/antitoxin/overdose_process(mob/living/M)
M.adjustToxLoss(4*REM, 0) // End result is 2 toxin loss taken, because it heals 2 and then removes 4.
M.adjustToxLoss(4*REM, FALSE) // End result is 2 toxin loss taken, because it heals 2 and then removes 4.
..()
. = 1
@@ -1133,18 +1129,18 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M)
/datum/reagent/medicine/tricordrazine/on_mob_life(mob/living/carbon/M)
if(prob(80))
M.adjustBruteLoss(-1*REM, 0)
M.adjustFireLoss(-1*REM, 0)
M.adjustOxyLoss(-1*REM, 0)
M.adjustToxLoss(-1*REM, 0)
M.adjustBruteLoss(-1*REM, FALSE)
M.adjustFireLoss(-1*REM, FALSE)
M.adjustOxyLoss(-1*REM, FALSE)
M.adjustToxLoss(-1*REM, FALSE)
. = 1
..()
/datum/reagent/medicine/tricordrazine/overdose_process(mob/living/M)
M.adjustToxLoss(2*REM, 0)
M.adjustOxyLoss(2*REM, 0)
M.adjustBruteLoss(2*REM, 0)
M.adjustFireLoss(2*REM, 0)
M.adjustToxLoss(2*REM, FALSE)
M.adjustOxyLoss(2*REM, FALSE)
M.adjustBruteLoss(2*REM, FALSE)
M.adjustFireLoss(2*REM, FALSE)
..()
. = 1
@@ -1156,9 +1152,9 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M)
taste_description = "jelly"
/datum/reagent/medicine/regen_jelly/on_mob_life(mob/living/carbon/M)
M.adjustBruteLoss(-1.5*REM, 0)
M.adjustFireLoss(-1.5*REM, 0)
M.adjustOxyLoss(-1.5*REM, 0)
M.adjustBruteLoss(-1.5*REM, FALSE)
M.adjustFireLoss(-1.5*REM, FALSE)
M.adjustOxyLoss(-1.5*REM, FALSE)
M.adjustToxLoss(-1.5*REM, 0, TRUE) //heals TOXINLOVERs
. = 1
..()
@@ -1171,13 +1167,13 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M)
pH = 11
/datum/reagent/medicine/syndicate_nanites/on_mob_life(mob/living/carbon/M)
M.adjustBruteLoss(-5*REM, 0) //A ton of healing - this is a 50 telecrystal investment.
M.adjustFireLoss(-5*REM, 0)
M.adjustOxyLoss(-15, 0)
M.adjustToxLoss(-5*REM, 0)
M.adjustBruteLoss(-5*REM, FALSE) //A ton of healing - this is a 50 telecrystal investment.
M.adjustFireLoss(-5*REM, FALSE)
M.adjustOxyLoss(-15, FALSE)
M.adjustToxLoss(-5*REM, FALSE)
M.adjustOrganLoss(ORGAN_SLOT_BRAIN, -15*REM)
M.adjustCloneLoss(-3*REM, 0)
M.adjustStaminaLoss(-25*REM,0)
M.adjustCloneLoss(-3*REM, FALSE)
M.adjustStaminaLoss(-25*REM,FALSE)
if(M.blood_volume < (BLOOD_VOLUME_NORMAL*M.blood_ratio))
M.blood_volume += 40 // blood fall out man bad
..()
@@ -1191,13 +1187,13 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M)
pH = 11
/datum/reagent/medicine/lesser_syndicate_nanites/on_mob_life(mob/living/carbon/M)
M.adjustBruteLoss(-3*REM, 0) // hidden gold shh
M.adjustFireLoss(-3*REM, 0)
M.adjustOxyLoss(-15, 0)
M.adjustToxLoss(-3*REM, 0)
M.adjustBruteLoss(-3*REM, FALSE) // hidden gold shh
M.adjustFireLoss(-3*REM, FALSE)
M.adjustOxyLoss(-15, FALSE)
M.adjustToxLoss(-3*REM, FALSE)
M.adjustOrganLoss(ORGAN_SLOT_BRAIN, -15*REM)
M.adjustCloneLoss(-3*REM, 0)
M.adjustStaminaLoss(-20*REM,0)
M.adjustCloneLoss(-3*REM, FALSE)
M.adjustStaminaLoss(-20*REM,FALSE)
if(M.blood_volume < (BLOOD_VOLUME_NORMAL*M.blood_ratio))
M.blood_volume += 20 // blood fall out man bad
..()
@@ -1214,17 +1210,17 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M)
pH = 11.8
/datum/reagent/medicine/neo_jelly/on_mob_life(mob/living/carbon/M)
M.adjustBruteLoss(-1.5*REM, 0)
M.adjustFireLoss(-1.5*REM, 0)
M.adjustOxyLoss(-1.5*REM, 0)
M.adjustBruteLoss(-1.5*REM, FALSE)
M.adjustFireLoss(-1.5*REM, FALSE)
M.adjustOxyLoss(-1.5*REM, FALSE)
M.adjustToxLoss(-1.5*REM, 0, TRUE) //heals TOXINLOVERs
. = 1
..()
/datum/reagent/medicine/neo_jelly/overdose_process(mob/living/M)
M.adjustOxyLoss(2.6*REM, 0)
M.adjustBruteLoss(3.5*REM, 0)
M.adjustFireLoss(3.5*REM, 0)
M.adjustOxyLoss(2.6*REM, FALSE)
M.adjustBruteLoss(3.5*REM, FALSE)
M.adjustFireLoss(3.5*REM, FALSE)
..()
. = 1
@@ -1236,13 +1232,13 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M)
pH = 11
/datum/reagent/medicine/earthsblood/on_mob_life(mob/living/carbon/M)
M.adjustBruteLoss(-3 * REM, 0)
M.adjustFireLoss(-3 * REM, 0)
M.adjustOxyLoss(-15 * REM, 0)
M.adjustToxLoss(-3 * REM, 0, TRUE) //Heals TOXINLOVERS
M.adjustBruteLoss(-3 * REM, FALSE)
M.adjustFireLoss(-3 * REM, FALSE)
M.adjustOxyLoss(-15 * REM, FALSE)
M.adjustToxLoss(-3 * REM, FALSE, TRUE) //Heals TOXINLOVERS
M.adjustOrganLoss(ORGAN_SLOT_BRAIN, 2 * REM, 150) //This does, after all, come from ambrosia, and the most powerful ambrosia in existence, at that!
M.adjustCloneLoss(-1 * REM, 0)
M.adjustStaminaLoss(-13 * REM, 0)
M.adjustCloneLoss(-1 * REM, FALSE)
M.adjustStaminaLoss(-13 * REM, FALSE)
M.jitteriness = min(max(0, M.jitteriness + 3), 30)
M.druggy = min(max(0, M.druggy + 10), 15) //See above
..()
@@ -1250,7 +1246,7 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M)
/datum/reagent/medicine/earthsblood/overdose_process(mob/living/M)
M.hallucination = min(max(0, M.hallucination + 5), 60)
M.adjustToxLoss(8 * REM, 0, TRUE) //Hurts TOXINLOVERS
M.adjustToxLoss(8 * REM, FALSE, TRUE) //Hurts TOXINLOVERS
..()
. = 1
@@ -1305,8 +1301,7 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M)
/datum/reagent/medicine/changelingadrenaline/on_mob_life(mob/living/carbon/M as mob)
M.AdjustUnconscious(-20, 0)
M.AdjustStun(-20, 0)
M.AdjustKnockdown(-20, 0)
M.AdjustAllImmobility(-20, 0)
M.AdjustSleeping(-20, 0)
M.adjustStaminaLoss(-30, 0)
..()
@@ -1389,8 +1384,7 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M)
/datum/reagent/medicine/modafinil/on_mob_life(mob/living/carbon/M)
if(!overdosed) // We do not want any effects on OD
overdose_threshold = overdose_threshold + rand(-10,10)/10 // for extra fun
M.AdjustStun(-5, 0)
M.AdjustKnockdown(-5, 0)
M.AdjustAllImmobility(-5, 0)
M.AdjustUnconscious(-5, 0)
M.adjustStaminaLoss(-1*REM, 0)
M.Jitter(1)
@@ -1422,7 +1416,7 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M)
if(prob(20))
to_chat(M, "You have a sudden fit!")
M.emote("moan")
M.Knockdown(20, 1, 0) // you should be in a bad spot at this point unless epipen has been used
M.DefaultCombatKnockdown(20, 1, 0) // you should be in a bad spot at this point unless epipen has been used
if(81)
to_chat(M, "You feel too exhausted to continue!") // at this point you will eventually die unless you get charcoal
M.adjustOxyLoss(0.1*REM, 0)
@@ -13,7 +13,7 @@
shot_glass_icon_state = "shotglassred"
pH = 7.4
/datum/reagent/blood/reaction_mob(mob/living/L, method=TOUCH, reac_volume)
/datum/reagent/blood/reaction_mob(mob/living/L, method = TOUCH, reac_volume)
if(data && data["viruses"])
for(var/thing in data["viruses"])
var/datum/disease/D = thing
@@ -26,6 +26,18 @@
else //ingest, patch or inject
L.ForceContractDisease(D)
if(data["blood_type"] == "SY")
//Synthblood is very disgusting to bloodsuckers. They will puke it out to expel it, unless they have masquarade on
switch(reac_volume)
if(0 to 3)
disgust_bloodsucker(L, 3, FALSE, FALSE, FALSE)
if(3 to 6)
//If theres more than 8 units, they will start expelling it, even if they are masquarading.
disgust_bloodsucker(L, 5, FALSE, FALSE, TRUE)
else
//If they have too much in them, they will also puke out their blood.
disgust_bloodsucker(L, 7, -5, TRUE, TRUE)
if(iscarbon(L))
var/mob/living/carbon/C = L
var/blood_id = C.get_blood_id()
@@ -37,10 +49,8 @@
L.add_blood_DNA(list(data["blood_DNA"] = data["blood_type"]))
/datum/reagent/blood/on_mob_life(mob/living/carbon/C) //Because lethals are preferred over stamina. damnifino.
if((HAS_TRAIT(C, TRAIT_NOMARROW)))
return //We dont want vampires getting toxed from blood
var/blood_id = C.get_blood_id()
if((blood_id == /datum/reagent/blood || blood_id == /datum/reagent/blood/jellyblood))
if((blood_id in GLOB.blood_reagent_types) && !HAS_TRAIT(C, TRAIT_NOMARROW))
if(!data || !(data["blood_type"] in get_safe_blood(C.dna.blood_type))) //we only care about bloodtype here because this is where the poisoning should be
C.adjustToxLoss(rand(2,8)*REM, TRUE, TRUE) //forced to ensure people don't use it to gain beneficial toxin as slime person
..()
@@ -117,7 +127,7 @@
if(!istype(D, /datum/disease/advance))
preserve += D
data["viruses"] = preserve
return 1
return TRUE
/datum/reagent/blood/proc/get_diseases()
. = list()
@@ -142,6 +152,13 @@
taste_mult = 1.3
pH = 4
/datum/reagent/blood/tomato
data = list("donor"=null,"viruses"=null,"blood_DNA"=null, "bloodcolor" = BLOOD_COLOR_HUMAN, "blood_type"="SY","resistances"=null,"trace_chem"=null,"mind"=null,"ckey"=null,"gender"=null,"real_name"=null,"cloneable"=null,"factions"=null)
name = "Tomato Blood"
description = "This highly resembles blood, but it doesnt actually function like it, resembling more ketchup, with a more blood-like consistency."
taste_description = "sap" //Like tree sap?
pH = 7.45
/datum/reagent/blood/jellyblood/on_mob_life(mob/living/carbon/M)
if(prob(10))
if(M.dna?.species?.exotic_bloodtype != "GEL")
@@ -374,22 +391,21 @@
/datum/reagent/fuel/unholywater/on_mob_life(mob/living/carbon/M)
if(iscultist(M))
M.drowsyness = max(M.drowsyness-5, 0)
M.AdjustUnconscious(-20, 0)
M.AdjustStun(-40, 0)
M.AdjustKnockdown(-40, 0)
M.adjustStaminaLoss(-10, 0)
M.adjustToxLoss(-2, 0, TRUE)
M.adjustOxyLoss(-2, 0)
M.adjustBruteLoss(-2, 0)
M.adjustFireLoss(-2, 0)
M.AdjustUnconscious(-20, FALSE)
M.AdjustAllImmobility(-40, FALSE)
M.adjustStaminaLoss(-10, FALSE)
M.adjustToxLoss(-2, FALSE, TRUE)
M.adjustOxyLoss(-2, FALSE)
M.adjustBruteLoss(-2, FALSE)
M.adjustFireLoss(-2, FALSE)
if(ishuman(M) && M.blood_volume < (BLOOD_VOLUME_NORMAL*M.blood_ratio))
M.blood_volume += 3
else // Will deal about 90 damage when 50 units are thrown
M.adjustOrganLoss(ORGAN_SLOT_BRAIN, 3, 150)
M.adjustToxLoss(2, 0)
M.adjustFireLoss(2, 0)
M.adjustOxyLoss(2, 0)
M.adjustBruteLoss(2, 0)
M.adjustToxLoss(2, FALSE)
M.adjustFireLoss(2, FALSE)
M.adjustOxyLoss(2, FALSE)
M.adjustBruteLoss(2, FALSE)
holder.remove_reagent(type, 1)
return TRUE
@@ -401,8 +417,8 @@
/datum/reagent/hellwater/on_mob_life(mob/living/carbon/M)
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, 0)
M.adjustFireLoss(1, 0) //Hence the other damages... ain't I a bastard?
M.adjustToxLoss(1, FALSE)
M.adjustFireLoss(1, FALSE) //Hence the other damages... ain't I a bastard?
M.adjustOrganLoss(ORGAN_SLOT_BRAIN, 5, 150)
holder.remove_reagent(type, 1)
pH = 0.1
@@ -415,23 +431,23 @@
/datum/reagent/fuel/holyoil/on_mob_life(mob/living/carbon/M)
if(is_servant_of_ratvar(M))
M.drowsyness = max(M.drowsyness-5, 0)
M.AdjustUnconscious(-60, 0)
M.AdjustStun(-30, 0)
M.AdjustKnockdown(-70, 0)
M.adjustStaminaLoss(-15, 0)
M.adjustToxLoss(-5, 0, TRUE)
M.adjustOxyLoss(-3, 0)
M.adjustBruteLoss(-3, 0)
M.adjustFireLoss(-5, 0)
M.AdjustUnconscious(-60, FALSE)
M.AdjustAllImmobility(-30, FALSE)
M.AdjustKnockdown(-40, FALSE)
M.adjustStaminaLoss(-15, FALSE)
M.adjustToxLoss(-5, FALSE, TRUE)
M.adjustOxyLoss(-3, FALSE)
M.adjustBruteLoss(-3, FALSE)
M.adjustFireLoss(-5, FALSE)
if(iscultist(M))
M.AdjustUnconscious(1, 0)
M.AdjustStun(10, 0)
M.AdjustKnockdown(20, 0)
M.adjustStaminaLoss(15, 0)
M.AdjustUnconscious(1, FALSE)
M.AdjustAllImmobility(10, FALSE)
M.AdjustKnockdown(10, FALSE)
M.adjustStaminaLoss(15, FALSE)
else
M.adjustToxLoss(3, 0)
M.adjustOxyLoss(2, 0)
M.adjustStaminaLoss(10, 0)
M.adjustToxLoss(3, FALSE)
M.adjustOxyLoss(2, FALSE)
M.adjustStaminaLoss(10, FALSE)
holder.remove_reagent(type, 1)
return TRUE
@@ -584,7 +600,7 @@
return
to_chat(H, "<span class='warning'><b>You crumple in agony as your flesh wildly morphs into new forms!</b></span>")
H.visible_message("<b>[H]</b> falls to the ground and screams as [H.p_their()] skin bubbles and froths!") //'froths' sounds painful when used with SKIN.
H.Knockdown(60)
H.DefaultCombatKnockdown(60)
addtimer(CALLBACK(src, .proc/mutate, H), 30)
return
@@ -890,7 +906,7 @@
taste_mult = 0 // apparently tasteless.
/datum/reagent/mercury/on_mob_life(mob/living/carbon/M)
if(M.canmove && !isspaceturf(M.loc))
if(CHECK_MOBILITY(M, MOBILITY_MOVE) && !isspaceturf(M.loc))
step(M, pick(GLOB.cardinals))
if(prob(5))
M.emote(pick("twitch","drool","moan"))
@@ -970,7 +986,7 @@
pH = 11.3
/datum/reagent/lithium/on_mob_life(mob/living/carbon/M)
if(M.canmove && !isspaceturf(M.loc))
if(CHECK_MOBILITY(M, MOBILITY_MOVE) && !isspaceturf(M.loc))
step(M, pick(GLOB.cardinals))
if(prob(5))
M.emote(pick("twitch","drool","moan"))
@@ -227,8 +227,7 @@
/datum/reagent/teslium/energized_jelly/on_mob_life(mob/living/carbon/M)
if(isjellyperson(M))
shock_timer = 0 //immune to shocks
M.AdjustStun(-40, 0)
M.AdjustKnockdown(-40, 0)
M.AdjustAllImmobility(-40, 0)
M.AdjustUnconscious(-40, 0)
M.adjustStaminaLoss(-2, 0)
if(isluminescent(M))
@@ -539,7 +539,7 @@
var/picked_option = rand(1,3)
switch(picked_option)
if(1)
C.Knockdown(60, 0)
C.DefaultCombatKnockdown(60, 0)
. = TRUE
if(2)
C.losebreath += 10
@@ -678,7 +678,7 @@
/datum/reagent/toxin/curare/on_mob_life(mob/living/carbon/M)
if(current_cycle >= 11)
M.Knockdown(60, 0)
M.DefaultCombatKnockdown(60, 0)
M.adjustOxyLoss(1*REM, 0)
. = 1
..()
@@ -843,7 +843,7 @@
holder.remove_reagent(type, actual_metaboliztion_rate * M.metabolism_efficiency)
M.adjustToxLoss(actual_toxpwr*REM, 0)
if(prob(10))
M.Knockdown(20, 0)
M.DefaultCombatKnockdown(20, 0)
. = 1
..()
@@ -76,7 +76,7 @@
for(var/mob/living/carbon/C in get_hearers_in_view(round(multiplier/48,1),get_turf(holder.my_atom)))
if(iscultist(C))
to_chat(C, "<span class='userdanger'>The divine explosion sears you!</span>")
C.Knockdown(40)
C.DefaultCombatKnockdown(40)
C.adjust_fire_stacks(5)
C.IgniteMob()
..(holder, multiplier, T)
@@ -252,7 +252,7 @@
for(var/mob/living/carbon/C in get_hearers_in_view(range, location))
if(C.flash_act())
if(get_dist(C, location) < 4)
C.Knockdown(60)
C.DefaultCombatKnockdown(60)
else
C.Stun(100)
holder.remove_reagent(/datum/reagent/flash_powder, multiplier*3)
@@ -273,7 +273,7 @@
for(var/mob/living/carbon/C in get_hearers_in_view(range, location))
if(C.flash_act())
if(get_dist(C, location) < 4)
C.Knockdown(60)
C.DefaultCombatKnockdown(60)
else
C.Stun(100)
+16 -11
View File
@@ -123,35 +123,40 @@
if(thrown)
reagents.total_volume *= rand(5,10) * 0.1 //Not all of it makes contact with the target
var/mob/M = target
var/R
var/R = reagents.log_list()
target.visible_message("<span class='danger'>[M] has been splashed with something!</span>", \
"<span class='userdanger'>[M] has been splashed with something!</span>")
for(var/datum/reagent/A in reagents.reagent_list)
R += "[A.type] ([A.volume]),"
if(thrownby)
var/turf/TT = get_turf(target)
var/throwerstring
if(thrownby && thrown)
log_combat(thrownby, M, "splashed", R)
var/turf/AT = get_turf(thrownby)
throwerstring = " THROWN BY [key_name(thrownby)] at [AT] (AREACOORD(AT)]"
log_reagent("SPLASH: [src] mob SplashReagents() onto [key_name(target)] at [TT] ([AREACOORD(TT)])[throwerstring] - [R]")
reagents.reaction(target, TOUCH)
else if(bartender_check(target) && thrown)
visible_message("<span class='notice'>[src] lands onto the [target.name] without spilling a single drop.</span>")
visible_message("<span class='notice'>[src] lands without spilling a single drop.</span>")
transform = initial(transform)
addtimer(CALLBACK(src, .proc/ForceResetRotation), 1)
return
else
if(isturf(target) && reagents.reagent_list.len && thrownby)
log_combat(thrownby, target, "splashed (thrown) [english_list(reagents.reagent_list)]", "in [AREACOORD(target)]")
log_game("[key_name(thrownby)] splashed (thrown) [english_list(reagents.reagent_list)] on [target] in [AREACOORD(target)].")
message_admins("[ADMIN_LOOKUPFLW(thrownby)] splashed (thrown) [english_list(reagents.reagent_list)] on [target] in [ADMIN_VERBOSEJMP(target)].")
var/turf/T = get_turf(target)
var/throwerstring
if(thrownby && thrown)
var/turf/AT = get_turf(thrownby)
throwerstring = " THROWN BY [key_name(thrownby)] at [AT] ([AREACOORD(AT)])"
log_reagent("SPLASH - [src] object SplashReagents() onto [target] at [T] ([AREACOORD(T)])[throwerstring] - [reagents.log_list()]")
visible_message("<span class='notice'>[src] spills its contents all over [target].</span>")
reagents.reaction(target, TOUCH)
reagents.clear_reagents()
if(QDELETED(src))
return
reagents.clear_reagents()
//melts plastic beakers
/obj/item/reagent_containers/microwave_act(obj/machinery/microwave/M)
reagents.expose_temperature(1000)
@@ -89,7 +89,7 @@
blood_type = "BUG"
/obj/item/reagent_containers/blood/attackby(obj/item/I, mob/user, params)
if (istype(I, /obj/item/pen) || istype(I, /obj/item/toy/crayon))
if(istype(I, /obj/item/pen) || istype(I, /obj/item/toy/crayon))
if(!user.is_literate())
to_chat(user, "<span class='notice'>You scribble illegibly on the label of [src]!</span>")
return
@@ -107,25 +107,31 @@
else
return ..()
/obj/item/reagent_containers/blood/attack(mob/M, mob/user, def_zone)
if(user.a_intent == INTENT_HELP && reagents.total_volume > 0)
if (user != M)
to_chat(user, "<span class='notice'>You force [M] to drink from the [src]</span>")
user.visible_message("<span class='userdanger'>[user] forces [M] to drink from the [src].</span>")
if(!do_mob(user, M, 50))
/obj/item/reagent_containers/blood/attack(mob/living/carbon/C, mob/user, def_zone)
if(user.a_intent == INTENT_HELP && reagents.total_volume > 0 && iscarbon(C) && user.a_intent == INTENT_HELP)
if(C.is_mouth_covered())
to_chat(user, "<span class='notice'>You cant drink from the [src] while your mouth is covered.</span>")
return
if(user != C)
user.visible_message("<span class='danger'>[user] forces [C] to drink from the [src].</span>", \
"<span class='notice'>You force [C] to drink from the [src]</span>")
if(!do_mob(user, C, 50))
return
else
if(!do_mob(user, M, 10))
if(!do_mob(user, C, 10))
return
to_chat(user, "<span class='notice'>You take a sip from the [src].</span>")
user.visible_message("<span class='notice'>[user] puts the [src] up to their mouth.</span>")
if(reagents.total_volume <= 0) // Safety: In case you spam clicked the blood bag on yourself, and it is now empty (below will divide by zero)
return
var/gulp_size = 5
var/gulp_size = 3
var/fraction = min(gulp_size / reagents.total_volume, 1)
reagents.reaction(M, INGEST, fraction) //checkLiked(fraction, M) // Blood isn't food, sorry.
reagents.trans_to(M, gulp_size)
playsound(M.loc,'sound/items/drink.ogg', rand(10,50), 1)
reagents.reaction(C, INGEST, fraction) //checkLiked(fraction, M) // Blood isn't food, sorry.
reagents.trans_to(C, gulp_size)
reagents.remove_reagent(src, 2) //Inneficency, so hey, IVs are usefull.
playsound(C.loc,'sound/items/drink.ogg', rand(10, 50), TRUE)
return
..()
/obj/item/reagent_containers/blood/bluespace
@@ -133,3 +139,14 @@
desc = "Contains blood used for transfusion, this one has been made with bluespace technology to hold much more blood. Must be attached to an IV drip."
icon_state = "bsbloodpack"
volume = 600 //its a blood bath!
/obj/item/reagent_containers/blood/bluespace/attack(mob/living/carbon/C, mob/user, def_zone)
if(user.a_intent == INTENT_HELP)
if(user != C)
to_chat(user, "<span class='notice'>You can't force people to drink from the [src]. Nothing comes out from it.</span>")
return
else
to_chat(user, "<span class='notice'>You try to suck on the [src], but nothing comes out.</span>")
return
else
..()
@@ -29,20 +29,30 @@
message_admins("[ADMIN_LOOKUPFLW(thrownby)] splashed (thrown) [english_list(reagents.reagent_list)] on [target] at [ADMIN_VERBOSEJMP(target)].")
reagents.reaction(M, TOUCH)
log_combat(user, M, "splashed", R)
var/turf/UT = get_turf(user)
var/turf/MT = get_turf(M)
var/turf/OT = get_turf(target)
log_reagent("SPLASH: attack(target mob [key_name(M)] at [AREACOORD(MT)], from user [key_name(user)] at [AREACOORD(UT)], target object [target] at [AREACOORD(OT)]) - [R]")
reagents.clear_reagents()
else
var/self_fed = M == user
if(!self_fed)
M.visible_message("<span class='danger'>[user] attempts to feed something to [M].</span>", \
"<span class='userdanger'>[user] attempts to feed something to you.</span>")
log_combat(user, M, "is attempting to feed", reagents.log_list())
if(!do_mob(user, M))
return
if(!reagents || !reagents.total_volume)
return // The drink might be empty after the delay, such as by spam-feeding
var/turf/UT = get_turf(user) // telekenesis memes
var/turf/MT = get_turf(M)
M.visible_message("<span class='danger'>[user] feeds something to [M].</span>", "<span class='userdanger'>[user] feeds something to you.</span>")
log_combat(user, M, "fed", reagents.log_list())
log_reagent("INGESTION: FED BY: [key_name(user)] (loc [user.loc] at [AREACOORD(UT)]) -> [key_name(M)] (loc [M.loc] at [AREACOORD(MT)]) - [reagents.log_list()]")
else
var/turf/T = get_turf(user)
to_chat(user, "<span class='notice'>You swallow a gulp of [src].</span>")
log_reagent("INGESTION: SELF: [key_name(user)] (loc [user.loc] at [AREACOORD(T)]) - [reagents.log_list()]")
var/fraction = min(5/reagents.total_volume, 1)
reagents.reaction(M, INGEST, fraction)
addtimer(CALLBACK(reagents, /datum/reagents.proc/trans_to, M, 5, null, null, null, self_fed? "self swallowed" : "fed by [user]"), 5)
@@ -325,6 +335,8 @@
if (slot == SLOT_HEAD)
if(reagents.total_volume)
to_chat(user, "<span class='userdanger'>[src]'s contents spill all over you!</span>")
var/R = reagents.log_list()
log_reagent("SPLASH: [user] splashed [src] on their head via bucket/equipped(self, SLOT_HEAD) - [R]")
reagents.reaction(user, TOUCH)
reagents.clear_reagents()
reagent_flags = NONE
@@ -342,6 +354,14 @@
return
return ..()
/obj/item/reagent_containers/glass/bucket/wood
name = "wooden bucket"
desc = "It's a bucket made of wood."
icon_state = "bucket_wooden"
custom_materials = null
slot_flags = NONE
item_flags = NO_MAT_REDEMPTION
/obj/item/reagent_containers/glass/beaker/waterbottle
name = "bottle of water"
desc = "A bottle of water filled at an old Earth bottling facility."