mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-07-22 04:24:20 +01:00
Terror Spiders 5 - Fixes & Tweaks II
Fixes: - Spiders can no longer get stuck in vents, because they coccooned a mob on top of a pipe, and it broke the pipe. Similarly, spiders can no longer coccoon anchored objects of any kind. Fixes bug #6221 properly. - Spiders will no longer ignore mechs and space pods. This was leading to people cheesing the away mission with a ripley and a mech-mounted drill. - Prince, Queen, etc in away missions no longer stand still like statues. Grays still stay on their vents. - White spider in away mission can no longer infect people in a way that makes it possible to transfer spiderlings to the main station. - White spider eggs no exist for two minutes longer than they should after hatching from someone. - Signs in the away mission no longer contain the text 'improper'. - Spiderlings that hatch in the away mission with an opened queen lair no longer get stuck. - Two misplaced lights in the away mission have been fixed. - Queen nests in the away mission which live for a very long time can no longer depressurize their area by smashing walls. Updates: - Webs spun by white spiders will infect humans who are silly enough to walk into them. Hardsuits protect against this. - Spiders will now be quicker to open doors. This should stop them getting hung up on doors they can open. - Empress has been tweaked to have an 'erase brood' ability (wipes infestation, for adminbus), and her spit does BURN instead of TOX.
This commit is contained in:
@@ -90,6 +90,17 @@
|
||||
var/mob/living/simple_animal/hostile/poison/terror_spider/queen/user = owner
|
||||
user.QueenFakeLings()
|
||||
|
||||
// ---------- EMPRESS
|
||||
|
||||
/datum/action/innate/terrorspider/queen/empress/empresserase
|
||||
name = "Erase Brood"
|
||||
icon_icon = 'icons/effects/blood.dmi'
|
||||
button_icon_state = "mgibbl1"
|
||||
|
||||
/datum/action/innate/terrorspider/queen/empress/empresserase/Activate()
|
||||
var/mob/living/simple_animal/hostile/poison/terror_spider/queen/empress/user = owner
|
||||
user.EraseBrood()
|
||||
|
||||
// ---------- WEB
|
||||
|
||||
/mob/living/simple_animal/hostile/poison/terror_spider/proc/Web(var/thick = 0)
|
||||
@@ -109,6 +120,10 @@
|
||||
W.creator_ckey = ckey
|
||||
if(thick)
|
||||
W.opacity = 1
|
||||
W.name = "thick terror web"
|
||||
if(web_infects)
|
||||
W.infectious = 1
|
||||
W.name = "sharp terror web"
|
||||
|
||||
/obj/effect/spider/terrorweb
|
||||
name = "terror web"
|
||||
@@ -119,6 +134,7 @@
|
||||
health = 20 // two welders, or one laser shot (15 for the normal spider webs)
|
||||
icon_state = "stickyweb1"
|
||||
var/creator_ckey = null
|
||||
var/infectious = 0
|
||||
|
||||
/obj/effect/spider/terrorweb/New()
|
||||
..()
|
||||
@@ -146,8 +162,14 @@
|
||||
M.Weaken(4) // 8 seconds.
|
||||
DeCloakNearby()
|
||||
if(iscarbon(mover))
|
||||
var/mob/living/carbon/C = mover
|
||||
if(!IsTSInfected(C) && infectious)
|
||||
var/inject_target = pick("chest","head")
|
||||
if(C.can_inject(null, 0, inject_target, 0))
|
||||
to_chat(C, "<span class='danger'>[src] slices into you!</span>")
|
||||
new /obj/item/organ/internal/body_egg/terror_eggs(C)
|
||||
spawn(70)
|
||||
if(mover.loc == loc)
|
||||
if(C.loc == loc)
|
||||
qdel(src)
|
||||
return 1
|
||||
else
|
||||
@@ -198,11 +220,12 @@
|
||||
C.pixel_x = cocoon_target.pixel_x
|
||||
C.pixel_y = cocoon_target.pixel_y
|
||||
for(var/obj/O in C.loc)
|
||||
if(istype(O, /obj/item))
|
||||
O.loc = C
|
||||
else if(istype(O, /obj/machinery) || istype(O, /obj/structure))
|
||||
O.loc = C
|
||||
large_cocoon = 1
|
||||
if(!O.anchored)
|
||||
if(istype(O, /obj/item))
|
||||
O.loc = C
|
||||
else if(istype(O, /obj/machinery) || istype(O, /obj/structure))
|
||||
O.loc = C
|
||||
large_cocoon = 1
|
||||
for(var/mob/living/L in C.loc)
|
||||
if(istype(L, /mob/living/simple_animal/hostile/poison/terror_spider))
|
||||
continue
|
||||
|
||||
@@ -24,9 +24,16 @@
|
||||
rapid = 1
|
||||
canlay = 1000
|
||||
spider_tier = TS_TIER_5
|
||||
projectiletype = /obj/item/projectile/terrorqueenspit/empress
|
||||
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)
|
||||
|
||||
/mob/living/simple_animal/hostile/poison/terror_spider/queen/empress/New()
|
||||
..()
|
||||
empresserase_action = new()
|
||||
empresserase_action.Grant(src)
|
||||
|
||||
/mob/living/simple_animal/hostile/poison/terror_spider/queen/empress/handle_automated_action()
|
||||
return
|
||||
|
||||
@@ -88,5 +95,10 @@
|
||||
qdel(T)
|
||||
for(var/obj/effect/spider/spiderling/terror_spiderling/T in ts_spiderling_list)
|
||||
T.stillborn = 1
|
||||
to_chat(src, "<span class='userdanger'>Brood will die off shortly.</span>")
|
||||
to_chat(src, "<span class='userdanger'>All Terror Spiders, except yourself, will die off shortly.</span>")
|
||||
|
||||
|
||||
/obj/item/projectile/terrorqueenspit/empress
|
||||
damage_type = BURN
|
||||
damage = 30
|
||||
bonus_tox = 0
|
||||
@@ -30,7 +30,7 @@
|
||||
var/lastnestsetup = 0
|
||||
var/neststep = 0
|
||||
var/hasnested = 0
|
||||
var/spider_max_per_nest = 20 // above this, queen stops spawning more, and declares war.
|
||||
var/spider_max_per_nest = 25 // above this, AI queens become stable
|
||||
var/canlay = 4 // main counter for egg-laying ability! # = num uses, incremented at intervals
|
||||
var/eggslaid = 0
|
||||
var/spider_can_fakelings = 3 // spawns defective spiderlings that don't grow up, used to freak out crew, atmosphere
|
||||
@@ -344,6 +344,7 @@
|
||||
damage = 0
|
||||
icon_state = "toxin"
|
||||
damage_type = TOX
|
||||
var/bonus_tox = 30
|
||||
|
||||
/obj/item/projectile/terrorqueenspit/on_hit(mob/living/carbon/target)
|
||||
if(ismob(target))
|
||||
@@ -352,4 +353,4 @@
|
||||
if(L.can_inject(null, 0, "chest", 0))
|
||||
L.reagents.add_reagent("terror_queen_toxin", 15)
|
||||
if(!isterrorspider(L))
|
||||
L.adjustToxLoss(30)
|
||||
L.adjustToxLoss(bonus_tox)
|
||||
@@ -21,7 +21,7 @@
|
||||
continue
|
||||
if(iscarbon(H))
|
||||
var/mob/living/carbon/C = H
|
||||
if(IsInfected(C)) // only target the infected if they're attacking us. Even then, lowest priority.
|
||||
if(IsTSInfected(C)) // only target the infected if they're attacking us. Even then, lowest priority.
|
||||
if(C in enemies)
|
||||
targets3 += C
|
||||
continue
|
||||
@@ -65,15 +65,13 @@
|
||||
targets2 += H
|
||||
else
|
||||
targets3 += H
|
||||
if(health < maxHealth)
|
||||
// if we're hurt, and ONLY if we're hurt, do the additional check for mechs/space pods. Save processing time.
|
||||
for(var/obj/mecha/M in view(src, vision_range))
|
||||
if(get_dist(M, src) <= 2)
|
||||
targets2 += M
|
||||
else
|
||||
targets3 += M
|
||||
for(var/obj/spacepod/S in view(src, vision_range))
|
||||
targets3 += S
|
||||
for(var/obj/mecha/M in view(src, vision_range))
|
||||
if(get_dist(M, src) <= 2)
|
||||
targets2 += M
|
||||
else
|
||||
targets3 += M
|
||||
for(var/obj/spacepod/S in view(src, vision_range))
|
||||
targets3 += S
|
||||
if(targets1.len)
|
||||
return targets1
|
||||
if(targets2.len)
|
||||
@@ -140,7 +138,10 @@
|
||||
last_spins_webs = world.time
|
||||
var/obj/effect/spider/terrorweb/T = locate() in get_turf(src)
|
||||
if(!T)
|
||||
new /obj/effect/spider/terrorweb(get_turf(src))
|
||||
var/obj/effect/spider/terrorweb/W = new /obj/effect/spider/terrorweb(loc)
|
||||
if(web_infects)
|
||||
W.infectious = 1
|
||||
W.name = "sharp terror web"
|
||||
visible_message("<span class='notice'>[src] puts up some spider webs.</span>")
|
||||
else if(ai_ventcrawls && world.time > (last_ventcrawl_time + my_ventcrawl_freq))
|
||||
if(prob(idle_ventcrawl_chance))
|
||||
@@ -211,7 +212,7 @@
|
||||
if(m2 == mylocation)
|
||||
chasecycles++
|
||||
ClearObstacle(get_turf(mygoal))
|
||||
if(chasecycles >= 2)
|
||||
if(chasecycles >= 1)
|
||||
chasecycles = 0
|
||||
if(spider_opens_doors)
|
||||
var/tgt_dir = get_dir(src,mygoal)
|
||||
|
||||
@@ -130,6 +130,7 @@ var/global/list/ts_spiderling_list = list()
|
||||
var/spider_myqueen = null
|
||||
var/mylocation = null
|
||||
var/chasecycles = 0
|
||||
var/web_infects = 0
|
||||
|
||||
var/datum/action/innate/terrorspider/web/web_action
|
||||
var/datum/action/innate/terrorspider/wrap/wrap_action
|
||||
@@ -263,7 +264,6 @@ var/global/list/ts_spiderling_list = list()
|
||||
// these are static spiders, specifically for the UO71 away mission, make them stay in place
|
||||
ai_ventcrawls = 0
|
||||
spider_placed = 1
|
||||
wander = 0
|
||||
else
|
||||
ts_count_alive_station++
|
||||
// after 30 seconds, assuming nobody took control of it yet, offer it to ghosts.
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
move_to_delay = 4
|
||||
spider_tier = TS_TIER_2
|
||||
loot = list(/obj/item/clothing/accessory/medal)
|
||||
web_infects = 1
|
||||
|
||||
|
||||
/mob/living/simple_animal/hostile/poison/terror_spider/white/LoseTarget()
|
||||
@@ -42,8 +43,8 @@
|
||||
return
|
||||
var/inject_target = pick("chest","head")
|
||||
L.attack_animal(src)
|
||||
if(L.stunned || L.paralysis || L.can_inject(null,0,inject_target,0))
|
||||
if(!IsInfected(L))
|
||||
if(L.stunned || L.paralysis || L.can_inject(null, 0, inject_target, 0))
|
||||
if(!IsTSInfected(L))
|
||||
visible_message("<span class='danger'>[src] buries its long fangs deep into the [inject_target] of [L]!</span>")
|
||||
new /obj/item/organ/internal/body_egg/terror_eggs(L)
|
||||
if(!ckey)
|
||||
@@ -54,7 +55,7 @@
|
||||
L.Weaken(5)
|
||||
L.Stun(5)
|
||||
|
||||
/mob/living/simple_animal/hostile/poison/terror_spider/proc/IsInfected(mob/living/carbon/C) // Terror AI requires this
|
||||
/proc/IsTSInfected(mob/living/carbon/C) // Terror AI requires this
|
||||
if(C.get_int_organ(/obj/item/organ/internal/body_egg))
|
||||
return 1
|
||||
return 0
|
||||
Reference in New Issue
Block a user