Nuke Limb Processing (#22814)

<img width="1549" height="857" alt="image"
src="https://github.com/user-attachments/assets/3830233d-0635-4942-b2aa-024651e6cffa"
/>

Limbs make up roughly half of the "Per additional player" processing
overhead, while Organs make up most of the other half.
Not every organ is an easy candidate for "Event-only processing", but
external limbs are significantly easier to do so.

So this PR makes it so that External Limbs no longer require Processing
unless an event happens that would justify them requiring processing.
Which SIGNIFICANTLY reduces the overall additional cost to the
Processing subsystem per player that joins the server.

Oh and I also made the Appendix and Kidneys not require constant
processing. The Appendix will only process if it is hit by an
Appendicitis event, and the Kidneys will only process if they are either
damaged, or you get poisoned.
This commit is contained in:
VMSolidus
2026-07-12 20:45:24 +00:00
committed by GitHub
parent 48d8a06d1c
commit e117ef3f87
44 changed files with 310 additions and 216 deletions
+2 -2
View File
@@ -853,7 +853,7 @@ GLOBAL_LIST_INIT(slot_flags_enumeration, list(
)
eyes.take_damage(rand(3,4))
if(eyes.damage >= eyes.min_bruised_damage)
if(eyes.get_damage() >= eyes.min_bruised_damage)
if(H.stat != DEAD)
if(eyes.robotic <= 1) //robot eyes bleeding might be a bit silly
to_chat(H, SPAN_DANGER("Your eyes start to bleed profusely!"))
@@ -864,7 +864,7 @@ GLOBAL_LIST_INIT(slot_flags_enumeration, list(
H.eye_blurry += 10
H.Paralyse(1)
H.Weaken(4)
if (eyes.damage >= eyes.min_broken_damage)
if (eyes.get_damage() >= eyes.min_broken_damage)
if(H.stat != DEAD)
to_chat(H, SPAN_WARNING("You go blind!"))
var/obj/item/organ/external/affecting = H.get_organ(BP_HEAD)
+1 -1
View File
@@ -381,7 +381,7 @@
var/obj/item/organ/internal/lungs/lungs = H.internal_organs_by_name[BP_LUNGS]
var/safe_pressure_min = H.species.breath_pressure + 2
safe_pressure_min *= 1 + rand(1,4) * lungs.damage/lungs.max_damage
safe_pressure_min *= 1 + rand(1,4) * lungs.get_damage()/lungs.max_damage
if(!lungs)
epp_off()
return
@@ -250,7 +250,7 @@
return
if((H.mutations & XRAY))
to_chat(user, SPAN_NOTICE("\The [H]'s pupils give an eerie glow!"))
if(vision.damage)
if(vision.get_damage())
to_chat(user, SPAN_WARNING("There's visible damage to [H]'s [vision.name]!"))
else if(H.eye_blurry)
to_chat(user, SPAN_NOTICE("\The [H]'s pupils react slower than normally."))
@@ -240,7 +240,7 @@
tank_off()
return
var/safe_pressure_min = breather.species.breath_pressure + 5
safe_pressure_min *= 1 + rand(1,4) * L.damage/L.max_damage
safe_pressure_min *= 1 + rand(1,4) * L.get_damage()/L.max_damage
if(!tank_active) // Activates and sets the kPa to a safe pressure. This keeps from it constantly resetting itself
tank.distribute_pressure = safe_pressure_min