diff --git a/code/ZAS - oldbs12/Plasma.dm b/code/ZAS - oldbs12/Plasma.dm index 716ea216403..5be45be3c07 100644 --- a/code/ZAS - oldbs12/Plasma.dm +++ b/code/ZAS - oldbs12/Plasma.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 af127fe4930..bf63e1f644f 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 303e814ef11..eff51fc6976 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 927cc0b11a2..8b508553f43 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -611,7 +611,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 61a17650904..26372ce5700 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 7e863792a0c..b38ed25be23 100644 --- a/code/game/objects/items/weapons/tools.dm +++ b/code/game/objects/items/weapons/tools.dm @@ -364,7 +364,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 3639895cec6..329044ef735 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) @@ -39,7 +38,7 @@ datum/event/organ_failure/start() O.germ_level = max(INFECTION_LEVEL_TWO, O.germ_level) else O.germ_level = max(rand(INFECTION_LEVEL_ONE,INFECTION_LEVEL_ONE*2), O.germ_level) - + C.bad_external_organs |= O severity-- diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 6ceac0ba1ac..7bc896c9cd6 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -1231,8 +1231,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) @@ -1244,11 +1243,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 32be6ddfc98..afb37b21e6f 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 @@ /mob/living/carbon/human/getBrainLoss() if(species && species.flags & NO_INTORGANS) return 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 d6939596d40..5870500ab14 100644 --- a/code/modules/organs/blood.dm +++ b/code/modules/organs/blood.dm @@ -72,14 +72,14 @@ 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"] - if(heart) - if(heart.damage > 1 && heart.damage < heart.min_bruised_damage) - blood_volume *= 0.8 - else if(heart.damage >= heart.min_bruised_damage && heart.damage < heart.min_broken_damage) - blood_volume *= 0.6 - else if(heart.damage >= heart.min_broken_damage && heart.damage < INFINITY) - blood_volume *= 0.3 + 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 + else if(heart.damage >= heart.min_bruised_damage && heart.damage < heart.min_broken_damage) + blood_volume *= 0.6 + else if(heart.damage >= heart.min_broken_damage && heart.damage < INFINITY) + blood_volume *= 0.3 //Effects of bloodloss switch(blood_volume) diff --git a/code/modules/organs/organ_external.dm b/code/modules/organs/organ_external.dm index d9d8577753b..7321a763e3a 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 e9b871c445d..dc9f1a76e53 100644 --- a/code/modules/organs/organ_internal.dm +++ b/code/modules/organs/organ_internal.dm @@ -28,8 +28,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 cbb0a121d06..192947b513c 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 464baac5a78..29975c82964 100644 --- a/code/modules/reagents/Chemistry-Reagents.dm +++ b/code/modules/reagents/Chemistry-Reagents.dm @@ -1893,7 +1893,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 @@ -1914,8 +1914,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 ..() @@ -3329,7 +3330,7 @@ datum M:drowsyness = max(M:drowsyness, 30/sober_str) 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) diff --git a/code/modules/surgery/braincore.dm b/code/modules/surgery/braincore.dm index b39583ebf03..03aad05e11d 100644 --- a/code/modules/surgery/braincore.dm +++ b/code/modules/surgery/braincore.dm @@ -112,6 +112,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. @@ -178,7 +179,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 4fd31b20760..db1c8d23da9 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 44eddb312ef..be7734b4a68 100644 --- a/code/modules/surgery/ribcage.dm +++ b/code/modules/surgery/ribcage.dm @@ -202,9 +202,10 @@ return 0 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) @@ -359,7 +360,7 @@ return ..() && is_chest_organ_damaged && 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) if(heart.robotic == 2) @@ -372,7 +373,7 @@ ..() 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) if(heart.robotic == 2) user.visible_message("\blue [user] repairs [target]'s heart with \the [tool].", \ @@ -380,7 +381,7 @@ 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 276bf585ec4..fca733e95c6 100644 --- a/code/modules/virus2/effect.dm +++ b/code/modules/virus2/effect.dm @@ -381,7 +381,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