diff --git a/code/modules/awaymissions/mission_code/UO71-terrorspiders.dm b/code/modules/awaymissions/mission_code/UO71-terrorspiders.dm
index a3b8db53bf2..52d8caa6f74 100644
--- a/code/modules/awaymissions/mission_code/UO71-terrorspiders.dm
+++ b/code/modules/awaymissions/mission_code/UO71-terrorspiders.dm
@@ -186,6 +186,7 @@
force = 10
origin_tech = null
selfcharge = 1
+ can_charge = 0
var/inawaymission = 1
/obj/item/weapon/gun/energy/laser/awaymission_aeg/process()
diff --git a/code/modules/events/event_container.dm b/code/modules/events/event_container.dm
index 89ae637b84b..56d7d374167 100644
--- a/code/modules/events/event_container.dm
+++ b/code/modules/events/event_container.dm
@@ -191,7 +191,7 @@ var/list/event_last_fired = list()
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Abductor Visit", /datum/event/abductor, 80, is_one_shot = 1),
new /datum/event_meta/alien(EVENT_LEVEL_MAJOR, "Alien Infestation", /datum/event/alien_infestation, 0, list(ASSIGNMENT_SECURITY = 30), 1),
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Traders", /datum/event/traders, 0, is_one_shot = 1),
- new /datum/event_meta(EVENT_LEVEL_MAJOR, "Terror Spiders", /datum/event/spider_terror, 0, list(ASSIGNMENT_SECURITY = 20), is_one_shot = 1),
+ new /datum/event_meta(EVENT_LEVEL_MAJOR, "Terror Spiders", /datum/event/spider_terror, 0, list(ASSIGNMENT_SECURITY = 15), is_one_shot = 1),
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Slaughter Demon", /datum/event/spawn_slaughter, 15, is_one_shot = 1)
)
diff --git a/code/modules/events/spider_terror.dm b/code/modules/events/spider_terror.dm
index 2623bad0cfe..aed998713c2 100644
--- a/code/modules/events/spider_terror.dm
+++ b/code/modules/events/spider_terror.dm
@@ -1,6 +1,6 @@
/datum/event/spider_terror
- announceWhen = 120
+ announceWhen = 240
var/spawncount = 1
/datum/event/spider_terror/setup()
@@ -22,7 +22,7 @@
switch(infestation_type)
if(1)
spider_type = /mob/living/simple_animal/hostile/poison/terror_spider/green
- spawncount = 3
+ spawncount = 4
if(2)
spider_type = /mob/living/simple_animal/hostile/poison/terror_spider/white
spawncount = 2
diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/actions.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/actions.dm
index 276fb905a7b..9547fa23b61 100644
--- a/code/modules/mob/living/simple_animal/hostile/terror_spiders/actions.dm
+++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/actions.dm
@@ -7,7 +7,7 @@
/datum/action/innate/terrorspider/web/Activate()
var/mob/living/simple_animal/hostile/poison/terror_spider/user = owner
- user.Web()
+ user.Web(0)
/datum/action/innate/terrorspider/wrap
name = "Wrap"
@@ -32,14 +32,25 @@
// ---------- PRINCE ACTIONS
-/datum/action/innate/terrorspider/princesmash
+/datum/action/innate/terrorspider/thickweb
+ name = "Thick Web"
+ icon_icon = 'icons/effects/effects.dmi'
+ button_icon_state = "stickyweb2"
+
+/datum/action/innate/terrorspider/thickweb/Activate()
+ var/mob/living/simple_animal/hostile/poison/terror_spider/user = owner
+ user.Web(1)
+
+// ---------- BOSS ACTIONS
+
+/datum/action/innate/terrorspider/ventsmash
name = "Smash Welded Vent"
icon_icon = 'icons/atmos/vent_pump.dmi'
button_icon_state = "map_vent"
-/datum/action/innate/terrorspider/princesmash/Activate()
- var/mob/living/simple_animal/hostile/poison/terror_spider/prince/user = owner
- user.DoPrinceSmash()
+/datum/action/innate/terrorspider/ventsmash/Activate()
+ var/mob/living/simple_animal/hostile/poison/terror_spider/user = owner
+ user.DoVentSmash()
// ---------- QUEEN ACTIONS
@@ -50,7 +61,7 @@
/datum/action/innate/terrorspider/queen/queennest/Activate()
var/mob/living/simple_animal/hostile/poison/terror_spider/queen/user = owner
- user.NestMode()
+ user.NestPrompt()
/datum/action/innate/terrorspider/queen/queensense
name = "Hive Sense"
@@ -81,7 +92,7 @@
// ---------- WEB
-/mob/living/simple_animal/hostile/poison/terror_spider/proc/Web()
+/mob/living/simple_animal/hostile/poison/terror_spider/proc/Web(var/thick = 0)
var/turf/mylocation = loc
visible_message("[src] begins to secrete a sticky substance.")
if(do_after(src, delay_web, target = loc))
@@ -96,6 +107,8 @@
else
var/obj/effect/spider/terrorweb/W = new /obj/effect/spider/terrorweb(loc)
W.creator_ckey = ckey
+ if(thick)
+ W.opacity = 1
/obj/effect/spider/terrorweb
name = "terror web"
@@ -214,7 +227,7 @@
busy = 0
stop_automated_movement = 0
-/mob/living/simple_animal/hostile/poison/terror_spider/prince/proc/DoPrinceSmash()
+/mob/living/simple_animal/hostile/poison/terror_spider/proc/DoVentSmash()
for(var/obj/machinery/atmospherics/unary/vent_pump/P in view(1,src))
if(P.welded)
P.welded = 0
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 8e3f5ee20cd..fa162ab8848 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
@@ -25,7 +25,12 @@
spider_tier = TS_TIER_3
spider_opens_doors = 2
var/canspawn = 1
+ var/datum/action/innate/terrorspider/ventsmash/ventsmash_action
+/mob/living/simple_animal/hostile/poison/terror_spider/mother/New()
+ ..()
+ ventsmash_action = new()
+ ventsmash_action.Grant(src)
/mob/living/simple_animal/hostile/poison/terror_spider/mother/death(gibbed)
if(canspawn)
@@ -38,6 +43,7 @@
else if(prob(10))
S.grow_as = pick(/mob/living/simple_animal/hostile/poison/terror_spider/black, /mob/living/simple_animal/hostile/poison/terror_spider/green)
S.amount_grown = 50 // double speed growth
+ S.immediate_ventcrawl = 1
visible_message("[src] breaks apart, the many spiders on its back scurrying everywhere!")
degenerate = 1
..()
diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/prince.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/prince.dm
index b18f1c18492..40e6515668f 100644
--- a/code/modules/mob/living/simple_animal/hostile/terror_spiders/prince.dm
+++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/prince.dm
@@ -19,8 +19,8 @@
maxHealth = 600 // 30 laser shots
health = 600
regen_points_per_hp = 6 // double the normal - IE halved regen speed
- melee_damage_lower = 20
- melee_damage_upper = 30
+ melee_damage_lower = 30
+ melee_damage_upper = 40
move_to_delay = 4 // faster than normal
ventcrawler = 0
ai_ventcrawls = 0
@@ -29,13 +29,12 @@
idle_ventcrawl_chance = 0
spider_tier = TS_TIER_3
spider_opens_doors = 2
- var/datum/action/innate/terrorspider/princesmash/princesmash_action
-
+ var/datum/action/innate/terrorspider/thickweb/thickweb_action
/mob/living/simple_animal/hostile/poison/terror_spider/prince/New()
..()
- princesmash_action = new()
- princesmash_action.Grant(src)
+ thickweb_action = new()
+ thickweb_action.Grant(src)
/mob/living/simple_animal/hostile/poison/terror_spider/prince/death(gibbed)
if(!hasdied)
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 3c7a9ca5677..e4a6a5da3cd 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
@@ -18,6 +18,7 @@
icon_dead = "terror_queen_dead"
maxHealth = 200
health = 200
+ regen_points_per_tick = 3
melee_damage_lower = 10
melee_damage_upper = 20
move_to_delay = 15 // yeah, this is very slow, but
@@ -30,7 +31,7 @@
var/neststep = 0
var/hasnested = 0
var/spider_max_per_nest = 20 // above this, queen stops spawning more, and declares war.
- var/canlay = 0 // main counter for egg-laying ability! # = num uses, incremented at intervals
+ 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
idle_ventcrawl_chance = 0
@@ -47,12 +48,14 @@
var/datum/action/innate/terrorspider/queen/queensense/queensense_action
var/datum/action/innate/terrorspider/queen/queeneggs/queeneggs_action
var/datum/action/innate/terrorspider/queen/queenfakelings/queenfakelings_action
-
+ var/datum/action/innate/terrorspider/ventsmash/ventsmash_action
/mob/living/simple_animal/hostile/poison/terror_spider/queen/New()
..()
queennest_action = new()
queennest_action.Grant(src)
+ ventsmash_action = new()
+ ventsmash_action.Grant(src)
spider_myqueen = src
if(spider_awaymission)
spider_growinstantly = 1
@@ -160,8 +163,6 @@
if(prob(20))
var/obj/effect/spider/eggcluster/terror_eggcluster/N = locate() in get_turf(src)
if(!N)
- if(!spider_awaymission)
- QueenFakeLings()
spider_lastspawn = world.time
DoLayTerrorEggs(/mob/living/simple_animal/hostile/poison/terror_spider/red, 2, 1)
neststep = 5
@@ -215,6 +216,11 @@
DoLayTerrorEggs(/mob/living/simple_animal/hostile/poison/terror_spider/purple, 2, 0)
neststep = 6
+/mob/living/simple_animal/hostile/poison/terror_spider/queen/proc/NestPrompt()
+ var/confirm = alert(src, "Are you sure you want to nest? You will be able to lay eggs, and smash walls, but not ventcrawl.","Nest?","Yes","No")
+ if(confirm == "Yes")
+ NestMode()
+
/mob/living/simple_animal/hostile/poison/terror_spider/queen/proc/NestMode()
queeneggs_action = new()
queeneggs_action.Grant(src)
@@ -316,6 +322,9 @@
C.toggle_cam(src, 0)
/mob/living/simple_animal/hostile/poison/terror_spider/queen/proc/QueenFakeLings()
+ if(eggslaid < 10)
+ to_chat(src, "You must lay at least 10 eggs before doing this.")
+ return
if(spider_can_fakelings)
spider_can_fakelings--
var/numlings = 15
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 4e58a858504..f6188ced362 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
@@ -15,6 +15,7 @@
var/spider_myqueen = null
var/use_vents = 1
var/list/enemies = list()
+ var/immediate_ventcrawl = 0
/obj/effect/spider/spiderling/terror_spiderling/New()
..()
@@ -73,8 +74,10 @@
var/list/nearby = oview(10, src)
if(nearby.len)
var/target_atom = pick(nearby)
- walk_to(src, target_atom)
- else if(prob(10) && use_vents)
+ if(!istype(get_turf(target_atom),/turf/space))
+ walk_to(src, target_atom)
+ else if(immediate_ventcrawl || (prob(10) && use_vents))
+ immediate_ventcrawl = 0
for(var/obj/machinery/atmospherics/unary/vent_pump/v in view(7,src))
if(!v.welded)
entry_vent = v