From 5db9271022ccef630bb7dacc79f814e8895b00ef Mon Sep 17 00:00:00 2001 From: SmArtKar <44720187+SmArtKar@users.noreply.github.com> Date: Thu, 28 May 2026 05:51:59 +0200 Subject: [PATCH] Makes mining mobs prioritize humans over raptors (#96134) --- code/__DEFINES/traits/declarations.dm | 3 ++ code/_globalvars/traits/_traits.dm | 1 + .../mining_strategies.dm | 29 +++++++++++-------- .../basic/lavaland/raptor/raptor_color.dm | 6 +++- 4 files changed, 26 insertions(+), 13 deletions(-) diff --git a/code/__DEFINES/traits/declarations.dm b/code/__DEFINES/traits/declarations.dm index 1a28fe66c50..8fc2af35f4b 100644 --- a/code/__DEFINES/traits/declarations.dm +++ b/code/__DEFINES/traits/declarations.dm @@ -1666,4 +1666,7 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai /// Makes the owner immune from the pacification from synthpax #define TRAIT_SYNTHPAX_IMMUNE "synthpax_immune" +/// Mobs with this trait will always have be a priority target for mining mobs +#define TRAIT_MINING_AGGRO "mining_aggro" + // END TRAIT DEFINES diff --git a/code/_globalvars/traits/_traits.dm b/code/_globalvars/traits/_traits.dm index 5a68ba55356..9dcc0090962 100644 --- a/code/_globalvars/traits/_traits.dm +++ b/code/_globalvars/traits/_traits.dm @@ -396,6 +396,7 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_MIND_READER" = TRAIT_MIND_READER, "TRAIT_MINDSHIELD" = TRAIT_MINDSHIELD, "TRAIT_MIND_TEMPORARILY_GONE" = TRAIT_MIND_TEMPORARILY_GONE, + "TRAIT_MINING_AGGRO" = TRAIT_MINING_AGGRO, "TRAIT_MINOR_NIGHT_VISION" = TRAIT_MINOR_NIGHT_VISION, "TRAIT_FAKE_SOULLESS" = TRAIT_FAKE_SOULLESS, "TRAIT_MOB_BREEDER" = TRAIT_MOB_BREEDER, diff --git a/code/datums/ai/basic_mobs/target_priority_strategies/mining_strategies.dm b/code/datums/ai/basic_mobs/target_priority_strategies/mining_strategies.dm index e69ee59ff10..569f23fff18 100644 --- a/code/datums/ai/basic_mobs/target_priority_strategies/mining_strategies.dm +++ b/code/datums/ai/basic_mobs/target_priority_strategies/mining_strategies.dm @@ -1,7 +1,9 @@ /// Ashies get lower priorities than humans #define AGGRO_PRIORITY_ASHWALKER 1 +/// Basicmobs have slightly less priority so that miners are targeted over their raptors +#define AGGRO_PRIORITY_BASICMOB 3 /// Everyone by default -#define AGGRO_PRIORITY_HUMAN 2 +#define AGGRO_PRIORITY_HUMAN 5 /// Mobs who have attacked someone in our view recently #define AGGRO_PRIORITY_MINER 8 /// NODE drone priority @@ -34,20 +36,22 @@ // Check if they've recently attacked any of our friends, if so - increase their priority by 1 for each attack in the past [retaliate_aggro_memory] seconds var/list/allies_shitlist = controller.blackboard[BB_MINING_MOB_REINFORCEMENTS_REQUESTS] var/list/target_requests = allies_shitlist?[target] - if (!target_requests) - return target.has_faction(FACTION_ASHWALKER) ? AGGRO_PRIORITY_ASHWALKER : AGGRO_PRIORITY_HUMAN - var/aggro_boost = 0 - var/total_requests = length(target_requests) - // Goes end-to-start because we do not care about requests older than [retaliate_aggro_memory] - for (var/i in 1 to total_requests) - var/request_time = target_requests[total_requests - i + 1] - if (request_time + retaliate_aggro_memory < world.time) - break - aggro_boost += 1 + if (target_requests) + var/total_requests = length(target_requests) + // Goes end-to-start because we do not care about requests older than [retaliate_aggro_memory] + for (var/i in 1 to total_requests) + var/request_time = target_requests[total_requests - i + 1] + if (request_time + retaliate_aggro_memory < world.time) + break + aggro_boost += 1 - if (aggro_boost) + if (aggro_boost || HAS_TRAIT(target, TRAIT_MINING_AGGRO)) return AGGRO_PRIORITY_MINER + aggro_boost + + if (isbasicmob(target)) + return AGGRO_PRIORITY_BASICMOB + return target.has_faction(FACTION_ASHWALKER) ? AGGRO_PRIORITY_ASHWALKER : AGGRO_PRIORITY_HUMAN /datum/target_priority_strategy/mining/select_target(datum/ai_controller/controller, list/atom/targets) @@ -77,6 +81,7 @@ node_priority = AGGRO_PRIORITY_NODE_LOW_PRIO #undef AGGRO_PRIORITY_ASHWALKER +#undef AGGRO_PRIORITY_BASICMOB #undef AGGRO_PRIORITY_HUMAN #undef AGGRO_PRIORITY_MINER #undef AGGRO_PRIORITY_NODE diff --git a/code/modules/mob/living/basic/lavaland/raptor/raptor_color.dm b/code/modules/mob/living/basic/lavaland/raptor/raptor_color.dm index b366a44b7b6..1be8dcb6ad9 100644 --- a/code/modules/mob/living/basic/lavaland/raptor/raptor_color.dm +++ b/code/modules/mob/living/basic/lavaland/raptor/raptor_color.dm @@ -96,6 +96,10 @@ GLOBAL_LIST_INIT(raptor_colors, init_raptor_colors()) // Doesn't care for your excuses for friendly fire ai_controller = /datum/ai_controller/basic_controller/raptor/aggressive +/datum/raptor_color/red/setup_raptor(mob/living/basic/raptor/raptor) + . = ..() + ADD_TRAIT(raptor, TRAIT_MINING_AGGRO, INNATE_TRAIT) + /datum/raptor_color/purple color = "purple" description = "A small, nimble breed, these raptors have been bred as travel companions rather than mounts, capable of storing the owner's possessions and helping them escape from danger unscathed." @@ -440,7 +444,7 @@ GLOBAL_LIST_INIT(raptor_colors, init_raptor_colors()) /datum/raptor_color/black/setup_raptor(mob/living/basic/raptor/raptor) . = ..() - raptor.add_traits(list(TRAIT_LAVA_IMMUNE, TRAIT_NOFIRE_SPREAD), INNATE_TRAIT) + raptor.add_traits(list(TRAIT_LAVA_IMMUNE, TRAIT_NOFIRE_SPREAD, TRAIT_MINING_AGGRO), INNATE_TRAIT) /datum/raptor_color/black/setup_adult(mob/living/basic/raptor/raptor) . = ..()