Tunes new antag mechanic behaviors (Greimorian Egg Clade, Radioactive Waste) (#21713)

changes:
- rscadd: "Spilled radium now generates (weakly) radioactive puddles of
green goo, just like Uranium."
  - balance: "Extends Greimorian eggsac incubation time by 50%."
- balance: "Introduces a probability element to greimorian egg toxin
metabolism; after being injected with the reagent, each metabolism tick
only has a % chance to create the eggsac 'organ', meaning quick
helmizole injection (or dumb luck) can prevent incubation entirely."
- balance: "Introduces clamp on spiderling generation counter to prevent
RNG from causing outsized impact from single eggsac rupture."
- balance: "If the randomly chosen body part a Greimorian eggsac would
infest is the head, the victim will get an extra reroll of target body
part to avoid the associated instant death risk."
- balance: "Consuming radioactive waste is now MUCH unhealthier. Don't
eat radioactive waste."
- qol: "Updates some antagonist tips (removed old/deprecated ones, added
new one.)"
- bugfix: "Removed greimorian eggsacs now dissolve into goo as
intended."
This commit is contained in:
Batrachophreno
2026-01-17 12:58:09 -05:00
committed by GitHub
parent aa7e23f758
commit e2f82ec245
7 changed files with 59 additions and 33 deletions
@@ -8,8 +8,8 @@
parent_organ = BP_CHEST
subtle = 1
/// ~2 minutes/stage (at two seconds/tick)
stage_interval = 60
/// ~3 minutes/stage (at two seconds/tick)
stage_interval = 90
max_stage = 5
@@ -28,15 +28,16 @@
/obj/item/organ/internal/parasite/greimorian_eggcluster/process()
..()
if(!owner && gestating_spiderlings)
return
// Make sure if its been removed from the host, it dissolves into goo.
if(!owner)
qdel()
if(ruptured)
return
var/obj/item/organ/external/affecting_organ = owner.organs_by_name[parent_organ]
if(prob(8))
if(prob(6))
gestating_spiderlings += 1
if(prob(5))
@@ -45,27 +46,27 @@
if(prob(33))
owner.adjustNutritionLoss(3)
if(stage >= 2) //after ~2.5 minutes
if(stage >= 2)
if(prob(8))
gestating_spiderlings += rand(1,2)
gestating_spiderlings += 1
if(prob(33))
owner.adjustNutritionLoss(4)
if(prob(5))
owner.emote("whimper")
if(prob(3))
if(prob(2))
to_chat(owner, SPAN_WARNING(pick("You feel nauseous and hungry at the same time.", "You feel a burning pain in your [parent_organ].", "Your sense of balance seems broken.")))
if(stage >= 3) //after ~5 minutes
if(prob(8))
gestating_spiderlings += rand(1,3)
if(stage >= 3)
if(prob(6))
gestating_spiderlings += 1
if(prob(33))
owner.adjustNutritionLoss(5)
if(prob(10))
affecting_organ.take_damage(rand(1,3))
owner.adjustHalLoss(8)
if(world.time > last_crawling_msg + 15 SECONDS)
if(world.time > last_crawling_msg + 20 SECONDS)
last_crawling_msg = world.time
owner.visible_message(
SPAN_WARNING("You think you see something moving around in \the [owner.name]'s [affecting_organ.name]."),
@@ -73,9 +74,9 @@
if(prob(1))
owner.seizure(0.4)
if(stage >= 4) //after ~7.5 minutes
if(prob(8))
gestating_spiderlings += rand(1,4)
if(stage >= 4)
if(prob(6))
gestating_spiderlings += rand(1,2)
if(prob(5))
owner.reagents.add_reagent(/singleton/reagent/toxin/greimorian_eggs, (gestating_spiderlings / 3))
@@ -84,9 +85,9 @@
if(prob(5))
owner.seizure(0.5)
if(stage >= 5) //after ~9 minutes
if(prob(8))
gestating_spiderlings += rand(1,5)
if(stage >= 5)
if(prob(6))
gestating_spiderlings += rand(1,2)
if(prob(10))
owner.seizure(0.6)
@@ -98,11 +99,12 @@
owner.visible_message(
SPAN_DANGER("You can see the flesh of [owner.name]'s [affecting_organ.name] begin rippling violently!"),
SPAN_DANGER("An <b>extreme</b>, nauseating pain erupts from your [affecting_organ.name]; you feel something burst inside it. The flesh begins to ripple violently!"))
addtimer(CALLBACK(src, PROC_REF(rupture)), rand(30, 50))
addtimer(CALLBACK(src, PROC_REF(rupture)), rand(2 SECONDS, 4 SECONDS))
/obj/item/organ/internal/parasite/greimorian_eggcluster/Destroy()
var/obj/item/organ/external/affecting_organ = owner.organs_by_name[parent_organ]
to_chat(src.owner, SPAN_WARNING("Mercifully, you feel something finally dissolve in your [affecting_organ.name]..."))
if(owner)
var/obj/item/organ/external/affecting_organ = owner.organs_by_name[parent_organ]
to_chat(src.owner, SPAN_WARNING("Mercifully, you feel something finally dissolve in your [affecting_organ.name]..."))
..()
/**
@@ -121,7 +123,9 @@
src.owner.emote("scream")
var/target_loc = src.owner ? src.owner.loc : src.loc
for(var/i = 0 to gestating_spiderlings)
// Average of 8 adult greimorians (larva 'can_mature_chance' is 50).
var/clamped_spiderlings = max(gestating_spiderlings, 16)
for(var/i = 0 to clamped_spiderlings)
// For details on the spiderlings, check out 'code\game\objects\effects\spiders.dm'
new /obj/effect/spider/spiderling(target_loc, src, 3)