per-spider web types

This commit is contained in:
Kyep
2019-02-08 09:47:51 -08:00
parent ae01a5c808
commit f793ee80ae
14 changed files with 91 additions and 51 deletions
@@ -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("<span class='notice'>[src] begins to secrete a sticky substance.</span>")
if(do_after(src, delay_web, target = loc))
@@ -138,15 +130,8 @@
if(T)
to_chat(src, "<span class='danger'>There is already a web here.</span>")
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, "<span class='danger'>[src] slices into you!</span>")
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()
@@ -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("<span class='notice'>[src] jumps away from [L]!</span>")
visible_message("<span class='notice'>[src] jumps away from [L]!</span>")
/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, "<span class='danger'>[src] slices into you!</span>")
C.reagents.add_reagent("terror_black_toxin", 30)
@@ -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()
@@ -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"
@@ -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("<span class='danger'>[src] buries its fangs deep into the [inject_target] of [target]!</span>")
else
visible_message("<span class='danger'>[src] bites [target], but cannot inject venom into [target.p_their()] [inject_target]!</span>")
L.attack_animal(src)
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)
@@ -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
@@ -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)
@@ -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()
seek_cocoon_target()
@@ -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,"<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
/obj/structure/spider/terrorweb/purple
name = "thick terror web"
opacity = 1
health = 40
@@ -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)
@@ -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("<span class='notice'>[src] retracts its fangs a little.</span>")
melee_damage_lower = melee_damage_lower_rage1
melee_damage_upper = melee_damage_upper_rage1
..()
..()
/obj/structure/spider/terrorweb/red
health = 30
name = "strong terror web"
@@ -134,14 +134,11 @@
L.do_attack_animation(src)
visible_message("<span class='danger'>[src] smashes the [L.name].</span>")
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("<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))
@@ -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)
@@ -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, "<span class='danger'>[src] slices into you!</span>")
new /obj/item/organ/internal/body_egg/terror_eggs(C)