From 6ceb488ea2975322cee9802fc42fc62222886cd1 Mon Sep 17 00:00:00 2001 From: Kyep Date: Thu, 28 Mar 2019 20:33:07 -0700 Subject: [PATCH 01/10] patches terror spiders to bypass newcrit --- .../simple_animal/hostile/terror_spiders/terror_spiders.dm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/terror_spiders.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/terror_spiders.dm index 39c03feb928..edcfbd33906 100644 --- a/code/modules/mob/living/simple_animal/hostile/terror_spiders/terror_spiders.dm +++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/terror_spiders.dm @@ -214,6 +214,8 @@ var/global/list/ts_spiderling_list = list() var/mob/living/carbon/human/H = G if(!(H.dna.species.reagent_tag & PROCESS_ORG) || (!H.dna.species.tox_mod)) can_poison = 0 + if(H.stat != DEAD && H.health < HEALTH_THRESHOLD_DEAD) // Intentionally not HEALTH_THRESHOLD_CRIT, as that is softcrit + H.death() spider_specialattack(G,can_poison) else G.attack_animal(src) From 11f6ff0fbd6bb7c4df6f5490e0cb4d3b1cf81aa0 Mon Sep 17 00:00:00 2001 From: Kyep Date: Thu, 28 Mar 2019 20:56:36 -0700 Subject: [PATCH 02/10] patches empresses to be able to lay brown eggs --- .../living/simple_animal/hostile/terror_spiders/empress.dm | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/empress.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/empress.dm index 51028a69111..cdbf47b6d87 100644 --- a/code/modules/mob/living/simple_animal/hostile/terror_spiders/empress.dm +++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/empress.dm @@ -42,7 +42,7 @@ queenfakelings_action.button.name = "Empress Lings" /mob/living/simple_animal/hostile/poison/terror_spider/queen/empress/LayQueenEggs() - var/eggtype = input("What kind of eggs?") as null|anything in list(TS_DESC_QUEEN, TS_DESC_MOTHER, TS_DESC_PRINCE, TS_DESC_PRINCESS, TS_DESC_RED, TS_DESC_GRAY, TS_DESC_GREEN, TS_DESC_BLACK, TS_DESC_PURPLE, TS_DESC_WHITE) + var/eggtype = input("What kind of eggs?") as null|anything in list(TS_DESC_QUEEN, TS_DESC_MOTHER, TS_DESC_PRINCE, TS_DESC_PRINCESS, TS_DESC_RED, TS_DESC_GRAY, TS_DESC_GREEN, TS_DESC_BLACK, TS_DESC_PURPLE, TS_DESC_WHITE, TS_DESC_BROWN) var/numlings = input("How many in the batch?") as null|anything in list(1, 2, 3, 4, 5, 10, 15, 20, 30, 40, 50) if(eggtype == null || numlings == null) to_chat(src, "Cancelled.") @@ -60,6 +60,8 @@ DoLayTerrorEggs(/mob/living/simple_animal/hostile/poison/terror_spider/purple, numlings) if(TS_DESC_WHITE) DoLayTerrorEggs(/mob/living/simple_animal/hostile/poison/terror_spider/white, numlings) + if(TS_DESC_BROWN) + DoLayTerrorEggs(/mob/living/simple_animal/hostile/poison/terror_spider/brown, numlings) if(TS_DESC_PRINCE) DoLayTerrorEggs(/mob/living/simple_animal/hostile/poison/terror_spider/prince, numlings) if(TS_DESC_PRINCESS) From 9873fe04fc1384c158c89ef96b3e4e97f8503541 Mon Sep 17 00:00:00 2001 From: Kyep Date: Thu, 28 Mar 2019 21:25:41 -0700 Subject: [PATCH 03/10] allows broader placement of admin-spawned queens --- .../mob/living/simple_animal/hostile/terror_spiders/queen.dm | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/queen.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/queen.dm index ed2ea164634..2839dedb237 100644 --- a/code/modules/mob/living/simple_animal/hostile/terror_spiders/queen.dm +++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/queen.dm @@ -142,9 +142,8 @@ visible_message("\The [src] looks around warily - then seeks a better nesting ground.") path_to_vent = 1 else - visible_message("\The [src] looks around, searching for the vent that should be there, but isn't. A bluespace portal forms on her, and she is gone.") - qdel(src) - new /obj/effect/portal(get_turf(loc)) + neststep = -1 + message_admins("Warning: [key_name_admin(src)] was spawned in an area without a vent! This is likely a mapping/spawn mistake. This mob's AI has been permanently deactivated.") if(1) // No nest, and we should create one. Start NestMode(), then advance to step 2. if(world.time > (lastnestsetup + nestfrequency)) From 51c119660c963c04f6134c35dbb0267708833922 Mon Sep 17 00:00:00 2001 From: Kyep Date: Thu, 28 Mar 2019 21:36:31 -0700 Subject: [PATCH 04/10] add: shows admins details about growing eggs/spiders --- code/modules/admin/player_panel.dm | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/code/modules/admin/player_panel.dm b/code/modules/admin/player_panel.dm index 0a943e6a170..97711897d1e 100644 --- a/code/modules/admin/player_panel.dm +++ b/code/modules/admin/player_panel.dm @@ -545,6 +545,16 @@ if(spider_minds.len) dat += check_role_table("Terror Spiders", spider_minds) + var/count_eggs = 0 + var/count_spiderlings = 0 + for(var/obj/structure/spider/eggcluster/terror_eggcluster/E in ts_egg_list) + if(is_station_level(E.z)) + count_eggs += E.spiderling_number + for(var/obj/structure/spider/spiderling/terror_spiderling/L in ts_spiderling_list) + if(!L.stillborn && is_station_level(L.z)) + count_spiderlings += 1 + dat += "
Growing TS on-station: [count_eggs] egg[count_eggs != 1 ? "s" : ""], [count_spiderlings] spiderling[count_spiderlings != 1 ? "s" : ""].
" + if(ticker.mode.ert.len) dat += check_role_table("ERT", ticker.mode.ert) From 9ef421e3751c4a33f66f6c7ff2a263471eb472d7 Mon Sep 17 00:00:00 2001 From: Kyep Date: Thu, 28 Mar 2019 21:37:09 -0700 Subject: [PATCH 05/10] patches erase brood to not trigger mothers to spawn lings --- .../mob/living/simple_animal/hostile/terror_spiders/mother.dm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/mother.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/mother.dm index 354f99db8af..d1e171d2f55 100644 --- a/code/modules/mob/living/simple_animal/hostile/terror_spiders/mother.dm +++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/mother.dm @@ -38,6 +38,8 @@ if(can_die()) if(spider_awaymission && !is_away_level(z)) canspawn = FALSE + if(degenerate) + canspawn = FALSE if(canspawn) canspawn = FALSE for(var/i in 0 to spawn_count) From 082032b4d1ef2e57dfbe56981144416fc96397a9 Mon Sep 17 00:00:00 2001 From: Kyep Date: Thu, 28 Mar 2019 22:22:49 -0700 Subject: [PATCH 06/10] updated based on fox suggestion --- .../simple_animal/hostile/terror_spiders/terror_spiders.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/terror_spiders.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/terror_spiders.dm index edcfbd33906..f931a8c45f5 100644 --- a/code/modules/mob/living/simple_animal/hostile/terror_spiders/terror_spiders.dm +++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/terror_spiders.dm @@ -214,7 +214,7 @@ var/global/list/ts_spiderling_list = list() var/mob/living/carbon/human/H = G if(!(H.dna.species.reagent_tag & PROCESS_ORG) || (!H.dna.species.tox_mod)) can_poison = 0 - if(H.stat != DEAD && H.health < HEALTH_THRESHOLD_DEAD) // Intentionally not HEALTH_THRESHOLD_CRIT, as that is softcrit + if(!H.check_death_method() && H.health <= HEALTH_THRESHOLD_DEAD) // Intentionally not HEALTH_THRESHOLD_CRIT, as that is softcrit H.death() spider_specialattack(G,can_poison) else From f97c215046b9a9aab19ef1cb555b0f485587b786 Mon Sep 17 00:00:00 2001 From: Kyep Date: Fri, 29 Mar 2019 01:23:08 -0700 Subject: [PATCH 07/10] new terror empress sprite --- .../hostile/terror_spiders/empress.dm | 6 ++++++ icons/mob/terrorspider64.dmi | Bin 0 -> 29279 bytes 2 files changed, 6 insertions(+) create mode 100644 icons/mob/terrorspider64.dmi diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/empress.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/empress.dm index cdbf47b6d87..14353c4dfd0 100644 --- a/code/modules/mob/living/simple_animal/hostile/terror_spiders/empress.dm +++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/empress.dm @@ -24,6 +24,12 @@ canlay = 1000 spider_tier = TS_TIER_5 projectiletype = /obj/item/projectile/terrorqueenspit/empress + icon = 'icons/mob/terrorspider64.dmi' + pixel_x = -16 + mob_size = MOB_SIZE_LARGE + icon_state = "terror_empress" + icon_living = "terror_empress" + icon_dead = "terror_empress_dead" var/datum/action/innate/terrorspider/queen/empress/empresslings/empresslings_action var/datum/action/innate/terrorspider/queen/empress/empresserase/empresserase_action atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) diff --git a/icons/mob/terrorspider64.dmi b/icons/mob/terrorspider64.dmi new file mode 100644 index 0000000000000000000000000000000000000000..392ad43b3a769356938c294a58a1b7e285872d4e GIT binary patch literal 29279 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 Z&)nmAm*SemG7^g7)uM)h{{tKv^Fjas literal 0 HcmV?d00001 From cdeb68825d9b0fc139473cc83e3b5e5348f2ad34 Mon Sep 17 00:00:00 2001 From: Kyep Date: Mon, 1 Apr 2019 03:10:21 -0700 Subject: [PATCH 08/10] REVERT: terror spiders no longer ignore newcrit in this PR --- .../simple_animal/hostile/terror_spiders/terror_spiders.dm | 2 -- 1 file changed, 2 deletions(-) diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/terror_spiders.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/terror_spiders.dm index f931a8c45f5..39c03feb928 100644 --- a/code/modules/mob/living/simple_animal/hostile/terror_spiders/terror_spiders.dm +++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/terror_spiders.dm @@ -214,8 +214,6 @@ var/global/list/ts_spiderling_list = list() var/mob/living/carbon/human/H = G if(!(H.dna.species.reagent_tag & PROCESS_ORG) || (!H.dna.species.tox_mod)) can_poison = 0 - if(!H.check_death_method() && H.health <= HEALTH_THRESHOLD_DEAD) // Intentionally not HEALTH_THRESHOLD_CRIT, as that is softcrit - H.death() spider_specialattack(G,can_poison) else G.attack_animal(src) From d685e167257a55e97350e5a4f80c9b3104600a39 Mon Sep 17 00:00:00 2001 From: Kyep Date: Mon, 1 Apr 2019 03:15:25 -0700 Subject: [PATCH 09/10] balance: removes a white spider technique to make infections faster --- code/modules/surgery/organs/parasites.dm | 1 - 1 file changed, 1 deletion(-) diff --git a/code/modules/surgery/organs/parasites.dm b/code/modules/surgery/organs/parasites.dm index 536ca7a4f37..2a1292e1c9c 100644 --- a/code/modules/surgery/organs/parasites.dm +++ b/code/modules/surgery/organs/parasites.dm @@ -84,7 +84,6 @@ owner.adjustBruteLoss(-5) owner.adjustFireLoss(-5) owner.adjustToxLoss(-5) - egg_progress += 10 // Once at least one egg has hatched from you, you'll need help to reach medbay. if(eggs_hatched >= 1) From 552b52d8595493f4c8a42812ca464b0689077f71 Mon Sep 17 00:00:00 2001 From: Kyep Date: Mon, 1 Apr 2019 03:52:42 -0700 Subject: [PATCH 10/10] eggs self-delete, no greens in first wave, no heals --- code/modules/surgery/organs/parasites.dm | 29 ++++++++++++------------ 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/code/modules/surgery/organs/parasites.dm b/code/modules/surgery/organs/parasites.dm index 2a1292e1c9c..f330df260eb 100644 --- a/code/modules/surgery/organs/parasites.dm +++ b/code/modules/surgery/organs/parasites.dm @@ -52,10 +52,11 @@ var/egg_progress = 0 // # of on_life() cycles completed, unlike cycle_num this is reset on each hatch event var/egg_progress_per_hatch = 90 // if egg_progress > this, chance to hatch and reset egg_progress var/eggs_hatched = 0 // num of hatch events completed - var/eggs_max = 3 // max possible spiderlings you can get from a single infection if its left to run for a very long time var/awaymission_checked = FALSE var/awaymission_infection = FALSE // TRUE if infection occurred inside gateway - var/list/types_basic = list(/mob/living/simple_animal/hostile/poison/terror_spider/red, /mob/living/simple_animal/hostile/poison/terror_spider/gray, /mob/living/simple_animal/hostile/poison/terror_spider/green) + var/list/types_basic = list(/mob/living/simple_animal/hostile/poison/terror_spider/red, /mob/living/simple_animal/hostile/poison/terror_spider/gray) + var/list/types_adv = list(/mob/living/simple_animal/hostile/poison/terror_spider/red, /mob/living/simple_animal/hostile/poison/terror_spider/gray, /mob/living/simple_animal/hostile/poison/terror_spider/green) + /obj/item/organ/internal/body_egg/terror_eggs/on_life() // Safety first. @@ -78,18 +79,11 @@ qdel(src) return - // Detect dying hosts, and try to keep them alive (so spiderlings can hatch) at the cost of some growth progress. - if(owner.health < -25) - to_chat(owner,"You feel a strange, blissful senstation.") - owner.adjustBruteLoss(-5) - owner.adjustFireLoss(-5) - owner.adjustToxLoss(-5) - // Once at least one egg has hatched from you, you'll need help to reach medbay. if(eggs_hatched >= 1) owner.Confused(2) - if(egg_progress > egg_progress_per_hatch && eggs_hatched < eggs_max) + if(egg_progress > egg_progress_per_hatch) egg_progress -= egg_progress_per_hatch hatch_egg() @@ -106,15 +100,22 @@ return extra_progress /obj/item/organ/internal/body_egg/terror_eggs/proc/hatch_egg() + var/infection_completed = FALSE var/obj/structure/spider/spiderling/terror_spiderling/S = new(get_turf(owner)) - if(eggs_hatched >= 2) // on the third egg... - S.grow_as = /mob/living/simple_animal/hostile/poison/terror_spider/princess - else - S.grow_as = pick(types_basic) + switch(eggs_hatched) + if(0) // First spiderling + S.grow_as = pick(types_basic) + if(1) // Second + S.grow_as = pick(types_adv) + if(2) // Last + S.grow_as = /mob/living/simple_animal/hostile/poison/terror_spider/princess + infection_completed = TRUE S.immediate_ventcrawl = TRUE eggs_hatched++ to_chat(owner, "A strange prickling sensation moves across your skin... then suddenly the whole world seems to spin around you!") owner.Paralyse(10) + if(infection_completed && !QDELETED(src)) + qdel(src) /obj/item/organ/internal/body_egg/terror_eggs/remove(var/mob/living/carbon/M, var/special = 0) ..()