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