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 8a2cb26bc4c..89fe8e87431 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(0) + user.Web() /datum/action/innate/terrorspider/wrap name = "Wrap" @@ -30,16 +30,6 @@ var/mob/living/simple_animal/hostile/poison/terror_spider/green/user = owner user.DoLayGreenEggs() -// ---------- PRINCE ACTIONS - -/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 @@ -125,7 +115,9 @@ // ---------- WEB -/mob/living/simple_animal/hostile/poison/terror_spider/proc/Web(var/thick = 0) +/mob/living/simple_animal/hostile/poison/terror_spider/proc/Web() + if(!web_type) + return var/turf/mylocation = loc visible_message("[src] begins to secrete a sticky substance.") if(do_after(src, delay_web, target = loc)) @@ -138,15 +130,8 @@ if(T) to_chat(src, "There is already a web here.") else - var/obj/structure/spider/terrorweb/W = new /obj/structure/spider/terrorweb(loc) + var/obj/structure/spider/terrorweb/W = new web_type(loc) W.creator_ckey = ckey - if(thick) - W.opacity = 1 - W.name = "thick terror web" - W.health = W.health * 2 - if(web_infects) - W.infectious = 1 - W.name = "sharp terror web" /obj/structure/spider/terrorweb name = "terror web" @@ -157,7 +142,6 @@ 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/structure/spider/terrorweb/New() ..() @@ -186,11 +170,7 @@ 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, "[src] slices into you!") - new /obj/item/organ/internal/body_egg/terror_eggs(C) + web_special_ability(C) spawn(70) if(C.loc == loc) qdel(src) @@ -208,6 +188,9 @@ return ..() +/obj/structure/spider/terrorweb/proc/web_special_ability(var/mob/living/carbon/C) + return + // ---------- WRAP /mob/living/simple_animal/hostile/poison/terror_spider/proc/FindWrapTarget() diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/black.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/black.dm index 2c30e61969a..1a9d01085b4 100644 --- a/code/modules/mob/living/simple_animal/hostile/terror_spiders/black.dm +++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/black.dm @@ -21,6 +21,7 @@ health = 120 melee_damage_lower = 5 melee_damage_upper = 10 + web_type = /obj/structure/spider/terrorweb/black stat_attack = 1 // ensures they will target people in crit, too! spider_tier = TS_TIER_2 @@ -42,4 +43,16 @@ step_away(src, L) LoseTarget() step_away(src, L) - visible_message("[src] jumps away from [L]!") \ No newline at end of file + visible_message("[src] jumps away from [L]!") + + +/obj/structure/spider/terrorweb/black + name = "dark terror web" + +/obj/structure/spider/terrorweb/black/web_special_ability(var/mob/living/carbon/C) + if(istype(C)) + if(!C.reagents.has_reagent("terror_black_toxin", 60)) + var/inject_target = pick("chest","head") + if(C.can_inject(null, 0, inject_target, 0)) + to_chat(C, "[src] slices into you!") + C.reagents.add_reagent("terror_black_toxin", 30) \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/brown.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/brown.dm index af5bd4495ee..389397da95c 100644 --- a/code/modules/mob/living/simple_animal/hostile/terror_spiders/brown.dm +++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/brown.dm @@ -26,6 +26,7 @@ ai_ventbreaker = 1 freq_ventcrawl_combat = 600 // Ventcrawls very frequently, breaking open vents as it goes. freq_ventcrawl_idle = 1800 + web_type = null var/datum/action/innate/terrorspider/ventsmash/ventsmash_action /mob/living/simple_animal/hostile/poison/terror_spider/brown/New() diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/gray.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/gray.dm index c24a7ef4369..8baafb66aa5 100644 --- a/code/modules/mob/living/simple_animal/hostile/terror_spiders/gray.dm +++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/gray.dm @@ -25,6 +25,7 @@ wander = 0 // wandering defeats the purpose of stealth idle_vision_range = 3 // very low idle vision range delay_web = 20 // double speed + web_type = /obj/structure/spider/terrorweb/gray /mob/living/simple_animal/hostile/poison/terror_spider/gray/spider_specialattack(mob/living/carbon/human/L, poisonable) @@ -136,3 +137,7 @@ if(get_dist(src,temp_vent) > 0 && get_dist(src,temp_vent) < 5) step_to(src,temp_vent) // if you're bumped off your vent, try to get back to it + +/obj/structure/spider/terrorweb/gray + alpha = 100 + name = "stealthy terror web" \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/green.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/green.dm index a71f656f18e..539c2602f5c 100644 --- a/code/modules/mob/living/simple_animal/hostile/terror_spiders/green.dm +++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/green.dm @@ -20,6 +20,7 @@ health = 150 melee_damage_lower = 10 melee_damage_upper = 20 + web_type = /obj/structure/spider/terrorweb/green var/feedings_to_lay = 2 var/datum/action/innate/terrorspider/greeneggs/greeneggs_action @@ -86,4 +87,13 @@ visible_message("[src] buries its fangs deep into the [inject_target] of [target]!") else visible_message("[src] bites [target], but cannot inject venom into [target.p_their()] [inject_target]!") - L.attack_animal(src) \ No newline at end of file + L.attack_animal(src) + +/obj/structure/spider/terrorweb/green + name = "slimy terror web" + +/obj/structure/spider/terrorweb/green/web_special_ability(var/mob/living/carbon/C) + if(istype(C)) + if(C.eye_blurry < 60) + C.AdjustEyeBlurry(30) + 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 1a34936ebfb..b952e456137 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 @@ -23,6 +23,7 @@ idle_ventcrawl_chance = 5 spider_tier = TS_TIER_3 spider_opens_doors = 2 + web_type = null var/canspawn = TRUE var/datum/action/innate/terrorspider/ventsmash/ventsmash_action 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 e0ac2a54927..d0ddc369517 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 @@ -27,12 +27,8 @@ idle_ventcrawl_chance = 0 spider_tier = TS_TIER_3 spider_opens_doors = 2 - var/datum/action/innate/terrorspider/thickweb/thickweb_action - -/mob/living/simple_animal/hostile/poison/terror_spider/prince/New() - ..() - thickweb_action = new() - thickweb_action.Grant(src) + web_type = /obj/structure/spider/terrorweb/purple + ai_spins_webs = FALSE /mob/living/simple_animal/hostile/poison/terror_spider/prince/death(gibbed) if(can_die() && !hasdied && spider_uo71) diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/princess.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/princess.dm index 1b135e44548..0d044374cd5 100644 --- a/code/modules/mob/living/simple_animal/hostile/terror_spiders/princess.dm +++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/princess.dm @@ -6,7 +6,7 @@ // -------------: AI: as green, but will evolve to queen when it can // -------------: SPECIAL: can evolve into a queen, if fed enough // -------------: TO FIGHT IT: kill it before it evolves -// -------------: SPRITES FROM: Chai in the Paradise Discord +// -------------: SPRITES FROM: FoS, http://nanotrasen.se/phpBB3/memberlist.php?mode=viewprofile&u=386 /mob/living/simple_animal/hostile/poison/terror_spider/princess name = "Princess of Terror spider" @@ -25,6 +25,7 @@ idle_ventcrawl_chance = 5 spider_tier = TS_TIER_3 spider_opens_doors = 2 + web_type = /obj/structure/spider/terrorweb/queen var/feedings_to_evolve = 3 var/datum/action/innate/terrorspider/ventsmash/ventsmash_action var/datum/action/innate/terrorspider/evolvequeen/evolvequeen_action @@ -63,4 +64,5 @@ else if(fed >= feedings_to_evolve) evolve_to_queen() else if(world.time > (last_cocoon_object + freq_cocoon_object)) - seek_cocoon_target() \ No newline at end of file + seek_cocoon_target() + 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 55a15980d64..bd8f50c4be2 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 @@ -28,15 +28,11 @@ ai_ventcrawls = 0 environment_smash = ENVIRONMENT_SMASH_RWALLS 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/cycles_noqueen = 0 - var/datum/action/innate/terrorspider/thickweb/thickweb_action - -/mob/living/simple_animal/hostile/poison/terror_spider/purple/New() - ..() - thickweb_action = new() - thickweb_action.Grant(src) /mob/living/simple_animal/hostile/poison/terror_spider/purple/death(gibbed) if(can_die() && spider_myqueen) @@ -93,3 +89,8 @@ 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 + +/obj/structure/spider/terrorweb/purple + name = "thick terror web" + opacity = 1 + health = 40 \ No newline at end of file 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 d26d928b880..cee5c2bf38e 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 @@ -31,6 +31,7 @@ projectiletype = /obj/item/projectile/terrorqueenspit spider_tier = TS_TIER_4 spider_opens_doors = 2 + web_type = /obj/structure/spider/terrorweb/queen var/spider_spawnfrequency = 1200 // 120 seconds var/spider_spawnfrequency_stable = 1200 // 120 seconds. Spawnfrequency is set to this on ai spiders once nest setup is complete. var/spider_lastspawn = 0 @@ -347,3 +348,13 @@ L.Hallucinate(400) if(!isterrorspider(L)) L.adjustToxLoss(bonus_tox) + +/obj/structure/spider/terrorweb/queen + name = "toxic terror web" + +/obj/structure/spider/terrorweb/queen/web_special_ability(var/mob/living/carbon/C) + if(istype(C)) + var/inject_target = pick("chest","head") + if(C.can_inject(null, 0, inject_target, 0)) + C.Hallucinate(400) + C.adjustToxLoss(30) \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/red.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/red.dm index 5f219f2b3b1..f9a64639687 100644 --- a/code/modules/mob/living/simple_animal/hostile/terror_spiders/red.dm +++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/red.dm @@ -24,6 +24,7 @@ move_to_delay = 10 // at 20ticks/sec, this is 2 tile/sec movespeed speed = 2 // movement_delay() gives 4.5, or 0.45s between steps, which = about 2.2 tiles/second. Player is slightly faster than AI, but cannot move on diagonals. spider_opens_doors = 2 + web_type = /obj/structure/spider/terrorweb/red var/enrage = 0 var/melee_damage_lower_rage0 = 15 var/melee_damage_upper_rage0 = 20 @@ -57,4 +58,9 @@ visible_message("[src] retracts its fangs a little.") melee_damage_lower = melee_damage_lower_rage1 melee_damage_upper = melee_damage_upper_rage1 - ..() \ No newline at end of file + ..() + + +/obj/structure/spider/terrorweb/red + health = 30 + name = "strong terror web" diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/terror_ai.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/terror_ai.dm index a0b1a67175a..cded24e3d51 100644 --- a/code/modules/mob/living/simple_animal/hostile/terror_spiders/terror_ai.dm +++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/terror_ai.dm @@ -134,14 +134,11 @@ L.do_attack_animation(src) visible_message("[src] smashes the [L.name].") break - else if(ai_spins_webs && world.time > (last_spins_webs + freq_spins_webs)) + else if(web_type && ai_spins_webs && world.time > (last_spins_webs + freq_spins_webs)) last_spins_webs = world.time var/obj/structure/spider/terrorweb/T = locate() in get_turf(src) if(!T) - var/obj/structure/spider/terrorweb/W = new /obj/structure/spider/terrorweb(loc) - if(web_infects) - W.infectious = 1 - W.name = "sharp terror web" + new web_type(loc) visible_message("[src] puts up some spider webs.") else if(ai_ventcrawls && world.time > (last_ventcrawl_time + my_ventcrawl_freq)) if(prob(idle_ventcrawl_chance)) 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 9abd76d3961..aab5f05d252 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 @@ -148,6 +148,7 @@ var/global/list/ts_spiderling_list = list() var/web_infects = 0 var/datum/action/innate/terrorspider/web/web_action + var/web_type = /obj/structure/spider/terrorweb var/datum/action/innate/terrorspider/wrap/wrap_action // Breathing - require some oxygen, and no toxins, but take little damage from this requirement not being met (they can hold their breath) @@ -255,8 +256,9 @@ var/global/list/ts_spiderling_list = list() add_language("Galactic Common") default_language = GLOB.all_languages["Spider Hivemind"] - web_action = new() - web_action.Grant(src) + if(web_type) + web_action = new() + web_action.Grant(src) wrap_action = new() wrap_action.Grant(src) diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/white.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/white.dm index ff2bd5cdfdc..fc52becedad 100644 --- a/code/modules/mob/living/simple_animal/hostile/terror_spiders/white.dm +++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/white.dm @@ -20,7 +20,7 @@ melee_damage_lower = 5 melee_damage_upper = 15 spider_tier = TS_TIER_2 - web_infects = 1 + web_type = /obj/structure/spider/terrorweb/white /mob/living/simple_animal/hostile/poison/terror_spider/white/LoseTarget() @@ -56,3 +56,15 @@ if(C.get_int_organ(/obj/item/organ/internal/body_egg)) return 1 return 0 + + +/obj/structure/spider/terrorweb/white + name = "sickly terror web" + +/obj/structure/spider/terrorweb/white/web_special_ability(var/mob/living/carbon/C) + if(istype(C)) + if(!IsTSInfected(C)) + var/inject_target = pick("chest","head") + if(C.can_inject(null, 0, inject_target, 0)) + to_chat(C, "[src] slices into you!") + new /obj/item/organ/internal/body_egg/terror_eggs(C) \ No newline at end of file