diff --git a/code/__DEFINES/mob_defines.dm b/code/__DEFINES/mob_defines.dm
index cd8fd19f730..6327218322d 100644
--- a/code/__DEFINES/mob_defines.dm
+++ b/code/__DEFINES/mob_defines.dm
@@ -72,7 +72,10 @@
#define PULSE_FAST 3 //90-120 bpm
#define PULSE_2FAST 4 //>120 bpm
#define PULSE_THREADY 5 //occurs during hypovolemic shock
-//feel free to add shit to lists below
+
+// Cirrhosis defines
+#define CIRRHOSIS_MILD 1
+#define CIRRHOSIS_SEVERE 2
//Reagent Metabolization flags, defines the type of reagents that affect this mob
#define PROCESS_ORG (1<<0) //Only processes reagents with "ORGANIC" or "ORGANIC | SYNTHETIC"
diff --git a/code/datums/status_effects/debuffs.dm b/code/datums/status_effects/debuffs.dm
index d2a747a6dd9..2af91340c83 100644
--- a/code/datums/status_effects/debuffs.dm
+++ b/code/datums/status_effects/debuffs.dm
@@ -412,6 +412,8 @@
/datum/status_effect/transient/drunkenness
id = "drunkenness"
var/alert_thrown = FALSE
+ /// Cached actual strength so we can read it out
+ var/cached_strength
// the number of seconds of the status effect required for each effect to kick in.
#define THRESHOLD_SLUR 60 SECONDS
@@ -460,6 +462,8 @@
liver_multiplier = L.alcohol_intensity
actual_strength *= liver_multiplier
+ cached_strength = actual_strength
+
// THRESHOLD_SLUR (60 SECONDS)
if(actual_strength >= THRESHOLD_SLUR)
owner.Slur(actual_strength)
@@ -491,14 +495,16 @@
if(actual_strength >= THRESHOLD_COLLAPSE && prob(0.1))
owner.emote("collapse")
do_sparks(3, 1, src)
+
// THRESHOLD_FAINT (180 SECONDS)
- if(actual_strength >= THRESHOLD_FAINT && prob(0.1))
+ if(actual_strength >= THRESHOLD_FAINT && prob(0.2))
owner.Paralyse(10 SECONDS / alcohol_resistance)
owner.Drowsy(60 SECONDS / alcohol_resistance)
if(L)
L.receive_damage(1, TRUE)
if(!is_robot)
owner.adjustToxLoss(1)
+
// THRESHOLD_BRAIN_DAMAGE (240 SECONDS)
if(actual_strength >= THRESHOLD_BRAIN_DAMAGE && prob(0.1))
owner.adjustBrainLoss(1)
diff --git a/code/game/machinery/adv_med.dm b/code/game/machinery/adv_med.dm
index 450234717df..362abfbee3b 100644
--- a/code/game/machinery/adv_med.dm
+++ b/code/game/machinery/adv_med.dm
@@ -363,6 +363,10 @@
if(E == occupant.get_organ(lung_organ?.parent_organ) && occupant.is_lung_ruptured())
organData["lungRuptured"] = TRUE
+ var/obj/item/organ/internal/liver = occupant.get_int_organ(/obj/item/organ/internal/liver)
+ if(E == occupant.get_organ(liver?.parent_organ) && occupant.has_liver_cirrhosis())
+ organData["liverCirrhosis"] = TRUE
+
if(E.status & ORGAN_INT_BLEEDING)
organData["internalBleeding"] = TRUE
@@ -503,9 +507,15 @@
if(e.status & ORGAN_INT_BLEEDING)
ailments |= "Internal Bleeding"
+
var/obj/item/organ/internal/lung_organ = occupant.get_int_organ_by_datum(ORGAN_DATUM_LUNGS)
if(e == occupant.get_organ(lung_organ?.parent_organ) && occupant.is_lung_ruptured())
ailments |= "Lung Ruptured"
+
+ var/obj/item/organ/internal/liver = occupant.get_int_organ(/obj/item/organ/internal/liver)
+ if(e == occupant.get_organ(liver?.parent_organ) && occupant.has_liver_cirrhosis())
+ ailments |= "Liver cirrhosis"
+
if(e.status & ORGAN_SPLINTED)
ailments |= "Splinted"
if(e.status & ORGAN_BROKEN)
diff --git a/code/game/objects/items/devices/bodyanalyzer.dm b/code/game/objects/items/devices/bodyanalyzer.dm
index 236ba85eee5..6ab63806591 100644
--- a/code/game/objects/items/devices/bodyanalyzer.dm
+++ b/code/game/objects/items/devices/bodyanalyzer.dm
@@ -211,10 +211,14 @@
var/splint = ""
var/internal_bleeding = ""
var/lung_ruptured = ""
+ var/liver_cirrhosis = ""
+
if(e.status & ORGAN_INT_BLEEDING)
internal_bleeding = "
Internal bleeding"
if(istype(e, /obj/item/organ/external/chest) && target.is_lung_ruptured())
lung_ruptured = "Lung ruptured:"
+ if(istype(e, /obj/item/organ/external/groin) && target.has_liver_cirrhosis())
+ liver_cirrhosis = "Liver cirrhosis:"
if(e.status & ORGAN_SPLINTED)
splint = "Splinted:"
if(e.status & ORGAN_BROKEN)
@@ -248,7 +252,7 @@
imp += "Unknown body present:"
if(!AN && !open && !infected && !imp)
AN = "None:"
- dat += "
'+(t?e:_(e,!0))+"\n":""+(t?e:_(e,!0))+"\n"}},{key:"blockquote",value:function(e){return"\n".concat(e,"\n")}},{key:"html",value:function(e){return e}},{key:"heading",value:function(e,n,t,r){if(this.options.headerIds){var i=this.options.headerPrefix+r.slug(t);return"
".concat(e,"
\n")}},{key:"table",value:function(e,n){return n&&(n="".concat(n,"")),"".concat(e,"")}},{key:"br",value:function(){return this.options.xhtml?"