diff --git a/code/modules/admin/player_panel.dm b/code/modules/admin/player_panel.dm index 92cd3eb2803..f50bae146c3 100644 --- a/code/modules/admin/player_panel.dm +++ b/code/modules/admin/player_panel.dm @@ -548,6 +548,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) 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..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) @@ -42,7 +48,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 +66,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) 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) 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)) diff --git a/code/modules/surgery/organs/parasites.dm b/code/modules/surgery/organs/parasites.dm index 536ca7a4f37..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,19 +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) - egg_progress += 10 - // 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() @@ -107,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) ..() diff --git a/icons/mob/terrorspider64.dmi b/icons/mob/terrorspider64.dmi new file mode 100644 index 00000000000..392ad43b3a7 Binary files /dev/null and b/icons/mob/terrorspider64.dmi differ