diff --git a/code/ZAS/Phoron.dm b/code/ZAS/Phoron.dm index 1e3df5292a..f96e47c188 100644 --- a/code/ZAS/Phoron.dm +++ b/code/ZAS/Phoron.dm @@ -118,7 +118,7 @@ obj/var/contaminated = 0 /mob/living/carbon/human/proc/burn_eyes() //The proc that handles eye burning. if(prob(20)) src << "\red Your eyes burn!" - var/datum/organ/internal/eyes/E = internal_organs["eyes"] + var/datum/organ/internal/eyes/E = internal_organs_by_name["eyes"] E.damage += 2.5 eye_blurry = min(eye_blurry+1.5,50) if (prob(max(0,E.damage - 15) + 1) &&!eye_blind) diff --git a/code/game/machinery/adv_med.dm b/code/game/machinery/adv_med.dm index ec5529c80c..dac4bf7b00 100644 --- a/code/game/machinery/adv_med.dm +++ b/code/game/machinery/adv_med.dm @@ -332,8 +332,7 @@ else dat += "[e.display_name]--Not Found" dat += "" - for(var/organ_name in occupant.internal_organs) - var/datum/organ/internal/i = occupant.internal_organs[organ_name] + for(var/datum/organ/internal/i in occupant.internal_organs) var/mech = "" if(i.robotic == 1) mech = "Assisted:" diff --git a/code/game/machinery/flasher.dm b/code/game/machinery/flasher.dm index 303e814ef1..eff51fc697 100644 --- a/code/game/machinery/flasher.dm +++ b/code/game/machinery/flasher.dm @@ -81,7 +81,7 @@ O.Weaken(strength) if (istype(O, /mob/living/carbon/human)) var/mob/living/carbon/human/H = O - var/datum/organ/internal/eyes/E = H.internal_organs["eyes"] + var/datum/organ/internal/eyes/E = H.internal_organs_by_name["eyes"] if ((E.damage > E.min_bruised_damage && prob(E.damage + 50))) flick("e_flash", O:flash) E.damage += rand(1, 5) diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index b0897829e2..6beb98c40c 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -539,7 +539,7 @@ "\red You stab yourself in the eyes with [src]!" \ ) if(istype(M, /mob/living/carbon/human)) - var/datum/organ/internal/eyes/eyes = H.internal_organs["eyes"] + var/datum/organ/internal/eyes/eyes = H.internal_organs_by_name["eyes"] eyes.damage += rand(3,4) if(eyes.damage >= eyes.min_bruised_damage) if(M.stat != 2) diff --git a/code/game/objects/items/weapons/grenades/flashbang.dm b/code/game/objects/items/weapons/grenades/flashbang.dm index 2716719fda..dd60f16645 100644 --- a/code/game/objects/items/weapons/grenades/flashbang.dm +++ b/code/game/objects/items/weapons/grenades/flashbang.dm @@ -83,7 +83,7 @@ //This really should be in mob not every check if(ishuman(M)) var/mob/living/carbon/human/H = M - var/datum/organ/internal/eyes/E = H.internal_organs["eyes"] + var/datum/organ/internal/eyes/E = H.internal_organs_by_name["eyes"] if (E.damage >= E.min_bruised_damage) M << "\red Your eyes start to burn badly!" if(!banglet && !(istype(src , /obj/item/weapon/grenade/flashbang/clusterbang))) diff --git a/code/game/objects/items/weapons/tools.dm b/code/game/objects/items/weapons/tools.dm index a05d2eac37..d148b3b758 100644 --- a/code/game/objects/items/weapons/tools.dm +++ b/code/game/objects/items/weapons/tools.dm @@ -356,7 +356,7 @@ var/safety = user:eyecheck() if(istype(user, /mob/living/carbon/human)) var/mob/living/carbon/human/H = user - var/datum/organ/internal/eyes/E = H.internal_organs["eyes"] + var/datum/organ/internal/eyes/E = H.internal_organs_by_name["eyes"] if(H.species.flags & IS_SYNTHETIC) return switch(safety) diff --git a/code/modules/events/organ_failure.dm b/code/modules/events/organ_failure.dm index 1499afcb45..f51c463328 100644 --- a/code/modules/events/organ_failure.dm +++ b/code/modules/events/organ_failure.dm @@ -13,7 +13,7 @@ datum/event/organ_failure/announce() datum/event/organ_failure/start() var/list/candidates = list() //list of candidate keys for(var/mob/living/carbon/human/G in player_list) - if(G.mind && G.mind.current && G.mind.current.stat != DEAD && G.health > 70) + if(G.mind && G.mind.current && G.mind.current.stat != DEAD && G.health > 70 && G.internal_organs) candidates += G if(!candidates.len) return candidates = shuffle(candidates)//Incorporating Donkie's list shuffle @@ -24,8 +24,7 @@ datum/event/organ_failure/start() var/acute = prob(15) if (prob(75)) //internal organ infection - var/O = pick(C.internal_organs) - var/datum/organ/internal/I = C.internal_organs[O] + var/datum/organ/internal/I = pick(C.internal_organs) if (acute) I.germ_level = max(INFECTION_LEVEL_TWO, I.germ_level) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index dc23eecd03..af74fd2853 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -1086,8 +1086,7 @@ H.brainmob.mind.transfer_to(src) del(H) - for(var/E in internal_organs) - var/datum/organ/internal/I = internal_organs[E] + for(var/datum/organ/internal/I in internal_organs) I.damage = 0 for (var/datum/disease/virus in viruses) @@ -1099,11 +1098,11 @@ ..() /mob/living/carbon/human/proc/is_lung_ruptured() - var/datum/organ/internal/lungs/L = internal_organs["lungs"] + var/datum/organ/internal/lungs/L = internal_organs_by_name["lungs"] return L.is_bruised() /mob/living/carbon/human/proc/rupture_lung() - var/datum/organ/internal/lungs/L = internal_organs["lungs"] + var/datum/organ/internal/lungs/L = internal_organs_by_name["lungs"] if(!L.is_bruised()) src.custom_pain("You feel a stabbing pain in your chest!", 1) diff --git a/code/modules/mob/living/carbon/human/human_damage.dm b/code/modules/mob/living/carbon/human/human_damage.dm index 36aec93a02..dbf8379eeb 100644 --- a/code/modules/mob/living/carbon/human/human_damage.dm +++ b/code/modules/mob/living/carbon/human/human_damage.dm @@ -17,7 +17,7 @@ /mob/living/carbon/human/getBrainLoss() var/res = brainloss - var/datum/organ/internal/brain/sponge = internal_organs["brain"] + var/datum/organ/internal/brain/sponge = internal_organs_by_name["brain"] if (sponge.is_bruised()) res += 20 if (sponge.is_broken()) diff --git a/code/modules/organs/blood.dm b/code/modules/organs/blood.dm index e9f1563c15..1459098db7 100644 --- a/code/modules/organs/blood.dm +++ b/code/modules/organs/blood.dm @@ -63,7 +63,7 @@ var/const/BLOOD_VOLUME_SURVIVE = 122 // Damaged heart virtually reduces the blood volume, as the blood isn't // being pumped properly anymore. - var/datum/organ/internal/heart/heart = internal_organs["heart"] + var/datum/organ/internal/heart/heart = internal_organs_by_name["heart"] if(heart.damage > 1 && heart.damage < heart.min_bruised_damage) blood_volume *= 0.8 diff --git a/code/modules/organs/organ_external.dm b/code/modules/organs/organ_external.dm index 5cf4d01302..5f369141f4 100644 --- a/code/modules/organs/organ_external.dm +++ b/code/modules/organs/organ_external.dm @@ -98,7 +98,7 @@ return // High brute damage or sharp objects may damage internal organs - if(internal_organs != null) if( (sharp && brute >= 5) || brute >= 10) if(prob(5)) + if(internal_organs && ( (sharp && brute >= 5) || brute >= 10) && prob(5)) // Damage an internal organ var/datum/organ/internal/I = pick(internal_organs) I.take_damage(brute / 2) diff --git a/code/modules/organs/organ_internal.dm b/code/modules/organs/organ_internal.dm index 3721633dce..69a86d82ce 100644 --- a/code/modules/organs/organ_internal.dm +++ b/code/modules/organs/organ_internal.dm @@ -27,8 +27,8 @@ var/datum/organ/external/E = H.organs_by_name[src.parent_organ] if(E.internal_organs == null) E.internal_organs = list() - E.internal_organs += src - H.internal_organs[src.name] = src + E.internal_organs |= src + H.internal_organs |= src src.owner = H /datum/organ/internal/process() diff --git a/code/modules/organs/pain.dm b/code/modules/organs/pain.dm index 250e9b984d..49cc2073df 100644 --- a/code/modules/organs/pain.dm +++ b/code/modules/organs/pain.dm @@ -102,8 +102,7 @@ mob/living/carbon/human/proc/handle_pain() pain(damaged_organ.display_name, maxdam, 0) // Damage to internal organs hurts a lot. - for(var/organ_name in internal_organs) - var/datum/organ/internal/I = internal_organs[organ_name] + for(var/datum/organ/internal/I in internal_organs) if(I.damage > 2) if(prob(2)) var/datum/organ/external/parent = get_organ(I.parent_organ) src.custom_pain("You feel a sharp pain in your [parent.display_name]", 1) diff --git a/code/modules/reagents/Chemistry-Reagents.dm b/code/modules/reagents/Chemistry-Reagents.dm index 2bb33f891a..145e3fd44c 100644 --- a/code/modules/reagents/Chemistry-Reagents.dm +++ b/code/modules/reagents/Chemistry-Reagents.dm @@ -1312,7 +1312,7 @@ datum M.eye_blind = max(M.eye_blind-5 , 0) if(ishuman(M)) var/mob/living/carbon/human/H = M - var/datum/organ/internal/eyes/E = H.internal_organs["eyes"] + var/datum/organ/internal/eyes/E = H.internal_organs_by_name["eyes"] if(istype(E)) if(E.damage > 0) E.damage -= 1 @@ -1332,8 +1332,9 @@ datum if(!M) M = holder.my_atom if(ishuman(M)) var/mob/living/carbon/human/H = M - var/datum/organ/external/chest/C = H.get_organ("chest") - for(var/datum/organ/internal/I in C.internal_organs) + + //Peridaxon is hard enough to get, it's probably fair to make this all internal organs + for(var/datum/organ/internal/I in H.internal_organs) if(I.damage > 0) I.damage -= 0.20 ..() @@ -3036,7 +3037,7 @@ datum M:drowsyness = max(M:drowsyness, 30) if(ishuman(M)) var/mob/living/carbon/human/H = M - var/datum/organ/internal/liver/L = H.internal_organs["liver"] + var/datum/organ/internal/liver/L = H.internal_organs_by_name["liver"] if (istype(L)) L.take_damage(0.1, 1) H.adjustToxLoss(0.1) @@ -3273,13 +3274,13 @@ datum if(prob(30)) M.adjustToxLoss(2) if(prob(5)) if(ishuman(M)) var/mob/living/carbon/human/H = M - var/datum/organ/internal/heart/L = H.internal_organs["heart"] + var/datum/organ/internal/heart/L = H.internal_organs_by_name["heart"] if (istype(L)) L.take_damage(5, 0) if (300 to INFINITY) if(ishuman(M)) var/mob/living/carbon/human/H = M - var/datum/organ/internal/heart/L = H.internal_organs["heart"] + var/datum/organ/internal/heart/L = H.internal_organs_by_name["heart"] if (istype(L)) L.take_damage(100, 0) holder.remove_reagent(src.id, FOOD_METABOLISM) diff --git a/code/modules/surgery/braincore.dm b/code/modules/surgery/braincore.dm index b89c48275b..85f3913195 100644 --- a/code/modules/surgery/braincore.dm +++ b/code/modules/surgery/braincore.dm @@ -107,6 +107,7 @@ B.transfer_identity(target) target.internal_organs -= B + target.internal_organs_by_name -= "brain" target:brain_op_stage = 4.0 target.death()//You want them to die after the brain was transferred, so not to trigger client death() twice. @@ -173,7 +174,7 @@ end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) user.visible_message("\blue [user] mends hematoma in [target]'s brain with \the [tool].", \ "\blue You mend hematoma in [target]'s brain with \the [tool].") - var/datum/organ/internal/brain/sponge = target.internal_organs["brain"] + var/datum/organ/internal/brain/sponge = target.internal_organs_by_name["brain"] if (sponge) sponge.damage = 0 diff --git a/code/modules/surgery/eye.dm b/code/modules/surgery/eye.dm index 9977271c76..69e238679e 100644 --- a/code/modules/surgery/eye.dm +++ b/code/modules/surgery/eye.dm @@ -39,7 +39,7 @@ target.blinded += 1.5 fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/datum/organ/internal/eyes/eyes = target.internal_organs["eyes"] + var/datum/organ/internal/eyes/eyes = target.internal_organs_by_name["eyes"] var/datum/organ/external/affected = target.get_organ(target_zone) user.visible_message("\red [user]'s hand slips, slicing [target]'s eyes wth \the [tool]!" , \ "\red Your hand slips, slicing [target]'s eyes wth \the [tool]!" ) @@ -69,7 +69,7 @@ target.op_stage.eyes = 2 fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/datum/organ/internal/eyes/eyes = target.internal_organs["eyes"] + var/datum/organ/internal/eyes/eyes = target.internal_organs_by_name["eyes"] var/datum/organ/external/affected = target.get_organ(target_zone) user.visible_message("\red [user]'s hand slips, damaging [target]'s eyes with \the [tool]!", \ "\red Your hand slips, damaging [target]'s eyes with \the [tool]!") @@ -100,7 +100,7 @@ target.op_stage.eyes = 3 fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/datum/organ/internal/eyes/eyes = target.internal_organs["eyes"] + var/datum/organ/internal/eyes/eyes = target.internal_organs_by_name["eyes"] var/datum/organ/external/affected = target.get_organ(target_zone) user.visible_message("\red [user]'s hand slips, stabbing \the [tool] into [target]'s eye!", \ "\red Your hand slips, stabbing \the [tool] into [target]'s eye!") @@ -126,7 +126,7 @@ "You are beginning to cauterize the incision around [target]'s eyes with \the [tool].") end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/datum/organ/internal/eyes/eyes = target.internal_organs["eyes"] + var/datum/organ/internal/eyes/eyes = target.internal_organs_by_name["eyes"] user.visible_message("\blue [user] cauterizes the incision around [target]'s eyes with \the [tool].", \ "\blue You cauterize the incision around [target]'s eyes with \the [tool].") if (target.op_stage.eyes == 3) @@ -136,7 +136,7 @@ target.op_stage.eyes = 0 fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/datum/organ/internal/eyes/eyes = target.internal_organs["eyes"] + var/datum/organ/internal/eyes/eyes = target.internal_organs_by_name["eyes"] var/datum/organ/external/affected = target.get_organ(target_zone) user.visible_message("\red [user]'s hand slips, searing [target]'s eyes with \the [tool]!", \ "\red Your hand slips, searing [target]'s eyes with \the [tool]!") diff --git a/code/modules/surgery/ribcage.dm b/code/modules/surgery/ribcage.dm index 1532dda210..ab16f56915 100644 --- a/code/modules/surgery/ribcage.dm +++ b/code/modules/surgery/ribcage.dm @@ -202,9 +202,10 @@ var/is_chest_organ_damaged = 0 var/datum/organ/external/chest/chest = target.get_organ("chest") - for(var/datum/organ/internal/I in chest.internal_organs) if(I.damage > 0) - is_chest_organ_damaged = 1 - break + for(var/datum/organ/internal/I in chest.internal_organs) + if(I.damage > 0) + is_chest_organ_damaged = 1 + break return ..() && is_chest_organ_damaged && target.op_stage.ribcage == 2 begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) @@ -285,7 +286,7 @@ return 0 var/is_chest_organ_damaged = 0 - var/datum/organ/internal/heart/heart = target.internal_organs["heart"] + var/datum/organ/internal/heart/heart = target.internal_organs_by_name["heart"] var/datum/organ/external/chest/chest = target.get_organ("chest") for(var/datum/organ/internal/I in chest.internal_organs) if(I.damage > 0) is_chest_organ_damaged = 1 @@ -293,7 +294,7 @@ return ..() && is_chest_organ_damaged && heart.robotic == 2 && target.op_stage.ribcage == 2 begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/datum/organ/internal/heart/heart = target.internal_organs["heart"] + var/datum/organ/internal/heart/heart = target.internal_organs_by_name["heart"] if(heart.damage > 0) user.visible_message("[user] starts mending the mechanisms on [target]'s heart with \the [tool].", \ @@ -302,14 +303,14 @@ ..() end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/datum/organ/internal/heart/heart = target.internal_organs["heart"] + var/datum/organ/internal/heart/heart = target.internal_organs_by_name["heart"] if(heart.damage > 0) user.visible_message("\blue [user] repairs [target]'s heart with \the [tool].", \ "\blue You repair [target]'s heart with \the [tool]." ) heart.damage = 0 fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/datum/organ/internal/heart/heart = target.internal_organs["heart"] + var/datum/organ/internal/heart/heart = target.internal_organs_by_name["heart"] user.visible_message("\red [user]'s hand slips, smearing [tool] in the incision in [target]'s heart, gumming it up!!" , \ "\red Your hand slips, smearing [tool] in the incision in [target]'s heart, gumming it up!") heart.take_damage(5, 0) diff --git a/code/modules/virus2/effect.dm b/code/modules/virus2/effect.dm index e5600b7633..41fda7a150 100644 --- a/code/modules/virus2/effect.dm +++ b/code/modules/virus2/effect.dm @@ -202,7 +202,7 @@ activate(var/mob/living/carbon/mob,var/multiplier) if(istype(mob, /mob/living/carbon/human)) var/mob/living/carbon/human/H = mob - var/datum/organ/internal/brain/B = H.internal_organs["brain"] + var/datum/organ/internal/brain/B = H.internal_organs_by_name["brain"] if (B.damage < B.min_broken_damage) B.take_damage(5) else