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