From 0c9316738a48cd25d0dac658732fdea7d0973566 Mon Sep 17 00:00:00 2001 From: Kyep Date: Sun, 14 Jul 2019 05:18:49 -0700 Subject: [PATCH 01/26] Fixes terror spider AI not working in away mission --- .../hostile/terror_spiders/terror_ai.dm | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) 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 cded24e3d51..eea616a12d1 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 @@ -344,6 +344,22 @@ vturfs += T return vturfs +/mob/living/simple_animal/hostile/poison/terror_spider/consider_wakeup() + // This is not allowed to call ..() at any point, because that triggers aggro bugs. + + if(pulledby || shouldwakeup) + toggle_ai(AI_ON) + return + + var/turf/T = get_turf(src) + if(!T) + return + + if(!length(SSmobs.clients_by_zlevel[T.z])) + toggle_ai(AI_Z_OFF) + return + toggle_ai(AI_ON) + // -------------------------------------------------------------------------------- // --------------------- TERROR SPIDERS: MISC AI CODE ----------------------------- // -------------------------------------------------------------------------------- From 7386335a087ef64961171189d266ad2f4b08f4fa Mon Sep 17 00:00:00 2001 From: Kyep Date: Sun, 14 Jul 2019 05:19:10 -0700 Subject: [PATCH 02/26] Fixes spiders smashing random things for no good reason --- .../living/simple_animal/hostile/terror_spiders/terror_ai.dm | 5 +++++ 1 file changed, 5 insertions(+) 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 eea616a12d1..787ae16673f 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 @@ -360,6 +360,11 @@ return toggle_ai(AI_ON) +/mob/living/simple_animal/hostile/poison/terror_spider/DestroySurroundings() + if(!target) + return + . = ..() + // -------------------------------------------------------------------------------- // --------------------- TERROR SPIDERS: MISC AI CODE ----------------------------- // -------------------------------------------------------------------------------- From ecdc088d44bf289f72557d557cfa8fa9384c4df0 Mon Sep 17 00:00:00 2001 From: Kyep Date: Sun, 14 Jul 2019 05:30:23 -0700 Subject: [PATCH 03/26] tweaks queen spawning in TS awaymission --- .../hostile/terror_spiders/queen.dm | 37 +++++++++---------- 1 file changed, 17 insertions(+), 20 deletions(-) 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 2839dedb237..4339b1748e6 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 @@ -151,11 +151,11 @@ neststep = 2 NestMode() if(2) - // Create initial pair of purple nest guards. + // Create initial four purple nest guards. if(world.time > (lastnestsetup + nestfrequency)) lastnestsetup = world.time spider_lastspawn = world.time - DoLayTerrorEggs(/mob/living/simple_animal/hostile/poison/terror_spider/purple, 2) + DoLayTerrorEggs(/mob/living/simple_animal/hostile/poison/terror_spider/purple, 4) neststep = 3 if(3) // Create spiders (random T1 types) until nest is full. @@ -166,10 +166,9 @@ spider_spawnfrequency = spider_spawnfrequency_stable neststep = 4 else - var/obj/structure/spider/eggcluster/terror_eggcluster/N = locate() in get_turf(src) - if(!N) - spider_lastspawn = world.time - DoLayTerrorEggs(pick(spider_types_standard), 2) + spider_lastspawn = world.time + var/spiders_left_to_spawn = Clamp( (spider_max_per_nest - CountSpiders()), 1, 10) + DoLayTerrorEggs(pick(spider_types_standard), spiders_left_to_spawn) if(4) // Nest should be full. If so, pulse attack command. Otherwise, start replenishing nest (stage 5). if(world.time > (spider_lastspawn + spider_spawnfrequency)) @@ -185,20 +184,18 @@ if(ai_nest_is_full()) neststep = 4 else - var/obj/structure/spider/eggcluster/terror_eggcluster/N = locate() in get_turf(src) - if(!N) - spider_lastspawn = world.time - var/num_purple = CountSpidersType(/mob/living/simple_animal/hostile/poison/terror_spider/purple) - var/num_white = CountSpidersType(/mob/living/simple_animal/hostile/poison/terror_spider/white) - var/num_brown = CountSpidersType(/mob/living/simple_animal/hostile/poison/terror_spider/brown) - if(num_purple < 4) - DoLayTerrorEggs(/mob/living/simple_animal/hostile/poison/terror_spider/purple, 2) - else if(num_white < 2) - DoLayTerrorEggs(/mob/living/simple_animal/hostile/poison/terror_spider/white, 2) - else if(num_brown < 2) - DoLayTerrorEggs(/mob/living/simple_animal/hostile/poison/terror_spider/brown, 2) - else - DoLayTerrorEggs(pick(spider_types_standard), 2) + spider_lastspawn = world.time + var/num_purple = CountSpidersType(/mob/living/simple_animal/hostile/poison/terror_spider/purple) + var/num_white = CountSpidersType(/mob/living/simple_animal/hostile/poison/terror_spider/white) + var/num_brown = CountSpidersType(/mob/living/simple_animal/hostile/poison/terror_spider/brown) + if(num_purple < 4) + DoLayTerrorEggs(/mob/living/simple_animal/hostile/poison/terror_spider/purple, 2) + else if(num_white < 2) + DoLayTerrorEggs(/mob/living/simple_animal/hostile/poison/terror_spider/white, 2) + else if(num_brown < 4) + DoLayTerrorEggs(/mob/living/simple_animal/hostile/poison/terror_spider/brown, 4) + else + DoLayTerrorEggs(pick(spider_types_standard), 5) /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") From 2333cbda2286e02510b02d5aabf05fe9c7890677 Mon Sep 17 00:00:00 2001 From: Kyep Date: Sun, 14 Jul 2019 05:32:23 -0700 Subject: [PATCH 04/26] makes AI spiders walk around more --- .../simple_animal/hostile/terror_spiders/terror_spiders.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 5b82f8d35dd..f487f2ed082 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 @@ -37,7 +37,7 @@ var/global/list/ts_spiderling_list = list() // Movement pass_flags = PASSTABLE - turns_per_move = 5 // number of turns before AI-controlled spiders wander around. No effect on actual player or AI movement speed! + turns_per_move = 3 // number of turns before AI-controlled spiders wander around. No effect on actual player or AI movement speed! move_to_delay = 6 // AI spider speed at chasing down targets. Higher numbers mean slower speed. Divide 20 (server tick rate / second) by this to get tiles/sec. // 5 = 4 tiles/sec, 6 = 3.3 tiles/sec. 3 = 6.6 tiles/sec. From ed3ff75085cb1cd4083d324ba200632f55d4b91b Mon Sep 17 00:00:00 2001 From: Kyep Date: Thu, 25 Jul 2019 19:34:58 -0700 Subject: [PATCH 05/26] refactor to a var on the mob --- .../mob/living/simple_animal/hostile/hostile.dm | 4 ++++ .../hostile/terror_spiders/terror_ai.dm | 16 ---------------- .../hostile/terror_spiders/terror_spiders.dm | 2 ++ .../mob/living/simple_animal/simple_animal.dm | 7 ++++--- 4 files changed, 10 insertions(+), 19 deletions(-) diff --git a/code/modules/mob/living/simple_animal/hostile/hostile.dm b/code/modules/mob/living/simple_animal/hostile/hostile.dm index 9c787639ba4..ce7b7d4733d 100644 --- a/code/modules/mob/living/simple_animal/hostile/hostile.dm +++ b/code/modules/mob/living/simple_animal/hostile/hostile.dm @@ -431,6 +431,10 @@ toggle_ai(AI_Z_OFF) return + if(ai_wake_ignores_distance) + toggle_ai(AI_ON) + return + var/cheap_search = isturf(T) && !is_station_level(T.z) if(cheap_search) tlist = ListTargetsLazy(T.z) 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 787ae16673f..0f0598113f9 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 @@ -344,22 +344,6 @@ vturfs += T return vturfs -/mob/living/simple_animal/hostile/poison/terror_spider/consider_wakeup() - // This is not allowed to call ..() at any point, because that triggers aggro bugs. - - if(pulledby || shouldwakeup) - toggle_ai(AI_ON) - return - - var/turf/T = get_turf(src) - if(!T) - return - - if(!length(SSmobs.clients_by_zlevel[T.z])) - toggle_ai(AI_Z_OFF) - return - toggle_ai(AI_ON) - /mob/living/simple_animal/hostile/poison/terror_spider/DestroySurroundings() if(!target) return 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 f487f2ed082..62d67ba465a 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 @@ -98,6 +98,8 @@ var/global/list/ts_spiderling_list = list() lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE sight = SEE_MOBS + ai_wake_ignores_distance = TRUE + // AI aggression settings var/ai_type = TS_AI_AGGRESSIVE // 0 = aggressive to everyone, 1 = defends self only var/ai_target_method = TS_DAMAGE_SIMPLE diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index 6955633efce..a63d16943e5 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -82,6 +82,7 @@ var/AIStatus = AI_ON //The Status of our AI, can be set to AI_ON (On, usual processing), AI_IDLE (Will not process, but will return to AI_ON if an enemy comes near), AI_OFF (Off, Not processing ever) var/can_have_ai = TRUE //once we have become sentient, we can never go back var/shouldwakeup = FALSE //convenience var for forcibly waking up an idling AI on next check. + var/ai_wake_ignores_distance = FALSE // If set to true, AI will never sleep as long as any living player is on the same zlevel as them /mob/living/simple_animal/Initialize() @@ -448,7 +449,7 @@ if(gender != FEMALE || stat || next_scan_time > world.time || !childtype || !animal_species || !SSticker.IsRoundInProgress()) return FALSE next_scan_time = world.time + 400 - + var/alone = TRUE var/mob/living/simple_animal/partner var/children = 0 @@ -590,7 +591,7 @@ . = ..() if(!ckey && !stat)//Not unconscious if(AIStatus == AI_IDLE) - toggle_ai(AI_ON) + toggle_ai(AI_ON) /mob/living/simple_animal/proc/toggle_ai(togglestatus) if(!can_have_ai && (togglestatus != AI_OFF)) @@ -613,7 +614,7 @@ ..() if(AIStatus == AI_Z_OFF) SSidlenpcpool.idle_mobs_by_zlevel[old_z] -= src - toggle_ai(initial(AIStatus)) + toggle_ai(initial(AIStatus)) // Simple animals will not be given night vision upon death, as that would result in issues when they are revived. /mob/living/simple_animal/grant_death_vision() From ce24d2ca6d170c28d232774288db2e6b10137e68 Mon Sep 17 00:00:00 2001 From: Kyep Date: Thu, 25 Jul 2019 19:35:06 -0700 Subject: [PATCH 06/26] include nurse spiders too --- code/modules/mob/living/simple_animal/hostile/giant_spider.dm | 3 +++ 1 file changed, 3 insertions(+) diff --git a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm index 6795f4ccec2..ba63c0fc722 100644 --- a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm +++ b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm @@ -60,6 +60,9 @@ melee_damage_lower = 5 melee_damage_upper = 10 venom_per_bite = 30 + + ai_wake_ignores_distance = TRUE + var/atom/cocoon_target var/fed = 0 From d47ccab9c24c43a9b400fca78054ec6a5ba9f1f2 Mon Sep 17 00:00:00 2001 From: Kyep Date: Thu, 22 Aug 2019 02:34:29 -0700 Subject: [PATCH 07/26] fixes giant spiders, both of them, and properly this time --- .../simple_animal/hostile/giant_spider.dm | 35 ++++++++----------- 1 file changed, 15 insertions(+), 20 deletions(-) diff --git a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm index ba63c0fc722..d7309e5ce99 100644 --- a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm +++ b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm @@ -61,8 +61,6 @@ melee_damage_upper = 10 venom_per_bite = 30 - ai_wake_ignores_distance = TRUE - var/atom/cocoon_target var/fed = 0 @@ -79,18 +77,17 @@ venom_per_bite = 10 move_to_delay = 5 -/mob/living/simple_animal/hostile/poison/giant_spider/hunter/handle_automated_action() - if(!..()) //AIStatus is off - return - if(AIStatus == AI_IDLE) +/mob/living/simple_animal/hostile/poison/giant_spider/hunter/handle_automated_movement() + if(AIStatus == AI_IDLE && !busy) //1% chance to skitter madly away - if(!busy && prob(1)) + if(prob(50)) stop_automated_movement = 1 Goto(pick(orange(20, src)), move_to_delay) - spawn(50) + spawn(1) stop_automated_movement = 0 walk(src,0) - return 1 + else + ..() /mob/living/simple_animal/hostile/poison/giant_spider/nurse/proc/GiveUp(var/C) spawn(100) @@ -100,8 +97,8 @@ busy = 0 stop_automated_movement = 0 -/mob/living/simple_animal/hostile/poison/giant_spider/nurse/handle_automated_action() - if(..()) +/mob/living/simple_animal/hostile/poison/giant_spider/nurse/handle_automated_movement() + if(AIStatus == AI_IDLE) var/list/can_see = view(src, 10) if(!busy && prob(30)) //30% chance to stop wandering and do something //first, check for potential food nearby to cocoon @@ -126,18 +123,16 @@ for(var/obj/O in can_see) if(O.anchored) continue - if(istype(O, /obj/item) || istype(O, /obj/structure) || istype(O, /obj/machinery)) - cocoon_target = O - busy = MOVING_TO_TARGET - stop_automated_movement = 1 - Goto(O, move_to_delay) - //give up if we can't reach them after 10 seconds - GiveUp(O) - + if(istype(O, /obj/item) || istype(O, /obj/structure) || istype(O, /obj/machinery)) + cocoon_target = O + busy = MOVING_TO_TARGET + stop_automated_movement = 1 + Goto(O, move_to_delay) + //give up if we can't reach them after 10 seconds + GiveUp(O) else if(busy == MOVING_TO_TARGET && cocoon_target) if(get_dist(src, cocoon_target) <= 1) Wrap() - else busy = 0 stop_automated_movement = 0 From 130537358acc396d8884f487ae2451e6d6ef26a5 Mon Sep 17 00:00:00 2001 From: Kyep Date: Thu, 22 Aug 2019 02:47:05 -0700 Subject: [PATCH 08/26] replaces ai_wake_ignores distance with working ai_uses_z_off --- code/modules/mob/living/simple_animal/hostile/hostile.dm | 8 ++------ .../hostile/terror_spiders/terror_spiders.dm | 2 +- code/modules/mob/living/simple_animal/simple_animal.dm | 3 +-- 3 files changed, 4 insertions(+), 9 deletions(-) diff --git a/code/modules/mob/living/simple_animal/hostile/hostile.dm b/code/modules/mob/living/simple_animal/hostile/hostile.dm index ce7b7d4733d..1edb6a79021 100644 --- a/code/modules/mob/living/simple_animal/hostile/hostile.dm +++ b/code/modules/mob/living/simple_animal/hostile/hostile.dm @@ -427,15 +427,11 @@ if(!T) return - if(!length(SSmobs.clients_by_zlevel[T.z])) // It's fine to use .len here but doesn't compile on 511 + if(ai_uses_z_off && !length(SSmobs.clients_by_zlevel[T.z])) // It's fine to use .len here but doesn't compile on 511 toggle_ai(AI_Z_OFF) return - if(ai_wake_ignores_distance) - toggle_ai(AI_ON) - return - - var/cheap_search = isturf(T) && !is_station_level(T.z) + var/cheap_search = ai_uses_z_off && isturf(T) && !is_station_level(T.z) if(cheap_search) tlist = ListTargetsLazy(T.z) else 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 62d67ba465a..344ac230f58 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 @@ -98,7 +98,7 @@ var/global/list/ts_spiderling_list = list() lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE sight = SEE_MOBS - ai_wake_ignores_distance = TRUE + ai_uses_z_off = FALSE // AI aggression settings var/ai_type = TS_AI_AGGRESSIVE // 0 = aggressive to everyone, 1 = defends self only diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index a63d16943e5..068bcb007eb 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -82,8 +82,7 @@ var/AIStatus = AI_ON //The Status of our AI, can be set to AI_ON (On, usual processing), AI_IDLE (Will not process, but will return to AI_ON if an enemy comes near), AI_OFF (Off, Not processing ever) var/can_have_ai = TRUE //once we have become sentient, we can never go back var/shouldwakeup = FALSE //convenience var for forcibly waking up an idling AI on next check. - var/ai_wake_ignores_distance = FALSE // If set to true, AI will never sleep as long as any living player is on the same zlevel as them - + var/ai_uses_z_off = TRUE // If true, AI will go AI_Z_OFF if there are no living mob players on their zlevel. If false, it remains active. /mob/living/simple_animal/Initialize() ..() From 7fc7750ff1445d193afaf113595c43af9e42c86a Mon Sep 17 00:00:00 2001 From: Kyep Date: Thu, 22 Aug 2019 03:11:03 -0700 Subject: [PATCH 09/26] handle_automated_action -> handle_automated_movement, spider_special_action --- .../hostile/terror_spiders/empress.dm | 2 +- .../hostile/terror_spiders/queen.dm | 8 +++++--- .../hostile/terror_spiders/terror_ai.dm | 20 ++++++++++++------- 3 files changed, 19 insertions(+), 11 deletions(-) diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/empress.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/empress.dm index 14353c4dfd0..2c720f86264 100644 --- a/code/modules/mob/living/simple_animal/hostile/terror_spiders/empress.dm +++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/empress.dm @@ -39,7 +39,7 @@ empresserase_action = new() empresserase_action.Grant(src) -/mob/living/simple_animal/hostile/poison/terror_spider/queen/empress/handle_automated_action() +/mob/living/simple_animal/hostile/poison/terror_spider/queen/empress/spider_special_action() return /mob/living/simple_animal/hostile/poison/terror_spider/queen/empress/NestMode() 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 4339b1748e6..bb5e2a04a36 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 @@ -22,6 +22,9 @@ melee_damage_lower = 10 melee_damage_upper = 20 ventcrawler = 1 + ai_break_lights = 0 + ai_spins_webs = 0 + ai_ventcrawls = 0 idle_ventcrawl_chance = 0 force_threshold = 18 // outright immune to anything of force under 18, this means welders can't hurt it, only guns can ranged = 1 @@ -104,9 +107,8 @@ return TRUE return FALSE -/mob/living/simple_animal/hostile/poison/terror_spider/queen/handle_automated_action() - ..() - if(!stat && !ckey && AIStatus != AI_OFF && !target && !path_to_vent) +/mob/living/simple_animal/hostile/poison/terror_spider/queen/spider_special_action() + if(!stat && !ckey) switch(neststep) if(0) // No nest. If current location is eligible for nesting, advance to step 1. 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 0f0598113f9..1613a0953ef 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 @@ -92,10 +92,18 @@ // --------------------- TERROR SPIDERS: AI BEHAVIOR CODE ------------------------- // -------------------------------------------------------------------------------- + /mob/living/simple_animal/hostile/poison/terror_spider/handle_automated_action() - if (stat || ckey) - return ..() - if(AIStatus != AI_OFF && !target) + if(target) + CreatePath(target) + return ..() + +/mob/living/simple_animal/hostile/poison/terror_spider/handle_automated_movement() + // Putting the main terror spider AI code in handle_automated_movement() rather than handle_automated_action() ensures it will still run when the spider AIStatus == AI_IDLE + // This is necessary for the terror spiders in the away mission to work properly. + if(stat || ckey || AIStatus != AI_IDLE) + return + if(!target) var/my_ventcrawl_freq = freq_ventcrawl_idle if(ts_count_dead > 0) if(world.time < (ts_death_last + ts_death_window)) @@ -134,7 +142,7 @@ L.do_attack_animation(src) visible_message("[src] smashes the [L.name].") break - else if(web_type && ai_spins_webs && world.time > (last_spins_webs + freq_spins_webs)) + else if(ai_spins_webs && web_type && 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) @@ -154,9 +162,7 @@ else // If none of the general actions apply, check for class-specific actions. spider_special_action() - else if(AIStatus != AI_OFF && target) - CreatePath(target) - ..() + ..() /mob/living/simple_animal/hostile/poison/terror_spider/adjustBruteLoss(damage) . = ..(damage) From 9eb1c994236d81e4d2b8637f3f8aee435c8a7e7c Mon Sep 17 00:00:00 2001 From: Kyep Date: Thu, 22 Aug 2019 03:16:38 -0700 Subject: [PATCH 10/26] removes ai_type and SetHiveCommand --- .../hostile/terror_spiders/__defines.dm | 3 --- .../hostile/terror_spiders/empress.dm | 1 - .../simple_animal/hostile/terror_spiders/hive.dm | 15 --------------- .../simple_animal/hostile/terror_spiders/queen.dm | 8 ++------ .../hostile/terror_spiders/terror_ai.dm | 2 -- .../hostile/terror_spiders/terror_spiders.dm | 3 +-- 6 files changed, 3 insertions(+), 29 deletions(-) diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/__defines.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/__defines.dm index 0c777002ae0..c2b420c2511 100644 --- a/code/modules/mob/living/simple_animal/hostile/terror_spiders/__defines.dm +++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/__defines.dm @@ -4,9 +4,6 @@ #define MOVING_TO_TARGET 3 #define SPINNING_COCOON 4 -#define TS_AI_AGGRESSIVE 0 -#define TS_AI_DEFENSIVE 1 - #define TS_DAMAGE_SIMPLE 0 #define TS_DAMAGE_POISON 1 #define TS_DAMAGE_BRUTE 2 diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/empress.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/empress.dm index 2c720f86264..6db08d392ed 100644 --- a/code/modules/mob/living/simple_animal/hostile/terror_spiders/empress.dm +++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/empress.dm @@ -19,7 +19,6 @@ ventcrawler = 1 idle_ventcrawl_chance = 0 ai_playercontrol_allowtype = 0 - ai_type = TS_AI_AGGRESSIVE rapid = 1 canlay = 1000 spider_tier = TS_TIER_5 diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/hive.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/hive.dm index c3ee3dd6a35..d4b1886e49e 100644 --- a/code/modules/mob/living/simple_animal/hostile/terror_spiders/hive.dm +++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/hive.dm @@ -18,21 +18,6 @@ hsline += " AI " to_chat(src,hsline) -/mob/living/simple_animal/hostile/poison/terror_spider/proc/SetHiveCommand(set_ai, set_ventcrawl) - var/numspiders = 0 - for(var/mob/living/simple_animal/hostile/poison/terror_spider/T in ts_spiderlist) - if(spider_awaymission && !T.spider_awaymission) - continue - else if(!spider_awaymission && T.spider_awaymission) - continue - numspiders += 1 - if(spider_tier >= T.spider_tier) - if(T.ai_type != set_ai) - T.ai_type = set_ai - if(T.idle_ventcrawl_chance != set_ventcrawl) - T.idle_ventcrawl_chance = set_ventcrawl - return numspiders - /mob/living/simple_animal/hostile/poison/terror_spider/proc/CountSpiders() var/numspiders = 0 for(var/mob/living/simple_animal/hostile/poison/terror_spider/T in ts_spiderlist) 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 bb5e2a04a36..88808d9f859 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 @@ -85,7 +85,6 @@ /mob/living/simple_animal/hostile/poison/terror_spider/queen/death(gibbed) if(can_die() && !hasdied) - SetHiveCommand(0, 15) // Hive becomes very aggressive. if(spider_uo71) UnlockBlastDoors("UO71_Caves") // When a queen dies, so do her player-controlled purple-type guardians. Intended as a motivator for purples to ensure they guard her. @@ -174,11 +173,8 @@ if(4) // Nest should be full. If so, pulse attack command. Otherwise, start replenishing nest (stage 5). if(world.time > (spider_lastspawn + spider_spawnfrequency)) - if(prob(20)) - if(ai_nest_is_full()) - SetHiveCommand(0, 15) // AI=0 (attack everyone), ventcrawl=15%/tick - else - neststep = 5 + if(prob(20) && !ai_nest_is_full()) + neststep = 5 if(5) // If already replenished, go idle (stage 4). Otherwise, replenish nest. if(world.time > (spider_lastspawn + spider_spawnfrequency)) 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 1613a0953ef..06c9da9bb55 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 @@ -13,8 +13,6 @@ continue if(H.stat == UNCONSCIOUS && !stat_attack) continue - if(ai_type == TS_AI_DEFENSIVE && !(H in enemies)) - continue if(isterrorspider(H)) if(H in enemies) targets3 += H 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 344ac230f58..97e229638d3 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 @@ -56,7 +56,7 @@ var/global/list/ts_spiderling_list = list() // Ventcrawling ventcrawler = 1 // allows player ventcrawling var/ai_ventcrawls = 1 - var/idle_ventcrawl_chance = 3 // default 3% chance to ventcrawl when not in combat to a random exit vent + var/idle_ventcrawl_chance = 15 var/freq_ventcrawl_combat = 1800 // 3 minutes var/freq_ventcrawl_idle = 9000 // 15 minutes var/last_ventcrawl_time = -9000 // Last time the spider crawled. Used to prevent excessive crawling. Setting to freq*-1 ensures they can crawl once on spawn. @@ -101,7 +101,6 @@ var/global/list/ts_spiderling_list = list() ai_uses_z_off = FALSE // AI aggression settings - var/ai_type = TS_AI_AGGRESSIVE // 0 = aggressive to everyone, 1 = defends self only var/ai_target_method = TS_DAMAGE_SIMPLE // AI player control by ghosts From 563653df787c539d25cd89557b9e345bfd4b0b58 Mon Sep 17 00:00:00 2001 From: Kyep Date: Thu, 22 Aug 2019 03:35:07 -0700 Subject: [PATCH 11/26] cleanup dev stuff --- .../modules/mob/living/simple_animal/hostile/giant_spider.dm | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm index d7309e5ce99..f28aed9dae8 100644 --- a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm +++ b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm @@ -60,7 +60,6 @@ melee_damage_lower = 5 melee_damage_upper = 10 venom_per_bite = 30 - var/atom/cocoon_target var/fed = 0 @@ -80,10 +79,10 @@ /mob/living/simple_animal/hostile/poison/giant_spider/hunter/handle_automated_movement() if(AIStatus == AI_IDLE && !busy) //1% chance to skitter madly away - if(prob(50)) + if(prob(1)) stop_automated_movement = 1 Goto(pick(orange(20, src)), move_to_delay) - spawn(1) + spawn(50) stop_automated_movement = 0 walk(src,0) else From 3f50b2b4b302046f123b37a97c6b1b14ada3e6b4 Mon Sep 17 00:00:00 2001 From: Kyep Date: Thu, 22 Aug 2019 03:40:59 -0700 Subject: [PATCH 12/26] code quality: TRUE/FALSE squash --- _maps/map_files/RandomZLevels/terrorspiders.dmm | 1 - .../simple_animal/hostile/terror_spiders/gray.dm | 6 +++--- .../simple_animal/hostile/terror_spiders/prince.dm | 2 +- .../simple_animal/hostile/terror_spiders/purple.dm | 2 +- .../simple_animal/hostile/terror_spiders/queen.dm | 2 +- .../hostile/terror_spiders/terror_spiders.dm | 10 +++++----- 6 files changed, 11 insertions(+), 12 deletions(-) diff --git a/_maps/map_files/RandomZLevels/terrorspiders.dmm b/_maps/map_files/RandomZLevels/terrorspiders.dmm index 583ae8c74c9..143385681b3 100644 --- a/_maps/map_files/RandomZLevels/terrorspiders.dmm +++ b/_maps/map_files/RandomZLevels/terrorspiders.dmm @@ -5645,7 +5645,6 @@ /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/manifold/hidden/supply, /mob/living/simple_animal/hostile/poison/terror_spider/red{ - ai_ventcrawls = 0; wander = 0 }, /turf/simulated/floor/plasteel{ 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 2f124e94479..f1a00d3bf79 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 @@ -103,9 +103,9 @@ if(g_turfs_visible.len >= 12) // So long as the room isn't tiny, and it has no queen in it, sure, settle there // since we are settled now, disable most AI behaviors so we don't waste CPU. - ai_ventcrawls = 0 - ai_spins_webs = 0 - ai_break_lights = 0 + ai_ventcrawls = FALSE + ai_spins_webs = FALSE + ai_break_lights = FALSE prob_ai_hides_in_vents = 3 visible_message("[src] finishes setting up its trap in [get_area(src)].") else 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 d0ddc369517..e3ab39e1c8d 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 @@ -22,7 +22,7 @@ melee_damage_lower = 30 melee_damage_upper = 40 ventcrawler = 0 - ai_ventcrawls = 0 + ai_ventcrawls = FALSE environment_smash = ENVIRONMENT_SMASH_RWALLS idle_ventcrawl_chance = 0 spider_tier = TS_TIER_3 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 7f522b3382e..ea4753866c2 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 @@ -25,7 +25,7 @@ speed = 0 // '0' (also the default for human mobs) converts to 2.5 total delay, or 4 tiles/sec. spider_opens_doors = 2 ventcrawler = 0 - ai_ventcrawls = 0 + ai_ventcrawls = FALSE environment_smash = ENVIRONMENT_SMASH_RWALLS idle_ventcrawl_chance = 0 // stick to the queen! web_type = /obj/structure/spider/terrorweb/purple 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 88808d9f859..9ad6742b444 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 @@ -210,7 +210,7 @@ queennest_action.Remove(src) hasnested = 1 ventcrawler = 0 - ai_ventcrawls = 0 + ai_ventcrawls = FALSE environment_smash = ENVIRONMENT_SMASH_RWALLS DoQueenScreech(8, 100, 8, 100) MassFlicker() 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 97e229638d3..f7fea9b424b 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 @@ -55,7 +55,7 @@ var/global/list/ts_spiderling_list = list() // Ventcrawling ventcrawler = 1 // allows player ventcrawling - var/ai_ventcrawls = 1 + var/ai_ventcrawls = TRUE var/idle_ventcrawl_chance = 15 var/freq_ventcrawl_combat = 1800 // 3 minutes var/freq_ventcrawl_idle = 9000 // 15 minutes @@ -106,11 +106,11 @@ var/global/list/ts_spiderling_list = list() // AI player control by ghosts var/ai_playercontrol_allowtype = 1 // if 0, this specific class of spider is not player-controllable. Default set in code for each class, cannot be changed. - var/ai_break_lights = 1 // AI lightbreaking behavior + var/ai_break_lights = TRUE // AI lightbreaking behavior var/freq_break_light = 600 var/last_break_light = 0 // leave this, changed by procs. - var/ai_spins_webs = 1 // AI web-spinning behavior + var/ai_spins_webs = TRUE // AI web-spinning behavior var/freq_spins_webs = 600 var/last_spins_webs = 0 // leave this, changed by procs. var/delay_web = 40 // delay between starting to spin web, and finishing @@ -272,12 +272,12 @@ var/global/list/ts_spiderling_list = list() spider_awaymission = 1 ts_count_alive_awaymission++ if(spider_tier >= 3) - ai_ventcrawls = 0 // means that pre-spawned bosses on away maps won't ventcrawl. Necessary to keep prince/mother in one place. + ai_ventcrawls = FALSE // means that pre-spawned bosses on away maps won't ventcrawl. Necessary to keep prince/mother in one place. if(istype(get_area(src), /area/awaymission/UO71)) // if we are playing the away mission with our special spiders... spider_uo71 = 1 if(world.time < 600) // these are static spiders, specifically for the UO71 away mission, make them stay in place - ai_ventcrawls = 0 + ai_ventcrawls = FALSE spider_placed = 1 else ts_count_alive_station++ From 41c6b4f9f36da2efc711965a226b036c3a447733 Mon Sep 17 00:00:00 2001 From: Kyep Date: Thu, 22 Aug 2019 04:11:38 -0700 Subject: [PATCH 13/26] code quality: queen edition --- .../hostile/terror_spiders/queen.dm | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) 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 9ad6742b444..24a6375282d 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 @@ -22,9 +22,9 @@ melee_damage_lower = 10 melee_damage_upper = 20 ventcrawler = 1 - ai_break_lights = 0 - ai_spins_webs = 0 - ai_ventcrawls = 0 + ai_break_lights = FALSE + ai_spins_webs = FALSE + ai_ventcrawls = FALSE idle_ventcrawl_chance = 0 force_threshold = 18 // outright immune to anything of force under 18, this means welders can't hurt it, only guns can ranged = 1 @@ -35,13 +35,13 @@ 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_spawnfrequency = 1200 // 120 seconds. Default for player queens and NPC queens on station. Awaymission queens have this changed in New() + var/spider_spawnfrequency_stable = 1200 // 120 seconds. Spawnfrequency is set to this on awaymission spiders once nest setup is complete. var/spider_lastspawn = 0 var/nestfrequency = 300 // 30 seconds var/lastnestsetup = 0 var/neststep = 0 - var/hasnested = 0 + var/hasnested = FALSE var/spider_max_per_nest = 35 // above this, AI queens become stable var/canlay = 4 // main counter for egg-laying ability! # = num uses, incremented at intervals var/eggslaid = 0 @@ -111,11 +111,11 @@ switch(neststep) if(0) // No nest. If current location is eligible for nesting, advance to step 1. - var/ok_to_nest = 1 + var/ok_to_nest = TRUE var/area/new_area = get_area(loc) if(new_area) if(findtext(new_area.name, "hall")) - ok_to_nest = 0 + ok_to_nest = FALSE // nesting in a hallway would be very stupid - crew would find and kill you almost instantly var/numhostiles = 0 for(var/mob/living/H in oview(10, src)) @@ -124,7 +124,7 @@ numhostiles += 1 // nesting RIGHT NEXT TO SOMEONE is even worse if(numhostiles > 0) - ok_to_nest = 0 + ok_to_nest = FALSE var/vdistance = 99 for(var/obj/machinery/atmospherics/unary/vent_pump/v in view(10, src)) if(!v.welded) @@ -132,7 +132,7 @@ entry_vent = v vdistance = get_dist(src, v) if(!entry_vent) - ok_to_nest = 0 + ok_to_nest = FALSE // don't nest somewhere with no vent - your brood won't be able to get out! if(ok_to_nest && entry_vent) nest_vent = entry_vent @@ -159,7 +159,7 @@ DoLayTerrorEggs(/mob/living/simple_animal/hostile/poison/terror_spider/purple, 4) neststep = 3 if(3) - // Create spiders (random T1 types) until nest is full. + // Create spiders (random types) until nest is full. if(world.time > (spider_lastspawn + spider_spawnfrequency)) if(prob(20)) if(ai_nest_is_full()) @@ -171,7 +171,7 @@ var/spiders_left_to_spawn = Clamp( (spider_max_per_nest - CountSpiders()), 1, 10) DoLayTerrorEggs(pick(spider_types_standard), spiders_left_to_spawn) if(4) - // Nest should be full. If so, pulse attack command. Otherwise, start replenishing nest (stage 5). + // Nest should be full. Otherwise, start replenishing nest (stage 5). if(world.time > (spider_lastspawn + spider_spawnfrequency)) if(prob(20) && !ai_nest_is_full()) neststep = 5 @@ -208,7 +208,7 @@ queensense_action = new() queensense_action.Grant(src) queennest_action.Remove(src) - hasnested = 1 + hasnested = TRUE ventcrawler = 0 ai_ventcrawls = FALSE environment_smash = ENVIRONMENT_SMASH_RWALLS From 87fb2e7965009b71a0f23afe462adce798364997 Mon Sep 17 00:00:00 2001 From: Kyep Date: Thu, 22 Aug 2019 04:40:58 -0700 Subject: [PATCH 14/26] remove AI_Z_OFF immunity, fix gray webs --- code/modules/mob/living/simple_animal/hostile/hostile.dm | 4 ++-- .../mob/living/simple_animal/hostile/terror_spiders/gray.dm | 5 ++--- .../simple_animal/hostile/terror_spiders/terror_spiders.dm | 4 +--- code/modules/mob/living/simple_animal/simple_animal.dm | 1 - 4 files changed, 5 insertions(+), 9 deletions(-) diff --git a/code/modules/mob/living/simple_animal/hostile/hostile.dm b/code/modules/mob/living/simple_animal/hostile/hostile.dm index 1edb6a79021..9c787639ba4 100644 --- a/code/modules/mob/living/simple_animal/hostile/hostile.dm +++ b/code/modules/mob/living/simple_animal/hostile/hostile.dm @@ -427,11 +427,11 @@ if(!T) return - if(ai_uses_z_off && !length(SSmobs.clients_by_zlevel[T.z])) // It's fine to use .len here but doesn't compile on 511 + if(!length(SSmobs.clients_by_zlevel[T.z])) // It's fine to use .len here but doesn't compile on 511 toggle_ai(AI_Z_OFF) return - var/cheap_search = ai_uses_z_off && isturf(T) && !is_station_level(T.z) + var/cheap_search = isturf(T) && !is_station_level(T.z) if(cheap_search) tlist = ListTargetsLazy(T.z) else 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 f1a00d3bf79..22c6f57a139 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 @@ -78,8 +78,7 @@ vision_range = 9 idle_vision_range = 9 move_to_delay = 5 - prob_ai_hides_in_vents = 10 - + prob_ai_hides_in_vents = 25 /mob/living/simple_animal/hostile/poison/terror_spider/gray/spider_special_action() if(prob(prob_ai_hides_in_vents)) @@ -116,7 +115,7 @@ GrayCloak() else // otherwise, pick one of the valid turfs with no web to create a web there. - new /obj/structure/spider/terrorweb(pick(g_turfs_valid)) + new web_type(pick(g_turfs_valid)) visible_message("[src] spins a web.") else if(invisibility == SEE_INVISIBLE_LEVEL_ONE) 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 f7fea9b424b..8fecfff4926 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 @@ -98,8 +98,6 @@ var/global/list/ts_spiderling_list = list() lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE sight = SEE_MOBS - ai_uses_z_off = FALSE - // AI aggression settings var/ai_target_method = TS_DAMAGE_SIMPLE @@ -118,7 +116,7 @@ var/global/list/ts_spiderling_list = list() var/freq_cocoon_object = 1200 // two minutes between each attempt var/last_cocoon_object = 0 // leave this, changed by procs. - var/prob_ai_hides_in_vents = 15 // probabily of a gray spider hiding in a vent + var/prob_ai_hides_in_vents = 50 // probabily of a gray spider hiding in a vent var/spider_opens_doors = 1 // all spiders can open firedoors (they have no security). 1 = can open depowered doors. 2 = can open powered doors faction = list("terrorspiders") diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index 068bcb007eb..05a3141b17a 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -82,7 +82,6 @@ var/AIStatus = AI_ON //The Status of our AI, can be set to AI_ON (On, usual processing), AI_IDLE (Will not process, but will return to AI_ON if an enemy comes near), AI_OFF (Off, Not processing ever) var/can_have_ai = TRUE //once we have become sentient, we can never go back var/shouldwakeup = FALSE //convenience var for forcibly waking up an idling AI on next check. - var/ai_uses_z_off = TRUE // If true, AI will go AI_Z_OFF if there are no living mob players on their zlevel. If false, it remains active. /mob/living/simple_animal/Initialize() ..() From 712099fab919a2dce58059a802bb0335d62c76fa Mon Sep 17 00:00:00 2001 From: Kyep Date: Sun, 25 Aug 2019 19:51:48 -0700 Subject: [PATCH 15/26] fixes non-respawnable players being able to take control of spiders --- .../mob/living/simple_animal/hostile/terror_spiders/ghost.dm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/ghost.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/ghost.dm index dd170c1c177..283cbb6ad0d 100644 --- a/code/modules/mob/living/simple_animal/hostile/terror_spiders/ghost.dm +++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/ghost.dm @@ -26,6 +26,8 @@ error_on_humanize = "Dying spiders are not player-controllable." else if(stat == DEAD) error_on_humanize = "Dead spiders are not player-controllable." + else if(!(user in GLOB.respawnable_list)) + error_on_humanize = "You are not able to rejoin the round." if(jobban_isbanned(user, "Syndicate") || jobban_isbanned(user, "alien")) to_chat(user,"You are jobbanned from role of syndicate and/or alien lifeform.") return From 226edbe8cc2b7dcb01e421f62e36d56f791eb7b1 Mon Sep 17 00:00:00 2001 From: Kyep Date: Sun, 25 Aug 2019 19:56:21 -0700 Subject: [PATCH 16/26] prevent whites infecting slimes --- .../mob/living/simple_animal/hostile/terror_spiders/white.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 a121a641db8..2a811e42249 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 @@ -64,7 +64,7 @@ /obj/structure/spider/terrorweb/white/web_special_ability(mob/living/carbon/C) if(istype(C)) - if(!IsTSInfected(C)) + if(!IsTSInfected(C) && ishuman(C)) var/inject_target = pick("chest","head") if(C.can_inject(null, 0, inject_target, 0)) to_chat(C, "[src] slices into you!") From 986dda53f3887658fcdc990c6d593a8c667a9629 Mon Sep 17 00:00:00 2001 From: Kyep Date: Sun, 25 Aug 2019 20:08:58 -0700 Subject: [PATCH 17/26] fixes bug allowing whites to infect slimes --- .../mob/living/simple_animal/hostile/terror_spiders/white.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 2a811e42249..9a7dcbd7eff 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 @@ -41,7 +41,7 @@ var/inject_target = pick("chest","head") L.attack_animal(src) if(L.stunned || L.paralysis || L.can_inject(null, 0, inject_target, 0)) - if(!IsTSInfected(L)) + if(!IsTSInfected(L) && ishuman(L)) visible_message("[src] buries its long fangs deep into the [inject_target] of [L]!") new /obj/item/organ/internal/body_egg/terror_eggs(L) if(!ckey) From 5e3ae052c88cd6883cfa142852cd5ce9a0ad8f90 Mon Sep 17 00:00:00 2001 From: Kyep Date: Sun, 25 Aug 2019 21:57:08 -0700 Subject: [PATCH 18/26] reworks gray spiders to be stealthed on webs rather than their old AI/behavior --- .../hostile/terror_spiders/actions.dm | 7 - .../hostile/terror_spiders/gray.dm | 120 +++--------------- .../hostile/terror_spiders/terror_spiders.dm | 2 - icons/mob/terrorspider.dmi | Bin 75322 -> 75289 bytes 4 files changed, 20 insertions(+), 109 deletions(-) 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 0cb0faa16cd..957be60b2cd 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 @@ -148,12 +148,6 @@ if(prob(50)) icon_state = "stickyweb2" -/obj/structure/spider/terrorweb/proc/DeCloakNearby() - for(var/mob/living/simple_animal/hostile/poison/terror_spider/gray/G in view(6,src)) - if(!G.ckey && G.stat != DEAD) - G.GrayDeCloak() - G.Aggro() - /obj/structure/spider/terrorweb/CanPass(atom/movable/mover, turf/target) if(istype(mover, /mob/living/simple_animal/hostile/poison/terror_spider)) return 1 @@ -167,7 +161,6 @@ to_chat(mover, "You get stuck in [src] for a moment.") M.Stun(4) // 8 seconds. M.Weaken(4) // 8 seconds. - DeCloakNearby() if(iscarbon(mover)) var/mob/living/carbon/C = mover web_special_ability(C) 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 22c6f57a139..ba558536c99 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 @@ -10,23 +10,32 @@ /mob/living/simple_animal/hostile/poison/terror_spider/gray name = "Gray Terror spider" - desc = "An ominous-looking gray spider. It twitches occasionally, always seeming ready to pounce." - spider_role_summary = "Stealth spider that ambushes weak humans from vents." + desc = "An ominous-looking gray spider. It seems to blend into webs, making it hard to see." + spider_role_summary = "Stealth spider that ambushes weak humans." ai_target_method = TS_DAMAGE_BRUTE icon_state = "terror_gray" icon_living = "terror_gray" icon_dead = "terror_gray_dead" - maxHealth = 120 // same health as hunter spider, aka, pretty weak.. but its almost invisible. + maxHealth = 120 // same health as hunter spider, aka, pretty weak.. but its almost invisible while on webs. health = 120 melee_damage_lower = 10 melee_damage_upper = 20 regen_points_per_hp = 2 // 50% higher regen speed stat_attack = 1 // ensures they will target people in crit, too! - 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 + var/prob_ai_massweb = 10 +/mob/living/simple_animal/hostile/poison/terror_spider/gray/Move(turf/T) + . = ..(T) + var/obj/structure/spider/terrorweb/W = locate() in get_turf(src) + if(W) + if(icon_state == "terror_gray") + icon_state = "terror_gray_cloaked" + icon_living = "terror_gray_cloaked" + else if(icon_state != "terror_gray") + icon_state = "terror_gray" + icon_living = "terror_gray" /mob/living/simple_animal/hostile/poison/terror_spider/gray/spider_specialattack(mob/living/carbon/human/L, poisonable) var/obj/structure/spider/terrorweb/W = locate() in get_turf(L) @@ -40,102 +49,13 @@ visible_message("[src] bites [target]!") L.attack_animal(src) -/mob/living/simple_animal/hostile/poison/terror_spider/gray/adjustBruteLoss(damage) - . = ..(damage) - if(invisibility > 0) - GrayDeCloak() - -/mob/living/simple_animal/hostile/poison/terror_spider/gray/adjustFireLoss(damage) - . = ..(damage) - if(invisibility > 0) - GrayDeCloak() - -/mob/living/simple_animal/hostile/poison/terror_spider/gray/Aggro() - GrayDeCloak() - ..() - -/mob/living/simple_animal/hostile/poison/terror_spider/gray/AttackingTarget() - if(invisibility > 0) - GrayDeCloak() - else - ..() - -/mob/living/simple_animal/hostile/poison/terror_spider/proc/GrayCloak() - visible_message("[src] hides in the vent.") - invisibility = SEE_INVISIBLE_LEVEL_ONE - icon_state = "terror_gray_cloaked" - icon_living = "terror_gray_cloaked" - if(!ckey) - vision_range = 3 - idle_vision_range = 3 - // Bugged, does not work yet. Also spams webs. Also doesn't look great. But... planned. - move_to_delay = 15 // while invisible, slow. - -/mob/living/simple_animal/hostile/poison/terror_spider/proc/GrayDeCloak() - invisibility = 0 - icon_state = "terror_gray" - icon_living = "terror_gray" - vision_range = 9 - idle_vision_range = 9 - move_to_delay = 5 - prob_ai_hides_in_vents = 25 - /mob/living/simple_animal/hostile/poison/terror_spider/gray/spider_special_action() - if(prob(prob_ai_hides_in_vents)) - var/obj/machinery/atmospherics/unary/vent_pump/e = locate() in get_turf(src) - if(e) - if(!e.welded || spider_awaymission) - if(invisibility != SEE_INVISIBLE_LEVEL_ONE) // aka: 35. ghosts have 15 with no darkness, 60 with darkness. Weird... - var/list/g_turfs_webbed = ListWebbedTurfs() - var/webcount = g_turfs_webbed.len - if(webcount >= 4) - // if there are already at least 4 webs around us, then we have a good web setup already. Cloak. - GrayCloak() - // I wonder if we should settle down here forever? - var/foundqueen = 0 - for(var/mob/living/H in view(src, 10)) - if(istype(H, /mob/living/simple_animal/hostile/poison/terror_spider/queen)) - foundqueen = 1 - break - if(!foundqueen) - var/list/g_turfs_visible = ListVisibleTurfs() - if(g_turfs_visible.len >= 12) - // So long as the room isn't tiny, and it has no queen in it, sure, settle there - // since we are settled now, disable most AI behaviors so we don't waste CPU. - ai_ventcrawls = FALSE - ai_spins_webs = FALSE - ai_break_lights = FALSE - prob_ai_hides_in_vents = 3 - visible_message("[src] finishes setting up its trap in [get_area(src)].") - else - var/list/g_turfs_valid = ListValidTurfs() - var/turfcount = g_turfs_valid.len - if(turfcount == 0) - // if there is literally nowhere else we could put a web, cloak. - GrayCloak() - else - // otherwise, pick one of the valid turfs with no web to create a web there. - new web_type(pick(g_turfs_valid)) - visible_message("[src] spins a web.") - else - if(invisibility == SEE_INVISIBLE_LEVEL_ONE) - // if our vent is welded, decloak - GrayDeCloak() - else - if(invisibility == SEE_INVISIBLE_LEVEL_ONE) - // if there is no vent under us, and we are cloaked, decloak - GrayDeCloak() - var/vdistance = 99 - var/temp_vent = null - for(var/obj/machinery/atmospherics/unary/vent_pump/v in view(7,src)) - if(!v.welded) - if(get_dist(src,v) < vdistance) - temp_vent = v - vdistance = get_dist(src,v) - if(temp_vent) - 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 + if(prob(prob_ai_massweb)) + for(var/turf/simulated/T in oview(2,get_turf(src))) + if(T.density == 0) + var/obj/structure/spider/terrorweb/W = locate() in T + if(!W) + new web_type(T) /obj/structure/spider/terrorweb/gray alpha = 100 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 8fecfff4926..251ba27cf05 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 @@ -116,8 +116,6 @@ var/global/list/ts_spiderling_list = list() var/freq_cocoon_object = 1200 // two minutes between each attempt var/last_cocoon_object = 0 // leave this, changed by procs. - var/prob_ai_hides_in_vents = 50 // probabily of a gray spider hiding in a vent - var/spider_opens_doors = 1 // all spiders can open firedoors (they have no security). 1 = can open depowered doors. 2 = can open powered doors faction = list("terrorspiders") var/spider_awaymission = 0 // if 1, limits certain behavior in away missions diff --git a/icons/mob/terrorspider.dmi b/icons/mob/terrorspider.dmi index a01e3225d5a4dbbeefedd67c3d6b8c13f1ec3508..08ebbc02aa5d5f231478e13e8e69d7c3d9284480 100644 GIT binary patch delta 59194 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%0AL@p&1kR$*p$#|LRu1$i5FfF}1Ppa%Kzvin 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

