diff --git a/code/__DEFINES/chemistry.dm b/code/__DEFINES/chemistry.dm index de7aa5398d5..c7412b08a98 100644 --- a/code/__DEFINES/chemistry.dm +++ b/code/__DEFINES/chemistry.dm @@ -100,8 +100,8 @@ #define INTOX_JUDGEIMP 0.03 #define INTOX_MUSCLEIMP 0.08 #define INTOX_REACTION 0.10 -#define INTOX_VOMIT 0.12 #define INTOX_BALANCE 0.15 +#define INTOX_VOMIT 0.15 #define INTOX_BLACKOUT 0.20 #define INTOX_CONSCIOUS 0.30 #define INTOX_DEATH 0.45 @@ -114,6 +114,9 @@ #define BASE_DIZZY 50 //Base dizziness from getting drunk. #define DIZZY_ADD_SCALE 15 //Amount added for every 0.01 percent over the JUDGEIMP limit +#define BASE_SLUR 5 //Base slurring from getting drunk. +#define SLUR_ADD_SCALE 10 //Amount added for every 0.01 percent over the REACTION limit + #define BASE_VOMIT_CHANCE 1 //Base chance #define VOMIT_CHANCE_SCALE 1 //Percent change added for every 0.01 percent over the VOMIT limit diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm index 27747190857..ed07cd302db 100644 --- a/code/game/objects/items/devices/scanners.dm +++ b/code/game/objects/items/devices/scanners.dm @@ -670,12 +670,12 @@ BREATH ANALYZER switch(bac) if(INTOX_JUDGEIMP to INTOX_MUSCLEIMP) additional_string = "\[LIGHTLY INTOXICATED\]" - if(INTOX_MUSCLEIMP to INTOX_VOMIT) + if(INTOX_MUSCLEIMP to INTOX_BALANCE) additional_string = "\[MODERATELY INTOXICATED\]" - if(INTOX_VOMIT to INTOX_BALANCE) - additional_string = SPAN_WARNING("\[HEAVILY INTOXICATED\]") - if(INTOX_BALANCE to INTOX_DEATH) - additional_string = SPAN_WARNING("\[ALCOHOL POISONING LIKELY\]") + if(INTOX_BALANCE to INTOX_BLACKOUT) + additional_string = "\[HEAVILY INTOXICATED\]" + if(INTOX_BLACKOUT to INTOX_DEATH) + additional_string = "\[ALCOHOL POISONING LIKELY\]" if(INTOX_DEATH to INFINITY) additional_string = SPAN_WARNING("\[DEATH IMMINENT\]") to_chat(user,"Blood Alcohol Content: [round(bac,0.01)] [additional_string]") diff --git a/code/modules/mob/living/carbon/human/intoxication.dm b/code/modules/mob/living/carbon/human/intoxication.dm index c0d8ee7ae71..32f3ad3efee 100644 --- a/code/modules/mob/living/carbon/human/intoxication.dm +++ b/code/modules/mob/living/carbon/human/intoxication.dm @@ -26,68 +26,81 @@ if(bac > INTOX_BUZZED*SR && bac < INTOX_MUSCLEIMP*SR) sprint_cost_factor += -0.1 - if(prob(5)) - to_chat(src, SPAN_NOTICE("You feel buzzed.")) + if(prob(3)) + to_chat(src, SPAN_GOOD(pick("You feel buzzed.","You feel good!","You feel less inhibited.","You feel relaxed."))) if(bac > INTOX_JUDGEIMP*SR) if (dizziness == 0) - to_chat(src, SPAN_NOTICE("You feel a little tipsy.")) + to_chat(src, SPAN_GOOD("You feel a little tipsy!")) var/target_dizziness = BASE_DIZZY + ((bac - INTOX_JUDGEIMP*SR)*DIZZY_ADD_SCALE*100) make_dizzy(target_dizziness - dizziness) if(bac > INTOX_MUSCLEIMP*SR && bac < INTOX_REACTION*SR) - slurring = max(slurring, 25) - if (prob(5)) - to_chat(src, SPAN_NOTICE("You feel drunk!")) + if (prob(3)) + to_chat(src, SPAN_GOOD(pick("You feel drunk!", "You feel great!", "Your inhibitions fall away...", "All your anxieties melt away."))) move_delay_mod += 2 sprint_cost_factor += 0.2 - if(bac > INTOX_REACTION*SR && bac < INTOX_BALANCE*SR) - if (prob(5)) - to_chat(src, SPAN_NOTICE("You feel absolutely smashed!")) + if(bac > INTOX_REACTION*SR) + if (prob(3) && bac < INTOX_BALANCE*SR) + to_chat(src, SPAN_GOOD(pick("You feel very drunk!", "You feel reckless!", "You don't have a care in the world!", "You feel amazing!"))) if (confused == 0) to_chat(src, SPAN_WARNING("You feel uncoordinated and unsteady on your feet!")) + var/target_slurring = BASE_SLUR + ((bac - INTOX_REACTION*SR)*SLUR_ADD_SCALE*100) + slurring = max(slurring, target_slurring) confused = max(confused, 10) - slurring = max(slurring, 50) + eye_blurry = max(eye_blurry, 10) + move_delay_mod += 2 + sprint_cost_factor += 0.2 - if(bac > INTOX_VOMIT*SR) - slurring = max(slurring, 75) - if (life_tick % 4 == 1) - var/chance = BASE_VOMIT_CHANCE + ((bac - INTOX_VOMIT*SR)*VOMIT_CHANCE_SCALE*100) - if (prob(chance)) + if(bac > INTOX_VOMIT*SR)//Vomiting starts here. 1% chance every 10 ticks, escalating with increased intoxication (1% per 0.01 BAC) + if (prob(3)) + to_chat(src, SPAN_WARNING("You feel a little nauseous...")) + if (life_tick % 10 == 1) + var/vomitchance = BASE_VOMIT_CHANCE + ((bac - INTOX_VOMIT*SR)*VOMIT_CHANCE_SCALE*100) + if (prob(vomitchance)) delayed_vomit() - if(bac > INTOX_BALANCE*SR) - slurring = max(slurring, 100) - if (prob(5)) - to_chat(src, SPAN_NOTICE("You feel the room spinning...")) - if (life_tick % 4 == 1 && !lying && !buckled_to && prob(10)) + if(bac > INTOX_BALANCE*SR)//Can no longer walk properly. Will fall to the ground very often. Good drunkeness messages replaced by alcohol dysphoria and confusion + var/fallchance = ((bac - INTOX_BALANCE*SR)*100) + if (prob(3)) + to_chat(src, SPAN_WARNING(pick("You feel the room spinning...", "It's hard to think...", "You can't see straight...", "You feel absolutely hammered!"))) + if (life_tick % 4 == 1 && !lying && !buckled_to && prob(fallchance)) src.visible_message(SPAN_WARNING("[src] loses balance and falls to the ground!"),SPAN_WARNING("You lose balance and fall to the ground!")) Paralyse(3 SECONDS) - if(bac > INTOX_CONSCIOUS*SR) - slurring = max(slurring, 90) - src.visible_message(SPAN_DANGER("[src] loses consciousness!"),SPAN_DANGER("You lose consciousness!")) - paralysis = max(paralysis, 60 SECONDS) - sleeping = max(sleeping, 60 SECONDS) - adjustBrainLoss(5,30) - add_chemical_effect(CE_HEPATOTOXIC, 3) - else if(bac > INTOX_BLACKOUT*SR) - slurring = max(slurring, 80) - src.visible_message(SPAN_DANGER("[src] blacks out!"),SPAN_DANGER("You black out!")) - paralysis = max(paralysis, 20 SECONDS) - sleeping = max(sleeping, 20 SECONDS) - adjustBrainLoss(3,10) - add_chemical_effect(CE_HEPATOTOXIC, 1) - else if(prob(10)) + if(prob(33) && stat == CONSCIOUS && !src.reagents.has_reagent(/singleton/reagent/ethylredoxrazine)) slurring = max(slurring, 70) - to_chat(src,SPAN_WARNING("You decide that you like the ground and spend a few seconds to rest.")) + to_chat(src,SPAN_GOOD("You decide that you like the ground and spend a few seconds to rest.")) sleeping = max(sleeping, 6 SECONDS) adjustBrainLoss(1,5) - if (bac > INTOX_DEATH*SR && !src.reagents.has_reagent(/singleton/reagent/ethylredoxrazine)) //Death usually occurs here - add_chemical_effect(CE_HEPATOTOXIC, 10) - adjustOxyLoss(3,100) - adjustBrainLoss(1,50) + if(bac > INTOX_BLACKOUT*SR && bac < INTOX_CONSCIOUS*SR && !src.reagents.has_reagent(/singleton/reagent/ethylredoxrazine))//Alcohol poisoing causing short blackouts. + if (prob(3) && bac < INTOX_BLACKOUT*SR) + to_chat(src, SPAN_GOOD(pick("You feel very drunk!", "You feel invincible!", "You don't have a care in the world!", "You feel amazing!"))) + if (life_tick % 4 == 1 && prob(5) && stat == CONSCIOUS) + src.visible_message(SPAN_DANGER("[src] blacks out!"),SPAN_DANGER("You black out!")) + paralysis = max(paralysis, 6 SECONDS) + sleeping = max(sleeping, 6 SECONDS) + adjustBrainLoss(3,10) + + if(bac > INTOX_CONSCIOUS*SR && !src.reagents.has_reagent(/singleton/reagent/ethylredoxrazine)) //Life threatening alcohol poisoning causing coma and possible loss of breathing. + if (stat == CONSCIOUS)//Put them into a coma + src.visible_message(SPAN_DANGER("[src] loses consciousness!"),SPAN_DANGER("You lose consciousness!")) + paralysis = max(paralysis, 60 SECONDS) + sleeping = max(sleeping, 60 SECONDS) + adjustBrainLoss(5,30) + if(losebreath && losebreath < 15)//Patient's breathing is suppressed. If already not breathing, don't start again. Stay not breathing. + losebreath++ + if(prob(1) && life_tick % 10 == 1 && stat == UNCONSCIOUS && bac < INTOX_DEATH*SR)//2.5% chance every minute, roughly, to stop breathing while unconscious. + if (!losebreath)//To prevent this message from being spammed. + src.visible_message(SPAN_DANGER("[src] stops breathing!"),SPAN_DANGER("You stop breathing!")) + losebreath += 15 + + if (bac > INTOX_DEATH*SR && !src.reagents.has_reagent(/singleton/reagent/ethylredoxrazine)) //Fatal alcohol poisoning. Central nervous system no longer able to promote unconscious breathing + if (!losebreath)//To prevent this message from being spammed. + src.visible_message(SPAN_DANGER("[src] stops breathing!"),SPAN_DANGER("You stop breathing!")) + if(losebreath < 15)//Stop breathing + losebreath++ /mob/living/carbon/human/proc/is_drunk() var/SR = species.ethanol_resistance diff --git a/code/modules/mob/living/carbon/human/species/station/skrell/skrell.dm b/code/modules/mob/living/carbon/human/species/station/skrell/skrell.dm index d11c080fc61..b4cc61a095d 100644 --- a/code/modules/mob/living/carbon/human/species/station/skrell/skrell.dm +++ b/code/modules/mob/living/carbon/human/species/station/skrell/skrell.dm @@ -77,7 +77,7 @@ base_color = "#006666" reagent_tag = IS_SKRELL - ethanol_resistance = 0.5//gets drunk faster + ethanol_resistance = 0.6//gets drunk faster taste_sensitivity = TASTE_SENSITIVE stamina = 80 diff --git a/code/modules/mob/living/carbon/human/species/station/tajara/tajara.dm b/code/modules/mob/living/carbon/human/species/station/tajara/tajara.dm index 5aaae91b4e1..1473992c679 100644 --- a/code/modules/mob/living/carbon/human/species/station/tajara/tajara.dm +++ b/code/modules/mob/living/carbon/human/species/station/tajara/tajara.dm @@ -41,7 +41,7 @@ num_alternate_languages = 2 secondary_langs = list(LANGUAGE_SIIK_MAAS, LANGUAGE_SIIK_TAJR, LANGUAGE_YA_SSA) name_language = LANGUAGE_SIIK_MAAS - ethanol_resistance = 0.8//Gets drunk a little faster + ethanol_resistance = 0.9//Gets drunk a little faster rarity_value = 2 economic_modifier = 7 selectable_pronouns = list(MALE, FEMALE) diff --git a/code/modules/mob/living/carbon/human/species/station/tajara/tajaran_subspecies.dm b/code/modules/mob/living/carbon/human/species/station/tajara/tajaran_subspecies.dm index 66ea0909796..4d69a29f61b 100644 --- a/code/modules/mob/living/carbon/human/species/station/tajara/tajaran_subspecies.dm +++ b/code/modules/mob/living/carbon/human/species/station/tajara/tajaran_subspecies.dm @@ -62,7 +62,7 @@ standing_jump_range = 3 stamina = 80 // As opposed to 90 brute_mod = 1.3 // More Brute Damage - ethanol_resistance = 0.6 // Species Default 0.8 + ethanol_resistance = 0.7 // Species Default 0.9 maneuvers = list( /singleton/maneuver/leap/tajara/msai diff --git a/code/modules/mob/living/carbon/human/species/station/unathi/unathi.dm b/code/modules/mob/living/carbon/human/species/station/unathi/unathi.dm index 3a44508f154..18d70ea5e3c 100644 --- a/code/modules/mob/living/carbon/human/species/station/unathi/unathi.dm +++ b/code/modules/mob/living/carbon/human/species/station/unathi/unathi.dm @@ -34,7 +34,7 @@ grab_mod = 1.25 // Huge, usually have horns resist_mod = 2.5 // Arguably our strongest organic species - ethanol_resistance = 0.4 + ethanol_resistance = 0.8 taste_sensitivity = TASTE_SENSITIVE economic_modifier = 7 diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Dispenser.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Dispenser.dm index 77a115e2739..dcf77d1dc43 100644 --- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Dispenser.dm +++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Dispenser.dm @@ -167,26 +167,7 @@ return /singleton/reagent/alcohol/affect_ingest(mob/living/carbon/M, alien, removed, var/datum/reagents/holder) - - if(alien != IS_DIONA) - M.intoxication += (strength / 100) * removed * 6 - - if (druggy != 0) - M.druggy = max(M.druggy, druggy) - - if (halluci) - M.hallucination = max(M.hallucination, halluci) - - if(caffeine) - M.add_chemical_effect(CE_PULSE, caffeine*2) - M.add_up_to_chemical_effect(CE_SPEEDBOOST, 1) - - if (adj_temp > 0 && M.bodytemperature < targ_temp) // 310 is the normal bodytemp. 310.055 - M.bodytemperature = min(targ_temp, M.bodytemperature + (adj_temp * TEMPERATURE_DAMAGE_COEFFICIENT)) - if (adj_temp < 0 && M.bodytemperature > targ_temp) - M.bodytemperature = min(targ_temp, M.bodytemperature - (adj_temp * TEMPERATURE_DAMAGE_COEFFICIENT)) - - if(ishuman(M)) + if(alien != IS_DIONA && ishuman(M)) var/has_valid_aug = FALSE var/obj/item/organ/internal/augment/ethanol_burner/aug = M.internal_organs_by_name[BP_AUG_ETHANOL_BURNER] if(aug && !aug.is_broken()) @@ -194,13 +175,31 @@ var/obj/item/organ/internal/parasite/P = M.internal_organs_by_name["blackkois"] if(!has_valid_aug && (alien == IS_VAURCA || (istype(P) && P.stage >= 3)))//Vaurca are damaged instead of getting nutrients, but they can still get drunk - M.adjustToxLoss(1.5 * removed * (strength / 100)) - else + M.adjustToxLoss(12 * removed * (strength / 100)) + + if (!has_valid_aug && alien == IS_UNATHI) //unathi are poisoned by alcohol as well + M.adjustToxLoss(12 * removed * (strength / 100)) + if(!M.lastpuke) + to_chat(M, SPAN_WARNING("Your gizzard lurches as the alcohol burns its way down your gullet!"))//Make it clear that you should not be drinking this. + var/mob/living/carbon/human/H = M + H.delayed_vomit() + + if (has_valid_aug | alien != IS_UNATHI) + M.intoxication += (strength / 100) * removed * 6 + if (druggy != 0) + M.druggy = max(M.druggy, druggy) + if (halluci) + M.hallucination = max(M.hallucination, halluci) + if(caffeine) + M.add_chemical_effect(CE_PULSE, caffeine*2) + M.add_up_to_chemical_effect(CE_SPEEDBOOST, 1) M.adjustNutritionLoss(-nutriment_factor * removed) M.adjustHydrationLoss(-hydration_factor * removed) - if (!has_valid_aug && alien == IS_UNATHI)//unathi are poisoned by alcohol as well - M.adjustToxLoss(1.5 * removed * (strength / 100)) + if (adj_temp > 0 && M.bodytemperature < targ_temp) // 310 is the normal bodytemp. 310.055 + M.bodytemperature = min(targ_temp, M.bodytemperature + (adj_temp * TEMPERATURE_DAMAGE_COEFFICIENT)) + if (adj_temp < 0 && M.bodytemperature > targ_temp) + M.bodytemperature = min(targ_temp, M.bodytemperature - (adj_temp * TEMPERATURE_DAMAGE_COEFFICIENT)) /singleton/reagent/alcohol/touch_obj(var/obj/O, var/amount, var/datum/reagents/holder) if(istype(O, /obj/item/paper)) @@ -243,7 +242,7 @@ description = "A fairly harmless alcohol that has intoxicating effects on certain species." reagent_state = LIQUID color = "#404030" - ingest_met = REM * 0.25 //Extremely slow metabolic rate means the liver will generally purge it faster than it can intoxicate you + ingest_met = REM * 2.5 flammability_divisor = 7 //Butanol is a bit less flammable than ethanol taste_description = "alcohol" @@ -257,19 +256,26 @@ distillation_point = T0C + 117.7 /singleton/reagent/alcohol/butanol/affect_ingest(var/mob/living/carbon/human/M, var/alien, var/removed, var/datum/reagents/holder) - if(!istype(M)) - return - var/obj/item/organ/internal/parasite/P = M.internal_organs_by_name["blackkois"] - if((alien == IS_VAURCA) || (istype(P) && P.stage >= 3)) - M.adjustToxLoss(removed * (strength / 100)) - else + if (alien == IS_UNATHI) + M.intoxication += (strength / 100) * removed * 6 + if (druggy != 0) + M.druggy = max(M.druggy, druggy) + if (halluci) + M.hallucination = max(M.hallucination, halluci) + if(caffeine) + M.add_chemical_effect(CE_PULSE, caffeine*2) + M.add_up_to_chemical_effect(CE_SPEEDBOOST, 1) + M.adjustNutritionLoss(-nutriment_factor * removed) M.adjustHydrationLoss(-hydration_factor * removed) - if (alien == IS_UNATHI) - ingest_met = initial(ingest_met)*9 - - ..() + if (adj_temp > 0 && M.bodytemperature < targ_temp) // 310 is the normal bodytemp. 310.055 + M.bodytemperature = min(targ_temp, M.bodytemperature + (adj_temp * TEMPERATURE_DAMAGE_COEFFICIENT)) + if (adj_temp < 0 && M.bodytemperature > targ_temp) + M.bodytemperature = min(targ_temp, M.bodytemperature - (adj_temp * TEMPERATURE_DAMAGE_COEFFICIENT)) + else + strength = 0 //Only Unathi are intoxicated by butanol. + ..() /singleton/reagent/hydrazine name = "Hydrazine" diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm index 3bfe0d3d99f..edae4f064cc 100644 --- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm +++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm @@ -2727,7 +2727,7 @@ if(!istype(M)) return if(alien == IS_VAURCA) - M.intoxication += (strength / 100) * removed * 3.5 + M.intoxication += (strength / 100) * removed * 6 /singleton/reagent/drink/toothpaste/cold_gate name = "Cold Gate" diff --git a/html/changelogs/crosarius-alcoholismfixes.yml b/html/changelogs/crosarius-alcoholismfixes.yml new file mode 100644 index 00000000000..b6339a7b0a9 --- /dev/null +++ b/html/changelogs/crosarius-alcoholismfixes.yml @@ -0,0 +1,16 @@ +author: Crosarius + +delete-after: True + +changes: + - refactor: "Fixed up alcohol and butanol affect_ingest()" + - qol: "Generally buffed intoxication resistances for Unathi, Tajara, and Skrell, to compensate for recent changes to alcohol potency." + - qol: "Alcohol poisoning now no longer kills you by destroying your liver. Instead, it causes the patient to fall into a coma, and stop breathing." + - qol: "Better messages for drunkeness." + - qol: "Ethylredoxrazine now prevents people from falling into comas from alcohol toxicity alltogether." + - qol: "Vomiting from being intoxicated now happens much less often, and at a higher level of intoxication." + - qol: "Being drunk enough to cause vomiting now has a pulsing message to go along with other drunkeness messages." + - bugfix: "You can now correctly black out or fall into an alcoholic coma while buckled to a bed or laying down." + - bugfix: "Unathi are no longer poisoned by butanol." + - bugfix: "Unathi are now correctly poisoned by alcohol" + - bugfix: "Non-Unathi are no longer intoxicated by butanol."