diff --git a/code/modules/reagents/chemistry/holder.dm b/code/modules/reagents/chemistry/holder.dm index 8635626209..d53e4dfcbe 100644 --- a/code/modules/reagents/chemistry/holder.dm +++ b/code/modules/reagents/chemistry/holder.dm @@ -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)) @@ -347,6 +349,9 @@ /datum/reagents/proc/remove_addiction(datum/reagent/R) to_chat(my_atom, "You feel like you've gotten over your need for [R.name].") 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) diff --git a/code/modules/reagents/chemistry/reagents.dm b/code/modules/reagents/chemistry/reagents.dm index bd6c37973f..384a113b27 100644 --- a/code/modules/reagents/chemistry/reagents.dm +++ b/code/modules/reagents/chemistry/reagents.dm @@ -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, "You feel like you took too much of [name]!") 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, "You feel like having some [name] right about now.") - 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, "You feel like you need [name]. You just can't get enough.") - 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, "You have an intense craving for [name].") - 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, "You're not feeling good at all! You really need some [name].") - return /proc/pretty_string_from_reagent_list(list/reagent_list) //Convert reagent list to a printable string for logging etc diff --git a/code/modules/reagents/reagent_containers.dm b/code/modules/reagents/reagent_containers.dm index c178aad717..9c6ea3deb4 100644 --- a/code/modules/reagents/reagent_containers.dm +++ b/code/modules/reagents/reagent_containers.dm @@ -67,7 +67,6 @@ else amount_per_transfer_from_this = possible_transfer_amounts[1] to_chat(user, "[src]'s transfer amount is now [amount_per_transfer_from_this] units.") - return /obj/item/reagent_containers/attack(mob/M, mob/user, def_zone) if(user.a_intent == INTENT_HARM) @@ -123,28 +122,34 @@ 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("[M] has been splashed with something!", \ "[M] has been splashed with something!") - 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("[src] lands onto the [target.name] without spilling a single drop.") 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("[src] spills its contents all over [target].") reagents.reaction(target, TOUCH) if(QDELETED(src)) diff --git a/code/modules/reagents/reagent_containers/glass.dm b/code/modules/reagents/reagent_containers/glass.dm index 23f149ade4..78c335ce14 100644 --- a/code/modules/reagents/reagent_containers/glass.dm +++ b/code/modules/reagents/reagent_containers/glass.dm @@ -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("[user] attempts to feed something to [M].", \ "[user] attempts to feed something to you.") + 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("[user] feeds something to [M].", "[user] feeds something to you.") 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, "You swallow a gulp of [src].") + 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, "[src]'s contents spill all over you!") + 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