From 75356dd68b38ac27f8a9e71ba41164058265fe78 Mon Sep 17 00:00:00 2001
From: SECBATON GRIFFON <87321915+SECBATON-GRIFFON@users.noreply.github.com>
Date: Wed, 30 Oct 2024 16:53:08 +0000
Subject: [PATCH 01/21] base code, now to find a way to add ways to set any of
this
---
.../gamemode/factions/bloodcult/bloodcult_runes.dm | 2 +-
code/datums/gamemode/factions/legacy_cult/ritual.dm | 2 +-
code/game/machinery/doors/airlock_electronics.dm | 2 +-
code/game/machinery/doors/door.dm | 2 +-
code/game/machinery/machinery.dm | 4 ++--
code/game/objects/items/crayons.dm | 2 +-
code/game/objects/items/devices/flashlight.dm | 2 +-
code/game/objects/structures/vehicles/vehicle.dm | 2 +-
code/modules/assembly/mousetrap.dm | 4 ++--
code/modules/mob/living/carbon/human/examine.dm | 2 +-
code/modules/mob/living/carbon/human/human.dm | 2 +-
code/modules/mob/living/carbon/human/human_damage.dm | 4 +++-
.../mob/living/carbon/human/life/handle_disabilities.dm | 8 ++++----
code/modules/mob/living/carbon/human/say.dm | 2 +-
code/modules/mob/living/living.dm | 2 +-
code/modules/mob/living/say.dm | 6 +++---
code/modules/organs/organ_internal.dm | 9 +++++++++
code/modules/power/apc.dm | 4 ++--
18 files changed, 36 insertions(+), 25 deletions(-)
diff --git a/code/datums/gamemode/factions/bloodcult/bloodcult_runes.dm b/code/datums/gamemode/factions/bloodcult/bloodcult_runes.dm
index f1a43e925235..24bf2f106041 100644
--- a/code/datums/gamemode/factions/bloodcult/bloodcult_runes.dm
+++ b/code/datums/gamemode/factions/bloodcult/bloodcult_runes.dm
@@ -385,7 +385,7 @@ var/list/rune_appearances_cache = list()
to_chat(user, "You don't have the ability to perform rituals without voicing the incantations, there has to be some way...")
return
- if(!word1 || !word2 || !word3 || prob(user.getBrainLoss()))
+ if(!word1 || !word2 || !word3 || prob(user.getBrainLoss("intelligence")))
return fizzle(user)
add_hiddenprint(user)
diff --git a/code/datums/gamemode/factions/legacy_cult/ritual.dm b/code/datums/gamemode/factions/legacy_cult/ritual.dm
index 97ec8723569e..4faabcde9f7d 100644
--- a/code/datums/gamemode/factions/legacy_cult/ritual.dm
+++ b/code/datums/gamemode/factions/legacy_cult/ritual.dm
@@ -85,7 +85,7 @@ var/runedec = 0 // Rune cap ?
if(user.wear_mask?.is_muzzle)
to_chat(user, "You are unable to speak the words of the rune.")
return
- if(!word1 || !word2 || !word3 || prob(user.getBrainLoss()))
+ if(!word1 || !word2 || !word3 || prob(user.getBrainLoss("intelligence")))
return fizzle()
// if(!src.visibility)
// src.visibility=1
diff --git a/code/game/machinery/doors/airlock_electronics.dm b/code/game/machinery/doors/airlock_electronics.dm
index 5d06ca66b720..fe7e902ca76b 100644
--- a/code/game/machinery/doors/airlock_electronics.dm
+++ b/code/game/machinery/doors/airlock_electronics.dm
@@ -47,7 +47,7 @@
return
if(ishuman(user))
var/mob/living/carbon/human/H = user
- if(H.getBrainLoss() >= 60)
+ if(H.getBrainLoss("intelligence") >= 60)
return
interact(user)
diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm
index 84b4cd49c534..8f9cc1c2b7a8 100644
--- a/code/game/machinery/doors/door.dm
+++ b/code/game/machinery/doors/door.dm
@@ -146,7 +146,7 @@ var/list/all_doors = list()
/obj/machinery/door/proc/headbutt_check(mob/user, var/stun_time = 0, var/knockdown_time = 0, var/damage = 0) //This is going to be an airlock proc until someone makes headbutting a more official thing
if(prob(HEADBUTT_PROBABILITY) && density && ishuman(user))
var/mob/living/carbon/human/H = user
- if(H.getBrainLoss() >= BRAINLOSS_FOR_HEADBUTT)
+ if(H.getBrainLoss("coordination") >= BRAINLOSS_FOR_HEADBUTT)
playsound(src, 'sound/effects/bang.ogg', 25, 1)
H.visible_message("[user] headbutts the airlock.")
if(!istype(H.head, /obj/item/clothing/head/helmet))
diff --git a/code/game/machinery/machinery.dm b/code/game/machinery/machinery.dm
index ea142e0d0082..d27715f02292 100644
--- a/code/game/machinery/machinery.dm
+++ b/code/game/machinery/machinery.dm
@@ -536,10 +536,10 @@ Class Procs:
*/
if (ishuman(user) && !ignore_brain_damage)
var/mob/living/carbon/human/H = user
- if(H.getBrainLoss() >= 60)
+ if(H.getBrainLoss("intelligence") >= 60)
visible_message("[H] stares cluelessly at [src] and drools.")
return 1
- else if(prob(H.getBrainLoss()) || (H.undergoing_hypothermia() == MODERATE_HYPOTHERMIA && prob(25)))
+ else if(prob(H.getBrainLoss("intelligence")) || (H.undergoing_hypothermia() == MODERATE_HYPOTHERMIA && prob(25)))
to_chat(user, "You momentarily forget how to use [src].")
return 1
diff --git a/code/game/objects/items/crayons.dm b/code/game/objects/items/crayons.dm
index 5918e9253e71..704103f318bc 100644
--- a/code/game/objects/items/crayons.dm
+++ b/code/game/objects/items/crayons.dm
@@ -127,7 +127,7 @@ var/global/list/all_graffitis = list(
var/list/graffitis = list("Random" = "graffiti") + all_graffitis
if(istype(user,/mob/living/carbon/human))
var/mob/living/carbon/human/M=user
- if(M.getBrainLoss() >= 60)
+ if(M.getBrainLoss("intelligence") >= 60)
graffitis = list(
"Cancel"="cancel",
"Dick"="dick[rand(1,3)]",
diff --git a/code/game/objects/items/devices/flashlight.dm b/code/game/objects/items/devices/flashlight.dm
index bc9d5a1846a7..a764c825ee8f 100644
--- a/code/game/objects/items/devices/flashlight.dm
+++ b/code/game/objects/items/devices/flashlight.dm
@@ -73,7 +73,7 @@
add_fingerprint(user)
if(on && user.zone_sel.selecting == "eyes")
- if((clumsy_check(user) || user.getBrainLoss() >= 60) && prob(50)) //too dumb to use flashlight properly
+ if((clumsy_check(user) || user.getBrainLoss("intelligence") >= 60) && prob(50)) //too dumb to use flashlight properly
return ..() //just hit them in the head
if (!user.dexterity_check())
diff --git a/code/game/objects/structures/vehicles/vehicle.dm b/code/game/objects/structures/vehicles/vehicle.dm
index 49ce75264813..b1a32990bf6c 100644
--- a/code/game/objects/structures/vehicles/vehicle.dm
+++ b/code/game/objects/structures/vehicles/vehicle.dm
@@ -140,7 +140,7 @@
if(mykey && mykey != W)
to_chat(user, "\The [src] is paired to a different key.")
return
- if(((M_CLUMSY in user.mutations) || user.getBrainLoss() >= 60) && prob(50))
+ if(((M_CLUMSY in user.mutations) || user.getBrainLoss("coordination") >= 60) && prob(50))
to_chat(user, "You try to insert \the [W] to \the [src]'s ignition but you miss the slot!")
return
if(user.drop_item(W, src))
diff --git a/code/modules/assembly/mousetrap.dm b/code/modules/assembly/mousetrap.dm
index 84df1c6bc9e6..f130b4170306 100644
--- a/code/modules/assembly/mousetrap.dm
+++ b/code/modules/assembly/mousetrap.dm
@@ -56,7 +56,7 @@
if(!armed)
to_chat(user, "You arm [src].")
else
- if(((user.getBrainLoss() >= 60 || clumsy_check(user)) && prob(50)))
+ if(((user.getBrainLoss("coordination") >= 60 || clumsy_check(user)) && prob(50)))
var/datum/organ/external/OE = user.get_active_hand_organ()
@@ -72,7 +72,7 @@
/obj/item/device/assembly/mousetrap/attack_hand(mob/living/user as mob)
if(armed)
- if(((user.getBrainLoss() >= 60 || (M_CLUMSY in user.mutations))) && prob(50))
+ if(((user.getBrainLoss("coordination") >= 60 || (M_CLUMSY in user.mutations))) && prob(50))
var/datum/organ/external/OE = user.get_active_hand_organ()
triggered(user, OE.name)
user.visible_message("[user] accidentally sets off [src], breaking their fingers.", \
diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm
index b652749ee9cd..bed116ece642 100644
--- a/code/modules/mob/living/carbon/human/examine.dm
+++ b/code/modules/mob/living/carbon/human/examine.dm
@@ -410,7 +410,7 @@
msg += "[src] has \a [implant] sticking out of [t_his] flesh!\n"
if(!is_destroyed["head"])
- if(getBrainLoss() >= 60)
+ if(getBrainLoss("intelligence") >= 60)
msg += "[t_He] [t_has] a stupid expression on [t_his] face.\n"
if(distance <= 3)
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index a1f359263383..c88942d998ed 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -1768,7 +1768,7 @@ var/datum/record_organ //This is just a dummy proc, not storing any variables he
var/obj/item/clothing/gloves/G = gloves
if(!G.dexterity_check())//some gloves might make it harder to interact with complex technologies, or fit your index in a gun's trigger
return FALSE
- if(getBrainLoss() >= 60)
+ if(getBrainLoss("intelligence") >= 60)
if(!(reagents.has_reagent(METHYLIN) || is_dexterous))//methylin and the is_dextrous var supercede brain damage, but not uncomfortable gloves
return FALSE
return TRUE//humans are dexterous enough by default
diff --git a/code/modules/mob/living/carbon/human/human_damage.dm b/code/modules/mob/living/carbon/human/human_damage.dm
index e044be3f99a4..17e0b9ebd2f2 100644
--- a/code/modules/mob/living/carbon/human/human_damage.dm
+++ b/code/modules/mob/living/carbon/human/human_damage.dm
@@ -18,7 +18,7 @@
ChangeToHusk()
return
-/mob/living/carbon/human/getBrainLoss()
+/mob/living/carbon/human/getBrainLoss(var/type)
var/res = brainloss
if(species && species.has_organ["brain"])
var/datum/organ/internal/brain/sponge = internal_organs_by_name["brain"]
@@ -30,6 +30,8 @@
if (sponge.is_broken())
res += 50
+ if(type && (type in sponge.specific_damages))
+ res += sponge.specific_damages[type]
res = min(res,maxHealth*2)
return res
return 0
diff --git a/code/modules/mob/living/carbon/human/life/handle_disabilities.dm b/code/modules/mob/living/carbon/human/life/handle_disabilities.dm
index a6a3e4bfa6f9..753bcdf0da62 100644
--- a/code/modules/mob/living/carbon/human/life/handle_disabilities.dm
+++ b/code/modules/mob/living/carbon/human/life/handle_disabilities.dm
@@ -67,7 +67,7 @@
if(prob(10))
Jitter(10)
- if(getBrainLoss() >= 60 && prob(3))
+ if(getBrainLoss("speech") >= 60 && prob(3))
say(pick("IM A PONY NEEEEEEIIIIIIIIIGH", \
"without oxigen blob don't evoluate?", \
"CAPTAINS A COMDOM", \
@@ -118,13 +118,13 @@
"I AM BASTE", \
"TEH TRAITOR THEY KILL PEEPLE BUT I RESPAWN!!!", \
"whats a keeper"))
- else if(getBrainLoss() >= 60 && prob(3))
+ else if(getBrainLoss("intelligence") >= 60 && prob(3))
emote("drool")
- if(getBrainLoss() > 50 && prob(1.5))
+ if(getBrainLoss("motor") > 50 && prob(1.5))
if(canmove)
to_chat(src, "Your legs won't respond properly, you fall down.")
Knockdown(3)
- else if(getBrainLoss() > 35 && prob(1.5))
+ else if(getBrainLoss("motor") > 35 && prob(1.5))
if(get_active_hand())
to_chat(src, "Your hand won't respond properly, you drop what you're holding.")
drop_item()
diff --git a/code/modules/mob/living/carbon/human/say.dm b/code/modules/mob/living/carbon/human/say.dm
index 1a0313a19189..88bccbb72f21 100644
--- a/code/modules/mob/living/carbon/human/say.dm
+++ b/code/modules/mob/living/carbon/human/say.dm
@@ -20,7 +20,7 @@
return "stammers, [text]";
if(isliving(src))
var/mob/living/L = src
- if (L.getBrainLoss() >= 60)
+ if (L.getBrainLoss("speech") >= 60)
return "gibbers, [text]";
var/ending = copytext(text, length(text))
if (ending == "?")
diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm
index a895e9cf3090..2112755f3ede 100644
--- a/code/modules/mob/living/living.dm
+++ b/code/modules/mob/living/living.dm
@@ -327,7 +327,7 @@
return 0 //godmode
cloneloss = amount
-/mob/living/proc/getBrainLoss()
+/mob/living/proc/getBrainLoss(var/type)
return brainloss
/mob/living/proc/adjustBrainLoss(var/amount)
diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm
index 80de0a3fd13e..f2cd3be4b0c9 100644
--- a/code/modules/mob/living/say.dm
+++ b/code/modules/mob/living/say.dm
@@ -519,7 +519,7 @@ var/list/headset_modes = list(
for(var/obj/item/I in get_all_slots() + held_items)
I.affect_speech(speech, src)
- if(getBrainLoss() >= 60)
+ if(getBrainLoss("speech") >= 60)
if(braindamagespeechcooldown)
speech.message = null
emote("gibber")
@@ -648,7 +648,7 @@ var/list/headset_modes = list(
/mob/living/say_quote()
if (stuttering)
return "stammers, [text]"
- if (getBrainLoss() >= 60)
+ if (getBrainLoss("speech") >= 60)
return "gibbers, [text]"
return ..()
@@ -659,7 +659,7 @@ var/list/headset_modes = list(
/mob/living/get_spoken_verb(var/msg)
if (stuttering)
return "stammers"
- if (getBrainLoss() >= 60)
+ if (getBrainLoss("speech") >= 60)
return "gibbers"
return ..()
diff --git a/code/modules/organs/organ_internal.dm b/code/modules/organs/organ_internal.dm
index 5648f898f2f6..752b81e4b637 100644
--- a/code/modules/organs/organ_internal.dm
+++ b/code/modules/organs/organ_internal.dm
@@ -206,12 +206,21 @@
//All the internal organs without specific code to them are below
//Hopefully this will be filled in soon ?
+var/static/list/partstobraindamagetype = list(
+ "Cerebellum" = "motor",
+ "Frontal lobe" = "coordination",
+ "Broca's area" = "speech",
+ "Amygdala" = "memory",
+ "Temporal lobe" = "intelligence"
+)
+
/datum/organ/internal/brain
name = "brain"
parent_organ = LIMB_HEAD
organ_type = "brain"
removed_type = /obj/item/organ/internal/brain
vital = 1
+ var/list/specific_damages = list("motor" = 0,"coordination" = 0,"speech" = 0,"memory" = 0,"intelligence" = 0)
/datum/organ/internal/brain/ash
removed_type = /obj/item/organ/internal/brain/ash
diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm
index eae3d3087ff4..d786413269ba 100644
--- a/code/modules/power/apc.dm
+++ b/code/modules/power/apc.dm
@@ -947,11 +947,11 @@
var/mob/living/carbon/human/H = user
if (istype(H))
- if(H.getBrainLoss() >= 60)
+ if(H.getBrainLoss("intelligence") >= 60)
for(var/mob/M in viewers(src, null))
to_chat(M, "[H] stares cluelessly at [src] and drools.")
return 0
- else if(prob(H.getBrainLoss()))
+ else if(prob(H.getBrainLoss("intelligence")))
to_chat(user, "You momentarily forget how to use [src].")
return 0
return 1
From caadf7907fe5ae3481cce03288b9f8d503973956 Mon Sep 17 00:00:00 2001
From: SECBATON GRIFFON <87321915+SECBATON-GRIFFON@users.noreply.github.com>
Date: Wed, 30 Oct 2024 16:54:30 +0000
Subject: [PATCH 02/21] gonna leave this unused
---
code/modules/organs/organ_internal.dm | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/code/modules/organs/organ_internal.dm b/code/modules/organs/organ_internal.dm
index 752b81e4b637..19a7f7a216a9 100644
--- a/code/modules/organs/organ_internal.dm
+++ b/code/modules/organs/organ_internal.dm
@@ -210,7 +210,6 @@ var/static/list/partstobraindamagetype = list(
"Cerebellum" = "motor",
"Frontal lobe" = "coordination",
"Broca's area" = "speech",
- "Amygdala" = "memory",
"Temporal lobe" = "intelligence"
)
@@ -220,7 +219,7 @@ var/static/list/partstobraindamagetype = list(
organ_type = "brain"
removed_type = /obj/item/organ/internal/brain
vital = 1
- var/list/specific_damages = list("motor" = 0,"coordination" = 0,"speech" = 0,"memory" = 0,"intelligence" = 0)
+ var/list/specific_damages = list("motor" = 0,"coordination" = 0,"speech" = 0,"intelligence" = 0)
/datum/organ/internal/brain/ash
removed_type = /obj/item/organ/internal/brain/ash
From 27895224200d4f133536edae7e2d153ce645ab1e Mon Sep 17 00:00:00 2001
From: SECBATON GRIFFON <87321915+SECBATON-GRIFFON@users.noreply.github.com>
Date: Wed, 30 Oct 2024 17:13:35 +0000
Subject: [PATCH 03/21] adds the surgery for it now!
---
.../mob/living/carbon/human/human_damage.dm | 8 +++++
code/modules/mob/living/living.dm | 1 +
code/modules/organs/organ_internal.dm | 7 ----
code/modules/surgery/organs_internal.dm | 34 +++++++++++++++----
4 files changed, 36 insertions(+), 14 deletions(-)
diff --git a/code/modules/mob/living/carbon/human/human_damage.dm b/code/modules/mob/living/carbon/human/human_damage.dm
index 17e0b9ebd2f2..0018359e884a 100644
--- a/code/modules/mob/living/carbon/human/human_damage.dm
+++ b/code/modules/mob/living/carbon/human/human_damage.dm
@@ -132,6 +132,14 @@
return
..()
+// the following heals the compartmentalised stuff in surgery
+/*/mob/living/carbon/human/adjustBrainLoss(var/amount)
+ if(..() && amount < 0 && species && species.has_organ["brain"])
+ var/datum/organ/internal/brain/sponge = internal_organs_by_name["brain"]
+ if(sponge)
+ for(var/damage in sponge.specific_damages)
+ sponge.specific_damages[damage] = max(sponge.specific_damages[damage] + (amount * brain_damage_modifier), 0)*/
+
/mob/living/carbon/human/adjustCloneLoss(var/amount)
..()
diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm
index 2112755f3ede..2f18a36ce3dc 100644
--- a/code/modules/mob/living/living.dm
+++ b/code/modules/mob/living/living.dm
@@ -338,6 +338,7 @@
return 0
brainloss = min(max(brainloss + (amount * brain_damage_modifier), 0),(maxHealth*2))
+ return 1
/mob/living/proc/setBrainLoss(var/amount)
if(status_flags & GODMODE)
diff --git a/code/modules/organs/organ_internal.dm b/code/modules/organs/organ_internal.dm
index 19a7f7a216a9..47b763a7bc4d 100644
--- a/code/modules/organs/organ_internal.dm
+++ b/code/modules/organs/organ_internal.dm
@@ -206,13 +206,6 @@
//All the internal organs without specific code to them are below
//Hopefully this will be filled in soon ?
-var/static/list/partstobraindamagetype = list(
- "Cerebellum" = "motor",
- "Frontal lobe" = "coordination",
- "Broca's area" = "speech",
- "Temporal lobe" = "intelligence"
-)
-
/datum/organ/internal/brain
name = "brain"
parent_organ = LIMB_HEAD
diff --git a/code/modules/surgery/organs_internal.dm b/code/modules/surgery/organs_internal.dm
index d58dc872f28b..9513624c7220 100644
--- a/code/modules/surgery/organs_internal.dm
+++ b/code/modules/surgery/organs_internal.dm
@@ -253,6 +253,17 @@
)
duration = 9 SECONDS
+ var/cutverb = "separate"
+ var/cutverbed = "separated"
+ var/brain_damagetype
+
+var/static/list/partstobraindamagetype = list(
+ "Brain stem (sever this organ)" = "remove",
+ "Cerebellum" = "motor",
+ "Frontal lobe" = "coordination",
+ "Broca's area" = "speech",
+ "Temporal lobe" = "intelligence"
+)
/datum/surgery_step/internal/detatch_organ/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
@@ -274,24 +285,33 @@
target.op_stage.current_organ = organ_to_remove
var/datum/organ/internal/I = target.internal_organs_by_name[target.op_stage.current_organ]
+ if(istype(I,/datum/organ/internal/brain))
+ var/datum/organ/internal/brain/B = I
+ var/part_to_cut = input(user, "Which part of this brain to cut?") as null|anything in partstobraindamagetype
+ if(part_to_cut != "remove")
+ brain_damagetype = part_to_cut
return ..() && organ_to_remove && I && istype(I) && I.CanRemove(target, user)
/datum/surgery_step/internal/detatch_organ/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
var/datum/organ/external/affected = target.get_organ(target_zone)
- user.visible_message("[user] starts to separate [target]'s [target.op_stage.current_organ] with \the [tool].", \
- "You start to separate [target]'s [target.op_stage.current_organ] with \the [tool]." )
+ user.visible_message("[user] starts to [cutverb] [target]'s [target.op_stage.current_organ] with \the [tool].", \
+ "You start to [cutverb] [target]'s [target.op_stage.current_organ] with \the [tool]." )
target.custom_pain("The pain in your [affected.display_name] is living hell!",1, scream=TRUE)
..()
/datum/surgery_step/internal/detatch_organ/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
- user.visible_message("[user] has separated [target]'s [target.op_stage.current_organ] with \the [tool]." , \
- "You have separated [target]'s [target.op_stage.current_organ] with \the [tool].")
+ user.visible_message("[user] has [cutverbed] [target]'s [target.op_stage.current_organ] with \the [tool]." , \
+ "You have [cutverbed] [target]'s [target.op_stage.current_organ] with \the [tool].")
var/datum/organ/internal/I = target.internal_organs_by_name[target.op_stage.current_organ]
- if(I && istype(I) && I.CanRemove(target, user, quiet=1))
- I.Remove(target, user)
- I.status |= ORGAN_CUT_AWAY
+ if(I && istype(I))
+ if(brain_damagetype && istype(I,/datum/organ/internal/brain))
+ var/datum/organ/internal/brain/sponge = I
+ sponge.specific_damages[brain_damagetype] = rand(61,65)
+ else if(I.CanRemove(target, user, quiet=1))
+ I.Remove(target, user)
+ I.status |= ORGAN_CUT_AWAY
/datum/surgery_step/internal/detatch_organ/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
var/datum/organ/external/affected = target.get_organ(target_zone)
From b94b5f9b82389f1e86c97453a83a39412446d91e Mon Sep 17 00:00:00 2001
From: SECBATON GRIFFON <87321915+SECBATON-GRIFFON@users.noreply.github.com>
Date: Wed, 30 Oct 2024 17:15:54 +0000
Subject: [PATCH 04/21] tool quality affects amount
---
code/modules/surgery/organs_internal.dm | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/code/modules/surgery/organs_internal.dm b/code/modules/surgery/organs_internal.dm
index 9513624c7220..b73f0c95395b 100644
--- a/code/modules/surgery/organs_internal.dm
+++ b/code/modules/surgery/organs_internal.dm
@@ -308,7 +308,7 @@ var/static/list/partstobraindamagetype = list(
if(I && istype(I))
if(brain_damagetype && istype(I,/datum/organ/internal/brain))
var/datum/organ/internal/brain/sponge = I
- sponge.specific_damages[brain_damagetype] = rand(61,65)
+ sponge.specific_damages[brain_damagetype] = rand(61,65) * (allowed_tools[tool.type]/100)
else if(I.CanRemove(target, user, quiet=1))
I.Remove(target, user)
I.status |= ORGAN_CUT_AWAY
From 813455a507faca371d1df50b4ef2ce05b433193c Mon Sep 17 00:00:00 2001
From: SECBATON GRIFFON <87321915+SECBATON-GRIFFON@users.noreply.github.com>
Date: Wed, 30 Oct 2024 17:29:10 +0000
Subject: [PATCH 05/21] body scanner info
---
code/game/machinery/adv_med.dm | 6 +++++-
code/modules/mob/living/carbon/human/human_damage.dm | 11 +++++++++++
2 files changed, 16 insertions(+), 1 deletion(-)
diff --git a/code/game/machinery/adv_med.dm b/code/game/machinery/adv_med.dm
index e9ad6e63d1f4..1a4858e62b99 100644
--- a/code/game/machinery/adv_med.dm
+++ b/code/game/machinery/adv_med.dm
@@ -392,6 +392,7 @@
"disabilities" = H.sdisabilities,
"tg_diseases_list" = H.viruses,
"lung_ruptured" = H.is_lung_ruptured(),
+ "brain_issues" = H.format_brain_issues(),
"external_organs" = H.organs.Copy(),
"internal_organs" = H.internal_organs.Copy(),
"blood_type" = H.dna.b_type,
@@ -487,6 +488,7 @@
var/lung_ruptured = ""
var/e_cancer = ""
var/bone_strengthened = ""
+ var/brain_issues = ""
dat += "
"
@@ -496,6 +498,8 @@
break
if(istype(e, /datum/organ/external/chest) && occ["lung_ruptured"])
lung_ruptured = "Lung ruptured:"
+ if(istype(e, /datum/organ/external/head))
+ brain_issues = occ["brain_issues"]
if(e.status & ORGAN_SPLINTED)
splint = "Splinted:"
if(e.status & ORGAN_BLEEDING)
@@ -553,7 +557,7 @@
if(e.status & ORGAN_DESTROYED)
dat += "[e.display_name] | - | - | Not Found | "
else
- dat += "[e.display_name] | [e.burn_dam] | [e.brute_dam] | [robot][bled][AN][splint][open][infected][imp][e_cancer][internal_bleeding][lung_ruptured][bone_strengthened] | "
+ dat += "[e.display_name] | [e.burn_dam] | [e.brute_dam] | [robot][bled][AN][splint][open][infected][imp][e_cancer][internal_bleeding][lung_ruptured][bone_strengthened][brain_issues] | "
dat += "
"
var/list/organs_to_list = list(
diff --git a/code/modules/mob/living/carbon/human/human_damage.dm b/code/modules/mob/living/carbon/human/human_damage.dm
index 0018359e884a..d0b05974917f 100644
--- a/code/modules/mob/living/carbon/human/human_damage.dm
+++ b/code/modules/mob/living/carbon/human/human_damage.dm
@@ -36,6 +36,17 @@
return res
return 0
+/mob/living/carbon/human/format_brain_issues()
+ var/datum/organ/internal/brain/B = internal_organs_by_name["brain"]
+ if(B)
+ var/list/issues = list()
+ for(var/damage in B.specific_damages)
+ if(B.specific_damages[damage] > 0)
+ issues += get_key_by_element(partstobraindamagetype,damage)
+ if(issues.len)
+ return "Brain cut on [english_list(issues)]"
+ return ""
+
//These procs fetch a cumulative total damage from all organs
/mob/living/carbon/human/getBruteLoss(var/ignore_inorganic = FALSE)
var/amount = 0
From 7ea7122e2ed257ff9f9e48d6e82c852b7f8e4414 Mon Sep 17 00:00:00 2001
From: SECBATON GRIFFON <87321915+SECBATON-GRIFFON@users.noreply.github.com>
Date: Wed, 30 Oct 2024 17:34:53 +0000
Subject: [PATCH 06/21] fix
---
code/modules/mob/living/carbon/human/human_damage.dm | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/code/modules/mob/living/carbon/human/human_damage.dm b/code/modules/mob/living/carbon/human/human_damage.dm
index d0b05974917f..548828eea6e9 100644
--- a/code/modules/mob/living/carbon/human/human_damage.dm
+++ b/code/modules/mob/living/carbon/human/human_damage.dm
@@ -36,7 +36,7 @@
return res
return 0
-/mob/living/carbon/human/format_brain_issues()
+/mob/living/carbon/human/proc/format_brain_issues()
var/datum/organ/internal/brain/B = internal_organs_by_name["brain"]
if(B)
var/list/issues = list()
From bbfb593e5e6c4fa7d4cf0f7cf6e4f97256da50ef Mon Sep 17 00:00:00 2001
From: SECBATON GRIFFON <87321915+SECBATON-GRIFFON@users.noreply.github.com>
Date: Wed, 30 Oct 2024 17:37:06 +0000
Subject: [PATCH 07/21] makes this used
---
code/modules/surgery/organs_internal.dm | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/code/modules/surgery/organs_internal.dm b/code/modules/surgery/organs_internal.dm
index b73f0c95395b..6f03e1f6070b 100644
--- a/code/modules/surgery/organs_internal.dm
+++ b/code/modules/surgery/organs_internal.dm
@@ -287,6 +287,10 @@ var/static/list/partstobraindamagetype = list(
var/datum/organ/internal/I = target.internal_organs_by_name[target.op_stage.current_organ]
if(istype(I,/datum/organ/internal/brain))
var/datum/organ/internal/brain/B = I
+ var/list/partstodamage = partstobraindamagetype.Copy()
+ for(var/damage in B.specific_damages)
+ if(B.specific_damages[damage] >= 100)
+ partstodamage -= get_element_by_key(partstobraindamagetype,damage)
var/part_to_cut = input(user, "Which part of this brain to cut?") as null|anything in partstobraindamagetype
if(part_to_cut != "remove")
brain_damagetype = part_to_cut
From 9430422d28323469504d2ff91ea39ead203bb68b Mon Sep 17 00:00:00 2001
From: SECBATON GRIFFON <87321915+SECBATON-GRIFFON@users.noreply.github.com>
Date: Wed, 30 Oct 2024 17:37:47 +0000
Subject: [PATCH 08/21] more
---
code/modules/surgery/organs_internal.dm | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/code/modules/surgery/organs_internal.dm b/code/modules/surgery/organs_internal.dm
index 6f03e1f6070b..fe833f86b3ad 100644
--- a/code/modules/surgery/organs_internal.dm
+++ b/code/modules/surgery/organs_internal.dm
@@ -290,9 +290,9 @@ var/static/list/partstobraindamagetype = list(
var/list/partstodamage = partstobraindamagetype.Copy()
for(var/damage in B.specific_damages)
if(B.specific_damages[damage] >= 100)
- partstodamage -= get_element_by_key(partstobraindamagetype,damage)
- var/part_to_cut = input(user, "Which part of this brain to cut?") as null|anything in partstobraindamagetype
- if(part_to_cut != "remove")
+ partstodamage -= get_key_by_element(partstobraindamagetype,damage)
+ var/part_to_cut = input(user, "Which part of this brain to cut?") as null|anything in partstodamage
+ if(part_to_cut && part_to_cut != "remove")
brain_damagetype = part_to_cut
return ..() && organ_to_remove && I && istype(I) && I.CanRemove(target, user)
From 5a263a69c27aa35a61a269b73e9a5df2093dc05d Mon Sep 17 00:00:00 2001
From: SECBATON GRIFFON <87321915+SECBATON-GRIFFON@users.noreply.github.com>
Date: Wed, 30 Oct 2024 17:39:26 +0000
Subject: [PATCH 09/21] sanity
---
code/modules/surgery/organs_internal.dm | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/code/modules/surgery/organs_internal.dm b/code/modules/surgery/organs_internal.dm
index fe833f86b3ad..09a2d159f75d 100644
--- a/code/modules/surgery/organs_internal.dm
+++ b/code/modules/surgery/organs_internal.dm
@@ -289,7 +289,7 @@ var/static/list/partstobraindamagetype = list(
var/datum/organ/internal/brain/B = I
var/list/partstodamage = partstobraindamagetype.Copy()
for(var/damage in B.specific_damages)
- if(B.specific_damages[damage] >= 100)
+ if(B.specific_damages[damage] >= target.maxHealth)
partstodamage -= get_key_by_element(partstobraindamagetype,damage)
var/part_to_cut = input(user, "Which part of this brain to cut?") as null|anything in partstodamage
if(part_to_cut && part_to_cut != "remove")
@@ -312,7 +312,7 @@ var/static/list/partstobraindamagetype = list(
if(I && istype(I))
if(brain_damagetype && istype(I,/datum/organ/internal/brain))
var/datum/organ/internal/brain/sponge = I
- sponge.specific_damages[brain_damagetype] = rand(61,65) * (allowed_tools[tool.type]/100)
+ sponge.specific_damages[brain_damagetype] = min(rand(61,65) * (allowed_tools[tool.type]/100),target.maxHealth)
else if(I.CanRemove(target, user, quiet=1))
I.Remove(target, user)
I.status |= ORGAN_CUT_AWAY
From 8e426c772495e961d0a41c6940343a22628c21aa Mon Sep 17 00:00:00 2001
From: SECBATON GRIFFON <87321915+SECBATON-GRIFFON@users.noreply.github.com>
Date: Wed, 30 Oct 2024 17:39:43 +0000
Subject: [PATCH 10/21] proper
---
code/modules/surgery/organs_internal.dm | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/code/modules/surgery/organs_internal.dm b/code/modules/surgery/organs_internal.dm
index 09a2d159f75d..bf8fd95725dc 100644
--- a/code/modules/surgery/organs_internal.dm
+++ b/code/modules/surgery/organs_internal.dm
@@ -312,7 +312,7 @@ var/static/list/partstobraindamagetype = list(
if(I && istype(I))
if(brain_damagetype && istype(I,/datum/organ/internal/brain))
var/datum/organ/internal/brain/sponge = I
- sponge.specific_damages[brain_damagetype] = min(rand(61,65) * (allowed_tools[tool.type]/100),target.maxHealth)
+ sponge.specific_damages[brain_damagetype] += min(rand(61,65) * (allowed_tools[tool.type]/100),target.maxHealth)
else if(I.CanRemove(target, user, quiet=1))
I.Remove(target, user)
I.status |= ORGAN_CUT_AWAY
From c3c9f1d39b1d4f01c495e5adb6ad13a7b55a6a57 Mon Sep 17 00:00:00 2001
From: SECBATON GRIFFON <87321915+SECBATON-GRIFFON@users.noreply.github.com>
Date: Wed, 30 Oct 2024 17:46:18 +0000
Subject: [PATCH 11/21] more sanity
---
code/modules/surgery/organs_internal.dm | 13 +++++++++++--
1 file changed, 11 insertions(+), 2 deletions(-)
diff --git a/code/modules/surgery/organs_internal.dm b/code/modules/surgery/organs_internal.dm
index bf8fd95725dc..e63d0b05e3e7 100644
--- a/code/modules/surgery/organs_internal.dm
+++ b/code/modules/surgery/organs_internal.dm
@@ -292,8 +292,17 @@ var/static/list/partstobraindamagetype = list(
if(B.specific_damages[damage] >= target.maxHealth)
partstodamage -= get_key_by_element(partstobraindamagetype,damage)
var/part_to_cut = input(user, "Which part of this brain to cut?") as null|anything in partstodamage
- if(part_to_cut && part_to_cut != "remove")
- brain_damagetype = part_to_cut
+ if(part_to_cut && part_to_cut != "Brain stem (sever this organ)")
+ brain_damagetype = partstodamage[part_to_cut]
+ cutverb = "make an incision on"
+ cutverbed = "made an incision on"
+ else
+ brain_damagetype = null
+ cutverb = "separate"
+ cutverbed = "separated"
+ else
+ cutverb = "separate"
+ cutverbed = "separated"
return ..() && organ_to_remove && I && istype(I) && I.CanRemove(target, user)
/datum/surgery_step/internal/detatch_organ/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
From 8b4c4abc06f659f3fbf0610cef19d3952294c3d7 Mon Sep 17 00:00:00 2001
From: SECBATON GRIFFON <87321915+SECBATON-GRIFFON@users.noreply.github.com>
Date: Wed, 30 Oct 2024 17:56:54 +0000
Subject: [PATCH 12/21] lets this heal them
---
code/modules/surgery/organs_internal.dm | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/code/modules/surgery/organs_internal.dm b/code/modules/surgery/organs_internal.dm
index e63d0b05e3e7..780095df8b86 100644
--- a/code/modules/surgery/organs_internal.dm
+++ b/code/modules/surgery/organs_internal.dm
@@ -130,6 +130,10 @@
if(I)
I.status &= ~ORGAN_BROKEN
I.status &= ~ORGAN_SPLINTED
+ if(istype(I,/datum/organ/internal/brain))
+ var/datum/organ/internal/brain/B = I
+ for(var/damage in B.specific_damages)
+ B.specific_damages[damage] = 0
/datum/surgery_step/internal/fix_organ/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
From 5c1bb674907e4e267a5798654c586008b82a20de Mon Sep 17 00:00:00 2001
From: SECBATON GRIFFON <87321915+SECBATON-GRIFFON@users.noreply.github.com>
Date: Wed, 30 Oct 2024 18:35:04 +0000
Subject: [PATCH 13/21] allows this to pass checks
---
code/modules/surgery/organs_internal.dm | 18 ++++++++++++++++++
1 file changed, 18 insertions(+)
diff --git a/code/modules/surgery/organs_internal.dm b/code/modules/surgery/organs_internal.dm
index 780095df8b86..d274e8af69c7 100644
--- a/code/modules/surgery/organs_internal.dm
+++ b/code/modules/surgery/organs_internal.dm
@@ -78,6 +78,15 @@
else
has_damaged_organic_organ = 1
break
+ if(istype(I,/datum/organ/internal/brain))
+ var/datum/organ/internal/brain/B = I
+ for(var/damage in B.specific_damages)
+ if(B.specific_damages[damage] > 0)
+ if(I.robotic >= 2)
+ has_damaged_robot_organ = 1
+ else
+ has_damaged_organic_organ = 1
+ break
if(..())
if(!has_damaged_organic_organ && has_damaged_robot_organ)
to_chat(user, "You cannot fix robotic organs with this tool.")
@@ -184,6 +193,15 @@
else
has_damaged_organic_organ = 1
break
+ if(istype(I,/datum/organ/internal/brain))
+ var/datum/organ/internal/brain/B = I
+ for(var/damage in B.specific_damages)
+ if(B.specific_damages[damage] > 0)
+ if(I.robotic >= 2)
+ has_damaged_robot_organ = 1
+ else
+ has_damaged_organic_organ = 1
+ break
if(..())
if(!has_damaged_robot_organ && has_damaged_organic_organ)
to_chat(user, "You cannot fix organic organs with this tool.")
From bc15d7323305757c2b921caffb1d7dc87f21ef5f Mon Sep 17 00:00:00 2001
From: SECBATON GRIFFON <87321915+SECBATON-GRIFFON@users.noreply.github.com>
Date: Wed, 30 Oct 2024 18:47:18 +0000
Subject: [PATCH 14/21] removes this because it was breaking it
---
code/modules/surgery/organs_internal.dm | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/code/modules/surgery/organs_internal.dm b/code/modules/surgery/organs_internal.dm
index d274e8af69c7..02715721ef28 100644
--- a/code/modules/surgery/organs_internal.dm
+++ b/code/modules/surgery/organs_internal.dm
@@ -343,7 +343,7 @@ var/static/list/partstobraindamagetype = list(
if(I && istype(I))
if(brain_damagetype && istype(I,/datum/organ/internal/brain))
var/datum/organ/internal/brain/sponge = I
- sponge.specific_damages[brain_damagetype] += min(rand(61,65) * (allowed_tools[tool.type]/100),target.maxHealth)
+ sponge.specific_damages[brain_damagetype] += min(rand(61,65),target.maxHealth)
else if(I.CanRemove(target, user, quiet=1))
I.Remove(target, user)
I.status |= ORGAN_CUT_AWAY
From ecf094d3858d0cddca20cfad9c08403f20988b21 Mon Sep 17 00:00:00 2001
From: SECBATON GRIFFON <87321915+SECBATON-GRIFFON@users.noreply.github.com>
Date: Thu, 31 Oct 2024 17:17:52 +0000
Subject: [PATCH 15/21] makes admin rejuv fix this
---
code/modules/mob/living/carbon/human/human.dm | 3 +++
1 file changed, 3 insertions(+)
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index c88942d998ed..d36e14149ab7 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -929,6 +929,9 @@
decapitated = null
qdel(B)
+ else
+ for(var/damage in BBrain.specific_damages)
+ BBrain.specific_damages[damage] = 0
for(var/datum/organ/internal/I in internal_organs)
I.damage = 0
From 1c1e94a82afbbff53b75aaecb2d4e47130da5332 Mon Sep 17 00:00:00 2001
From: SECBATON GRIFFON <87321915+SECBATON-GRIFFON@users.noreply.github.com>
Date: Thu, 31 Oct 2024 19:22:35 +0000
Subject: [PATCH 16/21] moves this to a specific proc and does this here
---
.../carbon/human/life/handle_disabilities.dm | 121 ++++++++++--------
code/modules/surgery/organs_internal.dm | 2 +
2 files changed, 67 insertions(+), 56 deletions(-)
diff --git a/code/modules/mob/living/carbon/human/life/handle_disabilities.dm b/code/modules/mob/living/carbon/human/life/handle_disabilities.dm
index 753bcdf0da62..2e83efda4e18 100644
--- a/code/modules/mob/living/carbon/human/life/handle_disabilities.dm
+++ b/code/modules/mob/living/carbon/human/life/handle_disabilities.dm
@@ -68,69 +68,78 @@
Jitter(10)
if(getBrainLoss("speech") >= 60 && prob(3))
- say(pick("IM A PONY NEEEEEEIIIIIIIIIGH", \
- "without oxigen blob don't evoluate?", \
- "CAPTAINS A COMDOM", \
- "[pick("", "that traitor")] [pick("joerge", "george", "gorge", "gdoruge")] [pick("mellens", "melons", "mwrlins")] is grifing me HAL;P!!!", \
- "can u give me [pick("telikesis","halk","eppilapse")]?", \
- "THe saiyans screwed", \
- "Bi is THE BEST OF BOTH WORLDS>", \
- "I WANNA PET TEH monkeyS", \
- "stop grifing me!!!!", \
- "SOTP IT#", \
- "based and redpilled",\
- "ho now talking like a milenian piece of shit is too unralistic in the fucking",\
- "FUS RO DAH", \
- "fucking 4rries!", \
- "stat me", \
- ">my face", \
- "roll it easy!", \
- "waaaaaagh!!!", \
- "red wonz go fasta", \
- "FOR TEH EMPRAH", \
- "lol2cat", \
- "dem dwarfs man, dem dwarfs", \
- "SPESS MAHREENS", \
- "hwee did eet fhor khayosss", \
- "lifelike texture ;_;", \
- "luv can bloooom", \
- "PACKETS!!!", \
- "SARAH HALE DID IT!!!", \
- "Don't tell Chase", \
- "WOAH MAMA", \
- "not so tough now huh", \
- "WERE NOT BAY!!", \
- "IF YOU DONT LIKE THE CYBORGS OR SLIMES WHY DONT YU O JUST MAKE YORE OWN!", \
- "DONT TALK TO ME ABOUT BALANCE!!!!", \
- "YOU AR JUS LAZY AND DUMB JAMITORS AND SERVICE ROLLS", \
- "BLAME HOSHI!!!", \
- "ARRPEE IZ DED!!!", \
- "THERE ALL JUS MEATAFRIENDS!", \
- "SOTP MESING WITH THE ROUNS SHITMAN!!!", \
- "SKELINGTON IS 4 SHITERS!", \
- "MOMMSI R THE WURST SCUM!!", \
- "How do we engiener=", \
- "try to live freely and automatically good bye", \
- "why woud i take a pin pointner??", \
- "FUCK IT; KISSYOUR ASSES GOOD BYE DEAD MEN! I AM SELFDESTRUCKTING THE STATION!!!!", \
- "How do I set up the. SHow do I set u p the Singu. how I the scrungularity????", \
- "OMG I SED LAW 2 U FAG MOMIM LAW 2!!!", \
- "I AM BASTE", \
- "TEH TRAITOR THEY KILL PEEPLE BUT I RESPAWN!!!", \
- "whats a keeper"))
+ say_gibberish()
else if(getBrainLoss("intelligence") >= 60 && prob(3))
emote("drool")
if(getBrainLoss("motor") > 50 && prob(1.5))
- if(canmove)
- to_chat(src, "Your legs won't respond properly, you fall down.")
- Knockdown(3)
+ legfail()
else if(getBrainLoss("motor") > 35 && prob(1.5))
- if(get_active_hand())
- to_chat(src, "Your hand won't respond properly, you drop what you're holding.")
- drop_item()
+ handfail()
else if(getBrainLoss() > 15 && prob(1.5))
if(eye_blurry <= 0)
to_chat(src, "It becomes hard to see for some reason.")
eye_blurry = 10
else if(getBrainLoss() > 0 && prob(2))
custom_pain("Your head feels numb and painful.")
+
+/mob/living/carbon/human/proc/legfail()
+ if(canmove)
+ to_chat(src, "Your legs won't respond properly, you fall down.")
+ Knockdown(3)
+
+/mob/living/carbon/human/proc/handfail()
+ if(get_active_hand())
+ to_chat(src, "Your hand won't respond properly, you drop what you're holding.")
+ drop_item()
+
+/mob/living/carbon/human/proc/say_gibberish()
+ say(pick("IM A PONY NEEEEEEIIIIIIIIIGH", \
+ "without oxigen blob don't evoluate?", \
+ "CAPTAINS A COMDOM", \
+ "[pick("", "that traitor")] [pick("joerge", "george", "gorge", "gdoruge")] [pick("mellens", "melons", "mwrlins")] is grifing me HAL;P!!!", \
+ "can u give me [pick("telikesis","halk","eppilapse")]?", \
+ "THe saiyans screwed", \
+ "Bi is THE BEST OF BOTH WORLDS>", \
+ "I WANNA PET TEH monkeyS", \
+ "stop grifing me!!!!", \
+ "SOTP IT#", \
+ "based and redpilled",\
+ "ho now talking like a milenian piece of shit is too unralistic in the fucking",\
+ "FUS RO DAH", \
+ "fucking 4rries!", \
+ "stat me", \
+ ">my face", \
+ "roll it easy!", \
+ "waaaaaagh!!!", \
+ "red wonz go fasta", \
+ "FOR TEH EMPRAH", \
+ "lol2cat", \
+ "dem dwarfs man, dem dwarfs", \
+ "SPESS MAHREENS", \
+ "hwee did eet fhor khayosss", \
+ "lifelike texture ;_;", \
+ "luv can bloooom", \
+ "PACKETS!!!", \
+ "SARAH HALE DID IT!!!", \
+ "Don't tell Chase", \
+ "WOAH MAMA", \
+ "not so tough now huh", \
+ "WERE NOT BAY!!", \
+ "IF YOU DONT LIKE THE CYBORGS OR SLIMES WHY DONT YU O JUST MAKE YORE OWN!", \
+ "DONT TALK TO ME ABOUT BALANCE!!!!", \
+ "YOU AR JUS LAZY AND DUMB JAMITORS AND SERVICE ROLLS", \
+ "BLAME HOSHI!!!", \
+ "ARRPEE IZ DED!!!", \
+ "THERE ALL JUS MEATAFRIENDS!", \
+ "SOTP MESING WITH THE ROUNS SHITMAN!!!", \
+ "SKELINGTON IS 4 SHITERS!", \
+ "MOMMSI R THE WURST SCUM!!", \
+ "How do we engiener=", \
+ "try to live freely and automatically good bye", \
+ "why woud i take a pin pointner??", \
+ "FUCK IT; KISSYOUR ASSES GOOD BYE DEAD MEN! I AM SELFDESTRUCKTING THE STATION!!!!", \
+ "How do I set up the. SHow do I set u p the Singu. how I the scrungularity????", \
+ "OMG I SED LAW 2 U FAG MOMIM LAW 2!!!", \
+ "I AM BASTE", \
+ "TEH TRAITOR THEY KILL PEEPLE BUT I RESPAWN!!!", \
+ "whats a keeper"))
\ No newline at end of file
diff --git a/code/modules/surgery/organs_internal.dm b/code/modules/surgery/organs_internal.dm
index 02715721ef28..8d07868f8e0b 100644
--- a/code/modules/surgery/organs_internal.dm
+++ b/code/modules/surgery/organs_internal.dm
@@ -333,6 +333,8 @@ var/static/list/partstobraindamagetype = list(
user.visible_message("[user] starts to [cutverb] [target]'s [target.op_stage.current_organ] with \the [tool].", \
"You start to [cutverb] [target]'s [target.op_stage.current_organ] with \the [tool]." )
target.custom_pain("The pain in your [affected.display_name] is living hell!",1, scream=TRUE)
+ if(brain_damagetype == "speech")
+ target.say_gibberish()
..()
/datum/surgery_step/internal/detatch_organ/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
From 7c7abaa638daa9c3d1e68b93b2a009bcc4f72475 Mon Sep 17 00:00:00 2001
From: SECBATON GRIFFON <87321915+SECBATON-GRIFFON@users.noreply.github.com>
Date: Thu, 31 Oct 2024 19:23:20 +0000
Subject: [PATCH 17/21] sanity
---
code/modules/surgery/organs_internal.dm | 2 ++
1 file changed, 2 insertions(+)
diff --git a/code/modules/surgery/organs_internal.dm b/code/modules/surgery/organs_internal.dm
index 8d07868f8e0b..96026b55a6ee 100644
--- a/code/modules/surgery/organs_internal.dm
+++ b/code/modules/surgery/organs_internal.dm
@@ -323,6 +323,7 @@ var/static/list/partstobraindamagetype = list(
cutverb = "separate"
cutverbed = "separated"
else
+ brain_damagetype = null
cutverb = "separate"
cutverbed = "separated"
return ..() && organ_to_remove && I && istype(I) && I.CanRemove(target, user)
@@ -346,6 +347,7 @@ var/static/list/partstobraindamagetype = list(
if(brain_damagetype && istype(I,/datum/organ/internal/brain))
var/datum/organ/internal/brain/sponge = I
sponge.specific_damages[brain_damagetype] += min(rand(61,65),target.maxHealth)
+ brain_damagetype = null
else if(I.CanRemove(target, user, quiet=1))
I.Remove(target, user)
I.status |= ORGAN_CUT_AWAY
From 45026b3b0d0e9e5b69ac83a5e7e4b451201126a4 Mon Sep 17 00:00:00 2001
From: SECBATON GRIFFON <87321915+SECBATON-GRIFFON@users.noreply.github.com>
Date: Thu, 31 Oct 2024 19:29:53 +0000
Subject: [PATCH 18/21] makes mednanos do it for consistency
---
code/modules/reagents/reagents/reagents_medical.dm | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/code/modules/reagents/reagents/reagents_medical.dm b/code/modules/reagents/reagents/reagents_medical.dm
index 1bc6ea355ef1..bac1035f3a1e 100644
--- a/code/modules/reagents/reagents/reagents_medical.dm
+++ b/code/modules/reagents/reagents/reagents_medical.dm
@@ -1042,6 +1042,10 @@ var/global/list/charcoal_doesnt_remove=list(
if(I.damage)
I.damage = max(0, I.damage - 5) //Heals a whooping 5 organ damage.
holder.remove_reagent(MEDNANOBOTS, 0.10) //Less so it doesn't vanish the nanobot supply
+ if(istype(I,/datum/organ/internal/brain))
+ var/datum/organ/internal/brain/B = I
+ for(var/damtype in B.specific_damages)
+ B.specific_damages[damtype] = max(0, B.specific_damages[damtype] - 5) //Heals a whooping 5 damage.
I.status &= ~ORGAN_BROKEN //What do I owe you?
I.status &= ~ORGAN_SPLINTED //Nothing, it's for free!
I.status &= ~ORGAN_BLEEDING //FOR FREE?!
From f82b377a972cc4595ef365bd9af6cd2a503ecbff Mon Sep 17 00:00:00 2001
From: SECBATON GRIFFON <87321915+SECBATON-GRIFFON@users.noreply.github.com>
Date: Thu, 31 Oct 2024 19:31:02 +0000
Subject: [PATCH 19/21] here too
---
code/modules/reagents/reagents/reagents_medical.dm | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/code/modules/reagents/reagents/reagents_medical.dm b/code/modules/reagents/reagents/reagents_medical.dm
index bac1035f3a1e..43271db4e9e5 100644
--- a/code/modules/reagents/reagents/reagents_medical.dm
+++ b/code/modules/reagents/reagents/reagents_medical.dm
@@ -1245,6 +1245,10 @@ var/global/list/charcoal_doesnt_remove=list(
for(var/datum/organ/internal/I in C.internal_organs)
if(I.damage > 0)
I.damage = max(0,I.damage-0.2)
+ if(istype(I,/datum/organ/internal/brain))
+ var/datum/organ/internal/brain/B = I
+ for(var/damtype in B.specific_damages)
+ B.specific_damages[damtype] = max(0, B.specific_damages[damtype] - 0.2)
/datum/reagent/peridaxon/reaction_obj(var/obj/O, var/volume)
if(..())
From cd2adadf723f3f37a06f179ea9908c4717c85e8f Mon Sep 17 00:00:00 2001
From: SECBATON GRIFFON <87321915+SECBATON-GRIFFON@users.noreply.github.com>
Date: Thu, 31 Oct 2024 19:40:17 +0000
Subject: [PATCH 20/21] finally puts this in here
---
.../living/carbon/human/life/handle_disabilities.dm | 11 +++++++----
code/modules/organs/organ_internal.dm | 2 +-
code/modules/surgery/organs_internal.dm | 3 ++-
3 files changed, 10 insertions(+), 6 deletions(-)
diff --git a/code/modules/mob/living/carbon/human/life/handle_disabilities.dm b/code/modules/mob/living/carbon/human/life/handle_disabilities.dm
index 2e83efda4e18..2547f277015b 100644
--- a/code/modules/mob/living/carbon/human/life/handle_disabilities.dm
+++ b/code/modules/mob/living/carbon/human/life/handle_disabilities.dm
@@ -75,10 +75,8 @@
legfail()
else if(getBrainLoss("motor") > 35 && prob(1.5))
handfail()
- else if(getBrainLoss() > 15 && prob(1.5))
- if(eye_blurry <= 0)
- to_chat(src, "It becomes hard to see for some reason.")
- eye_blurry = 10
+ else if(getBrainLoss("sight") > 15 && prob(1.5))
+ brain_eyeblur()
else if(getBrainLoss() > 0 && prob(2))
custom_pain("Your head feels numb and painful.")
@@ -92,6 +90,11 @@
to_chat(src, "Your hand won't respond properly, you drop what you're holding.")
drop_item()
+/mob/living/carbon/human/proc/brain_eyeblur()
+ if(eye_blurry <= 0)
+ to_chat(src, "It becomes hard to see for some reason.")
+ eye_blurry = 10
+
/mob/living/carbon/human/proc/say_gibberish()
say(pick("IM A PONY NEEEEEEIIIIIIIIIGH", \
"without oxigen blob don't evoluate?", \
diff --git a/code/modules/organs/organ_internal.dm b/code/modules/organs/organ_internal.dm
index 47b763a7bc4d..08f515a7898d 100644
--- a/code/modules/organs/organ_internal.dm
+++ b/code/modules/organs/organ_internal.dm
@@ -212,7 +212,7 @@
organ_type = "brain"
removed_type = /obj/item/organ/internal/brain
vital = 1
- var/list/specific_damages = list("motor" = 0,"coordination" = 0,"speech" = 0,"intelligence" = 0)
+ var/list/specific_damages = list("motor" = 0,"coordination" = 0,"speech" = 0,"intelligence" = 0,"sight" = 0)
/datum/organ/internal/brain/ash
removed_type = /obj/item/organ/internal/brain/ash
diff --git a/code/modules/surgery/organs_internal.dm b/code/modules/surgery/organs_internal.dm
index 96026b55a6ee..309898e1a030 100644
--- a/code/modules/surgery/organs_internal.dm
+++ b/code/modules/surgery/organs_internal.dm
@@ -284,7 +284,8 @@ var/static/list/partstobraindamagetype = list(
"Cerebellum" = "motor",
"Frontal lobe" = "coordination",
"Broca's area" = "speech",
- "Temporal lobe" = "intelligence"
+ "Temporal lobe" = "intelligence",
+ "Occipital lobe" = "sight"
)
/datum/surgery_step/internal/detatch_organ/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
From 6288ff03a3f5d1b5cdc7ab4cf8ce2598147661dd Mon Sep 17 00:00:00 2001
From: SECBATON GRIFFON <87321915+SECBATON-GRIFFON@users.noreply.github.com>
Date: Thu, 31 Oct 2024 20:14:14 +0000
Subject: [PATCH 21/21] makes these more themed, truer to PRs word about only
head hurting really being affected
---
code/modules/mob/living/silicon/robot/component.dm | 2 +-
code/modules/virus2/effect/stage_1.dm | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/code/modules/mob/living/silicon/robot/component.dm b/code/modules/mob/living/silicon/robot/component.dm
index e541a0d48504..d298adbb21bf 100644
--- a/code/modules/mob/living/silicon/robot/component.dm
+++ b/code/modules/mob/living/silicon/robot/component.dm
@@ -247,7 +247,7 @@
var/mode = 1;
/obj/item/device/robotanalyzer/attack(mob/living/M as mob, mob/living/user as mob)
- if(( clumsy_check(user) || user.getBrainLoss() >= 60) && prob(50))
+ if(( clumsy_check(user) || user.getBrainLoss("coordination") >= 60) && prob(50))
to_chat(user, text("You try to analyze the floor's vitals!"))
for(var/mob/O in viewers(M, null))
O.show_message(text("[user] has analyzed the floor's vitals!"), 1)
diff --git a/code/modules/virus2/effect/stage_1.dm b/code/modules/virus2/effect/stage_1.dm
index 8624a153a6e5..17d421e7ecd0 100644
--- a/code/modules/virus2/effect/stage_1.dm
+++ b/code/modules/virus2/effect/stage_1.dm
@@ -225,7 +225,7 @@
badness = EFFECT_DANGER_FLAVOR
/datum/disease2/effect/socialconfusion/activate(var/mob/living/mob)
- if(mob.isUnconscious() || mob.getBrainLoss() >= 10)
+ if(mob.isUnconscious() || mob.getBrainLoss("speech") >= 10)
return 1
var/mob/living/nearest_mob = null