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