diff --git a/code/datums/ai/basic_mobs/basic_subtrees/prowl.dm b/code/datums/ai/basic_mobs/basic_subtrees/prowl.dm index 24706ba16eb..e67c607da8b 100644 --- a/code/datums/ai/basic_mobs/basic_subtrees/prowl.dm +++ b/code/datums/ai/basic_mobs/basic_subtrees/prowl.dm @@ -26,3 +26,7 @@ hunt_targets = list(/turf/simulated/floor/plasteel) hunt_range = 8 hunt_chance = 50 + +/datum/ai_planning_subtree/find_and_hunt_target/prowl/lavaland + hunt_targets = list(/turf/simulated/floor/plating/asteroid) + hunt_chance = 15 diff --git a/code/datums/ai/targeting_strategy/basic_targeting_strategy.dm b/code/datums/ai/targeting_strategy/basic_targeting_strategy.dm index b867dd8b68a..ef80c889f4b 100644 --- a/code/datums/ai/targeting_strategy/basic_targeting_strategy.dm +++ b/code/datums/ai/targeting_strategy/basic_targeting_strategy.dm @@ -9,6 +9,8 @@ var/ignore_sight = FALSE /// Blackboard key containing the minimum stat of a living mob to target var/minimum_stat_key = BB_TARGET_MINIMUM_STAT + /// Blackboard key for the maximum aggro range of the mob + var/aggro_range_key = BB_AGGRO_RANGE /// If this blackboard key is TRUE, makes us only target wounded mobs var/target_wounded_key @@ -36,6 +38,10 @@ if(vision_range && get_dist(living_mob, the_target) > vision_range) return FALSE + var/aggro_range = our_controller.blackboard[aggro_range_key] + if(aggro_range && get_dist(living_mob, the_target) > aggro_range) + return FALSE + if(!ignore_sight && !can_see(living_mob, the_target, vision_range)) //Target has moved behind cover and we have lost line of sight to it return FALSE diff --git a/code/game/turfs/simulated/floor/chasm.dm b/code/game/turfs/simulated/floor/chasm.dm index 08aa0869352..1e288e42677 100644 --- a/code/game/turfs/simulated/floor/chasm.dm +++ b/code/game/turfs/simulated/floor/chasm.dm @@ -181,7 +181,7 @@ falling_atoms -= AM /turf/simulated/floor/chasm/can_cross_safely(atom/movable/crossing) - return locate(/obj/structure/bridge_walkway) in src + return (locate(/obj/structure/bridge_walkway) in src) || HAS_TRAIT(crossing, TRAIT_FLYING) /turf/simulated/floor/chasm/straight_down var/obj/effect/abstract/chasm_storage/storage diff --git a/code/game/turfs/simulated/floor/lava.dm b/code/game/turfs/simulated/floor/lava.dm index 889f95ae1df..1bb428f7f37 100644 --- a/code/game/turfs/simulated/floor/lava.dm +++ b/code/game/turfs/simulated/floor/lava.dm @@ -172,7 +172,10 @@ return /turf/simulated/floor/lava/can_cross_safely(atom/movable/crossing) - return locate(/obj/structure/bridge_walkway) in src + if(isliving(crossing)) + var/mob/living/crosser = crossing + return (locate(/obj/structure/bridge_walkway) in src) || HAS_TRAIT(crossing, TRAIT_FLYING) || ("lava" in crosser.weather_immunities) + return locate(/obj/structure/bridge_walkway) in src || HAS_TRAIT(crossing, TRAIT_FLYING) /turf/simulated/floor/lava/lava_land_surface oxygen = LAVALAND_OXYGEN diff --git a/code/modules/mob/living/basic/basic_mob.dm b/code/modules/mob/living/basic/basic_mob.dm index 3973cebeaf3..c9bb4c40c0d 100644 --- a/code/modules/mob/living/basic/basic_mob.dm +++ b/code/modules/mob/living/basic/basic_mob.dm @@ -288,6 +288,7 @@ RESTRICT_TYPE(/mob/living/basic) . = ..() if(!.) return FALSE + REMOVE_TRAIT(src, TRAIT_FLYING, INNATE_TRAIT) if(nest) nest.spawned_mobs -= src nest = null diff --git a/code/modules/mob/living/basic/mining/basilisk_ai.dm b/code/modules/mob/living/basic/mining/basilisk_ai.dm index fe2fb42e480..10316a95392 100644 --- a/code/modules/mob/living/basic/mining/basilisk_ai.dm +++ b/code/modules/mob/living/basic/mining/basilisk_ai.dm @@ -13,6 +13,7 @@ /datum/ai_planning_subtree/ranged_skirmish/watcher, /datum/ai_planning_subtree/attack_obstacle_in_path, /datum/ai_planning_subtree/basic_melee_attack_subtree, + /datum/ai_planning_subtree/find_and_hunt_target/prowl/lavaland, ) /datum/ai_planning_subtree/ranged_skirmish/watcher diff --git a/code/modules/mob/living/basic/mining/hivelord.dm b/code/modules/mob/living/basic/mining/hivelord.dm index b5942c378da..834e0a564d2 100644 --- a/code/modules/mob/living/basic/mining/hivelord.dm +++ b/code/modules/mob/living/basic/mining/hivelord.dm @@ -54,7 +54,7 @@ mouse_opacity = MOUSE_OPACITY_OPAQUE friendly_verb_continuous = "buzzes near" friendly_verb_simple = "buzz near" - speed = 2 + speed = -1 // Faster than a person maxHealth = 1 health = 1 harm_intent_damage = 5 diff --git a/code/modules/mob/living/basic/mining/hivelord_ai.dm b/code/modules/mob/living/basic/mining/hivelord_ai.dm index cdeff2f408f..735442e2259 100644 --- a/code/modules/mob/living/basic/mining/hivelord_ai.dm +++ b/code/modules/mob/living/basic/mining/hivelord_ai.dm @@ -13,6 +13,7 @@ /datum/ai_planning_subtree/simple_find_target, /datum/ai_planning_subtree/summon_brood, /datum/ai_planning_subtree/flee_target/legion, + /datum/ai_planning_subtree/find_and_hunt_target/prowl/lavaland, ) /// With evil speech @@ -22,6 +23,7 @@ /datum/ai_planning_subtree/simple_find_target, /datum/ai_planning_subtree/summon_brood, /datum/ai_planning_subtree/flee_target/legion, + /datum/ai_planning_subtree/find_and_hunt_target/prowl/lavaland, ) /datum/ai_controller/basic_controller/hivelord/legion/advanced