Merge pull request #14000 from Kyep/terror_purple_miniupdate

Purple Terror Fix, Tweak, Status Panel
This commit is contained in:
AffectedArc07
2020-10-25 21:20:15 +00:00
committed by GitHub
5 changed files with 62 additions and 44 deletions
@@ -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, "<span class='userdanger'>Through the hivemind, the raw power of [src] floods into your body, burning it from the inside out!</span>")
for(var/obj/structure/spider/eggcluster/terror_eggcluster/T in GLOB.ts_egg_list)
qdel(T)
@@ -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("<span class='userdanger'>[src] breaks apart, the many spiders on its back scurrying everywhere!</span>")
degenerate = 1
degenerate = TRUE
return ..()
/mob/living/simple_animal/hostile/poison/terror_spider/mother/Destroy()
@@ -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("<span class='notice'>[src] chitters in the direction of [Q]!</span>")
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("<span class='notice'>[src] chitters in the direction of [spider_myqueen]!</span>")
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,"<span class='userdanger'>Your Queen has died! Her power no longer sustains you!</span>")
degenerate = TRUE
to_chat(src, "<span class='userdanger'>[Q] has died! Her power no longer sustains you!</span>")
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,"<span class='notice'>Queen visible.</span>")
to_chat(src, "<span class='notice'>[Q] visible.</span>")
else
cycles_noqueen++
if(spider_debug)
to_chat(src,"<span class='danger'>Queen NOT visible. Cycles: [cycles_noqueen].</span>")
if(cycles_noqueen == 3)
// one minute without queen sighted
to_chat(src,"<span class='notice'>You wonder where your Queen is.</span>")
else if(cycles_noqueen == 6)
// two minutes without queen sighted
to_chat(src,"<span class='danger'>Without your Queen in sight, you feel yourself getting weaker...</span>")
else if(cycles_noqueen >= 9)
// three minutes without queen sighted, kill them.
degenerate = 1
to_chat(src,"<span class='userdanger'>Your link to your Queen has been broken! Your life force starts to drain away!</span>")
melee_damage_lower = 5
melee_damage_upper = 10
to_chat(src, "<span class='danger'>[Q] NOT visible. Cycles: [cycles_noqueen].</span>")
var/area/A = get_area(spider_myqueen)
switch(cycles_noqueen)
if(6)
// one minute without queen sighted
to_chat(src, "<span class='danger'>You have become separated from [Q]. Return to her in [A].</span>")
if(12)
// two minutes without queen sighted
to_chat(src, "<span class='danger'>Your long separation from [Q] weakens you. Return to her in [A].</span>")
if(18)
// three minutes without queen sighted, kill them.
degenerate = TRUE
to_chat(src, "<span class='userdanger'>Your link to [Q] has been broken! Your life force starts to drain away!</span>")
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 <font color='#X'> because the status panel does NOT accept <span class='X'>.
if(statpanel("Status") && ckey && stat == CONSCIOUS)
if(spider_myqueen)
var/area/A = get_area(spider_myqueen)
if(degenerate)
stat(null, "Link: <font color='#eb4034'>BROKEN</font>") // color=red
else if(queen_visible)
stat(null, "Link: <font color='#32a852'>[spider_myqueen] is near</font>") // color=green
else if(cycles_noqueen >= 12)
stat(null, "Link: <font color='#eb4034'>Critical - return to [spider_myqueen] in [A]</font>") // color=red
else
stat(null, "Link: <font color='#fcba03'>Warning - return to [spider_myqueen] in [A]</font>") // color=orange
/obj/structure/spider/terrorweb/purple
name = "thick web"
@@ -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()
@@ -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("<span class='notice'>\The dead body of the [src] decomposes!</span>")
gib()
else
if(degenerate > 0)
if(degenerate)
adjustToxLoss(rand(1,10))
if(regen_points < regen_points_max)
regen_points += regen_points_per_tick