;PMF+v}w)fkda0)am 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 Date: Mon, 2 Sep 2019 21:59:45 -0700 Subject: [PATCH 19/26] Fox observation --- .../living/simple_animal/hostile/terror_spiders/terror_ai.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 06c9da9bb55..8ae7be03b0f 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 @@ -99,7 +99,7 @@ /mob/living/simple_animal/hostile/poison/terror_spider/handle_automated_movement() // Putting the main terror spider AI code in handle_automated_movement() rather than handle_automated_action() ensures it will still run when the spider AIStatus == AI_IDLE // This is necessary for the terror spiders in the away mission to work properly. - if(stat || ckey || AIStatus != AI_IDLE) + if(AIStatus != AI_IDLE) return if(!target) var/my_ventcrawl_freq = freq_ventcrawl_idle From 3d58873b9a24604fd01878530ea0703cf2ae6013 Mon Sep 17 00:00:00 2001 From: Kyep Date: Tue, 3 Sep 2019 19:16:34 -0700 Subject: [PATCH 20/26] revert all changes to giant_spider.dm --- .../mob/living/simple_animal/hostile/giant_spider.dm | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm index 258a1f1abe7..ab802590ee3 100644 --- a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm +++ b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm @@ -80,14 +80,13 @@ . = ..() if(AIStatus == AI_IDLE) //1% chance to skitter madly away - if(prob(1)) + if(!busy && prob(1)) stop_automated_movement = 1 Goto(pick(urange(20, src, 1)), move_to_delay) spawn(50) stop_automated_movement = 0 walk(src,0) - else - ..() + return 1 /mob/living/simple_animal/hostile/poison/giant_spider/nurse/proc/GiveUp(C) spawn(100) @@ -123,6 +122,7 @@ for(var/obj/O in can_see) if(O.anchored) continue + if(isitem(O) || isstructure(O) || ismachinery(O)) cocoon_target = O busy = MOVING_TO_TARGET @@ -130,9 +130,11 @@ Goto(O, move_to_delay) //give up if we can't reach them after 10 seconds GiveUp(O) + else if(busy == MOVING_TO_TARGET && cocoon_target) if(get_dist(src, cocoon_target) <= 1) Wrap() + else busy = 0 stop_automated_movement = 0 From f4f20211ae61842de42407525ccd6b7a6d3a69c6 Mon Sep 17 00:00:00 2001 From: Kyep Date: Tue, 3 Sep 2019 19:29:02 -0700 Subject: [PATCH 21/26] squash --- .../mob/living/simple_animal/hostile/terror_spiders/empress.dm | 1 - 1 file changed, 1 deletion(-) diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/empress.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/empress.dm index 50049af0a2e..1c6fcdb6e5d 100644 --- a/code/modules/mob/living/simple_animal/hostile/terror_spiders/empress.dm +++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/empress.dm @@ -19,7 +19,6 @@ ventcrawler = 1 idle_ventcrawl_chance = 0 ai_playercontrol_allowtype = 0 - ai_type = TS_AI_AGGRESSIVE rapid = 3 canlay = 1000 spider_tier = TS_TIER_5 From 08819482430dd1a1e37bc3ec5a9b1e9eedab5957 Mon Sep 17 00:00:00 2001 From: Kyep Date: Tue, 3 Sep 2019 20:15:32 -0700 Subject: [PATCH 22/26] fixes graphics bug with grays --- .../hostile/terror_spiders/gray.dm | 20 +++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) 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 ba558536c99..8d191f07efd 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 @@ -24,18 +24,22 @@ stat_attack = 1 // ensures they will target people in crit, too! delay_web = 20 // double speed web_type = /obj/structure/spider/terrorweb/gray + ai_spins_webs = FALSE // uses massweb instead var/prob_ai_massweb = 10 /mob/living/simple_animal/hostile/poison/terror_spider/gray/Move(turf/T) . = ..(T) - var/obj/structure/spider/terrorweb/W = locate() in get_turf(src) - if(W) - if(icon_state == "terror_gray") - icon_state = "terror_gray_cloaked" - icon_living = "terror_gray_cloaked" - else if(icon_state != "terror_gray") - icon_state = "terror_gray" - icon_living = "terror_gray" + if(stat == DEAD) + icon_state = icon_dead + else + var/obj/structure/spider/terrorweb/W = locate() in get_turf(src) + if(W) + if(icon_state == "terror_gray") + icon_state = "terror_gray_cloaked" + icon_living = "terror_gray_cloaked" + else if(icon_state != "terror_gray") + icon_state = "terror_gray" + icon_living = "terror_gray" /mob/living/simple_animal/hostile/poison/terror_spider/gray/spider_specialattack(mob/living/carbon/human/L, poisonable) var/obj/structure/spider/terrorweb/W = locate() in get_turf(L) From 2e1adac15820a08b3a3b90aba4f4d70eeaaecc12 Mon Sep 17 00:00:00 2001 From: Kyep Date: Fri, 6 Sep 2019 23:40:35 -0700 Subject: [PATCH 23/26] reduces gray spider regen speed --- .../mob/living/simple_animal/hostile/terror_spiders/gray.dm | 1 - 1 file changed, 1 deletion(-) 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 8d191f07efd..0dae4cac691 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 @@ -20,7 +20,6 @@ health = 120 melee_damage_lower = 10 melee_damage_upper = 20 - regen_points_per_hp = 2 // 50% higher regen speed stat_attack = 1 // ensures they will target people in crit, too! delay_web = 20 // double speed web_type = /obj/structure/spider/terrorweb/gray From c5b4cdab3a4c85a6753f581da0353e23b11ce738 Mon Sep 17 00:00:00 2001 From: Kyep Date: Fri, 6 Sep 2019 23:58:43 -0700 Subject: [PATCH 24/26] fixes eggs not causing confusion as intended --- code/modules/surgery/organs/parasites.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/surgery/organs/parasites.dm b/code/modules/surgery/organs/parasites.dm index f330df260eb..48cc4a408d5 100644 --- a/code/modules/surgery/organs/parasites.dm +++ b/code/modules/surgery/organs/parasites.dm @@ -81,7 +81,7 @@ // Once at least one egg has hatched from you, you'll need help to reach medbay. if(eggs_hatched >= 1) - owner.Confused(2) + owner.SetConfused(45) if(egg_progress > egg_progress_per_hatch) egg_progress -= egg_progress_per_hatch From 6b11f4e18f7d1236e22bdf84dc32e2f0b91db493 Mon Sep 17 00:00:00 2001 From: Kyep Date: Sat, 7 Sep 2019 00:25:52 -0700 Subject: [PATCH 25/26] fixes animation when AI controller spider breaks a light --- .../living/simple_animal/hostile/terror_spiders/terror_ai.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 8ae7be03b0f..c0c53014f8f 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 @@ -137,9 +137,9 @@ step_to(src,L) L.on = 1 L.broken() - L.do_attack_animation(src) + do_attack_animation(L) visible_message("[src] smashes the [L.name].") - break + return else if(ai_spins_webs && web_type && world.time > (last_spins_webs + freq_spins_webs)) last_spins_webs = world.time var/obj/structure/spider/terrorweb/T = locate() in get_turf(src) From 49a4e571864e5b205de4162bc4adb6cba7595fe2 Mon Sep 17 00:00:00 2001 From: Kyep Date: Sat, 7 Sep 2019 00:52:49 -0700 Subject: [PATCH 26/26] fixes prince special attack animation --- .../mob/living/simple_animal/hostile/terror_spiders/prince.dm | 1 + 1 file changed, 1 insertion(+) 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 e3ab39e1c8d..646e9e50660 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 @@ -38,6 +38,7 @@ /mob/living/simple_animal/hostile/poison/terror_spider/prince/spider_specialattack(mob/living/carbon/human/L) if(prob(15)) visible_message("[src] rams into [L], knocking [L.p_them()] to the floor!") + do_attack_animation(L) L.Weaken(5) L.Stun(5) else