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 f011becf6b8..ecfa1332630 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 @@ -99,7 +99,7 @@ for(var/thing in GLOB.ts_spiderlist) var/mob/living/simple_animal/hostile/poison/terror_spider/T = thing if(T.spider_tier < spider_tier) - T.degenerate = 1 + T.degenerate = TRUE to_chat(T, "Through the hivemind, the raw power of [src] floods into your body, burning it from the inside out!") for(var/obj/structure/spider/eggcluster/terror_eggcluster/T in GLOB.ts_egg_list) qdel(T) 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 65a3ff3db47..7135d6e95ab 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 @@ -49,7 +49,7 @@ S.grow_as = pick(/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) S.amount_grown = 50 // double speed growth visible_message("[src] breaks apart, the many spiders on its back scurrying everywhere!") - degenerate = 1 + degenerate = TRUE return ..() /mob/living/simple_animal/hostile/poison/terror_spider/mother/Destroy() diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/purple.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/purple.dm index 907e46b523e..eb55ff2a9b3 100644 --- a/code/modules/mob/living/simple_animal/hostile/terror_spiders/purple.dm +++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/purple.dm @@ -30,30 +30,26 @@ idle_ventcrawl_chance = 0 // stick to the queen! web_type = /obj/structure/spider/terrorweb/purple ai_spins_webs = FALSE - var/dcheck_counter = 0 - var/queen_visible = 1 + var/queen_visible = TRUE var/cycles_noqueen = 0 + var/max_queen_range = 20 /mob/living/simple_animal/hostile/poison/terror_spider/purple/death(gibbed) if(can_die() && spider_myqueen) - var/mob/living/simple_animal/hostile/poison/terror_spider/queen/Q = spider_myqueen - if(Q.stat != DEAD && !Q.ckey) - if(get_dist(src,Q) > 20) - if(!degenerate && !Q.degenerate) - degenerate = 1 - Q.DoLayTerrorEggs(/mob/living/simple_animal/hostile/poison/terror_spider/purple, 1) - visible_message("[src] chitters in the direction of [Q]!") + if(spider_myqueen.stat != DEAD && !spider_myqueen.ckey) + if(get_dist(src, spider_myqueen) > max_queen_range) + if(!degenerate && !spider_myqueen.degenerate) + degenerate = TRUE + spider_myqueen.DoLayTerrorEggs(/mob/living/simple_animal/hostile/poison/terror_spider/purple, 1) + visible_message("[src] chitters in the direction of [spider_myqueen]!") return ..() /mob/living/simple_animal/hostile/poison/terror_spider/purple/Life(seconds, times_fired) . = ..() if(stat != DEAD) // Can't use if(.) for this due to the fact it can sometimes return FALSE even when mob is alive. if(!degenerate && spider_myqueen) - if(dcheck_counter >= 10) - dcheck_counter = 0 + if(times_fired % 5 == 0) purple_distance_check() - else - dcheck_counter++ /mob/living/simple_animal/hostile/poison/terror_spider/purple/proc/purple_distance_check() if(spider_myqueen) @@ -61,34 +57,56 @@ if(Q) if(Q.stat == DEAD) spider_myqueen = null - degenerate = 1 - to_chat(src,"Your Queen has died! Her power no longer sustains you!") + degenerate = TRUE + to_chat(src, "[Q] has died! Her power no longer sustains you!") return - queen_visible = 0 - for(var/mob/living/M in view(src, vision_range)) - if(M == Q) - queen_visible = 1 - break + + if(get_dist(src, Q) < vision_range) + queen_visible = TRUE + else + queen_visible = FALSE + if(queen_visible) cycles_noqueen = 0 if(spider_debug) - to_chat(src,"Queen visible.") + to_chat(src, "[Q] visible.") else cycles_noqueen++ if(spider_debug) - to_chat(src,"Queen NOT visible. Cycles: [cycles_noqueen].") - if(cycles_noqueen == 3) - // one minute without queen sighted - to_chat(src,"You wonder where your Queen is.") - else if(cycles_noqueen == 6) - // two minutes without queen sighted - to_chat(src,"Without your Queen in sight, you feel yourself getting weaker...") - else if(cycles_noqueen >= 9) - // three minutes without queen sighted, kill them. - degenerate = 1 - to_chat(src,"Your link to your Queen has been broken! Your life force starts to drain away!") - melee_damage_lower = 5 - melee_damage_upper = 10 + to_chat(src, "[Q] NOT visible. Cycles: [cycles_noqueen].") + var/area/A = get_area(spider_myqueen) + switch(cycles_noqueen) + if(6) + // one minute without queen sighted + to_chat(src, "You have become separated from [Q]. Return to her in [A].") + if(12) + // two minutes without queen sighted + to_chat(src, "Your long separation from [Q] weakens you. Return to her in [A].") + if(18) + // three minutes without queen sighted, kill them. + degenerate = TRUE + to_chat(src, "Your link to [Q] has been broken! Your life force starts to drain away!") + melee_damage_lower = 5 + melee_damage_upper = 10 + +/mob/living/simple_animal/hostile/poison/terror_spider/purple/Stat() + ..() + // Provides a status panel indicator, showing purples how long they can be away from their queen before their hivemind link breaks, and they die. + // Uses because the status panel does NOT accept . + if(statpanel("Status") && ckey && stat == CONSCIOUS) + if(spider_myqueen) + var/area/A = get_area(spider_myqueen) + if(degenerate) + stat(null, "Link: BROKEN") // color=red + else if(queen_visible) + stat(null, "Link: [spider_myqueen] is near") // color=green + else if(cycles_noqueen >= 12) + stat(null, "Link: Critical - return to [spider_myqueen] in [A]") // color=red + else + stat(null, "Link: Warning - return to [spider_myqueen] in [A]") // color=orange + + + /obj/structure/spider/terrorweb/purple name = "thick web" diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/reproduction.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/reproduction.dm index 8961fcdddb5..6f7da65a1eb 100644 --- a/code/modules/mob/living/simple_animal/hostile/terror_spiders/reproduction.dm +++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/reproduction.dm @@ -11,8 +11,8 @@ layer = 2.75 max_integrity = 3 var/stillborn = FALSE - var/spider_myqueen = null - var/spider_mymother = null + var/mob/living/simple_animal/hostile/poison/terror_spider/queen/spider_myqueen = null + var/mob/living/simple_animal/hostile/poison/terror_spider/spider_mymother = null var/goto_mother = FALSE var/ventcrawl_chance = 30 // 30% every process(), assuming 33% wander does not trigger var/immediate_ventcrawl = TRUE @@ -197,8 +197,8 @@ desc = "A cluster of tiny spider eggs. They pulse with a strong inner life, and appear to have sharp thorns on the sides." icon_state = "eggs" var/spider_growinstantly = FALSE - var/spider_myqueen = null - var/spider_mymother = null + var/mob/living/simple_animal/hostile/poison/terror_spider/queen/spider_myqueen = null + var/mob/living/simple_animal/hostile/poison/terror_spider/spider_mymother = null var/spiderling_type = null var/spiderling_number = 1 var/list/enemies = list() 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 66f6141c797..010acbc96f2 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 @@ -86,7 +86,7 @@ GLOBAL_LIST_EMPTY(ts_spiderling_list) // desired: 20hp/minute unmolested, 40hp/min on food boost, assuming one tick every 2 seconds // 90/kill means bonus 30hp/kill regenerated over the next 1-2 minutes - var/degenerate = 0 // if 1, they slowly degen until they all die off. Used by high-level abilities only. + var/degenerate = FALSE // if TRUE, they slowly degen until they all die off. // Vision vision_range = 10 @@ -137,8 +137,8 @@ GLOBAL_LIST_EMPTY(ts_spiderling_list) var/list/spider_special_drops = list() var/attackstep = 0 var/attackcycles = 0 - var/spider_myqueen = null - var/spider_mymother = null + var/mob/living/simple_animal/hostile/poison/terror_spider/queen/spider_myqueen = null + var/mob/living/simple_animal/hostile/poison/terror_spider/spider_mymother = null var/mylocation = null var/chasecycles = 0 var/web_infects = 0 @@ -305,7 +305,7 @@ GLOBAL_LIST_EMPTY(ts_spiderling_list) visible_message("\The dead body of the [src] decomposes!") gib() else - if(degenerate > 0) + if(degenerate) adjustToxLoss(rand(1,10)) if(regen_points < regen_points_max) regen_points += regen_points_per_tick