mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-23 13:10:02 +01:00
Tweaks ai escape_captivity behavior (#94224)
## About The Pull Request Now: AI will break chairs they're buckled in After PR: Ai will prefer to resist out of chairs if possible Fixes #94222 , partially Really I think this shouldn't be a subtree, orrrrr if it is it should be enabled by combat. It's weird that buckling a pet into a pet bed encourages them to get up ASAP. If a mob is completely docile or otherwise not trying to act, they shouldn't freak out and break whatever they're sat in. Alternatively pets need a behavior for seeking out a bed (but that's more effort) ## Changelog 🆑 Melbert fix: AI mobs will prefer to resist out of simple buckles (like being sat in a chair or bed) rather than try to break the chair. /🆑
This commit is contained in:
@@ -1608,4 +1608,7 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai
|
||||
/// Doesn't need to be applied to any turfs that override can_cross_safely
|
||||
#define TRAIT_AI_AVOID_TURF "warning_turf"
|
||||
|
||||
/// Object is dangerous to mobs buckled to it
|
||||
#define TRAIT_DANGEROUS_BUCKLE "dangerous_buckle"
|
||||
|
||||
// END TRAIT DEFINES
|
||||
|
||||
@@ -49,6 +49,7 @@ GLOBAL_LIST_INIT(traits_by_type, list(
|
||||
"TRAIT_CASTABLE_LOC" = TRAIT_CASTABLE_LOC,
|
||||
"TRAIT_CHASM_STOPPER" = TRAIT_CHASM_STOPPER,
|
||||
"TRAIT_COMBAT_MODE_SKIP_INTERACTION" = TRAIT_COMBAT_MODE_SKIP_INTERACTION,
|
||||
"TRAIT_DANGEROUS_BUCKLE" = TRAIT_DANGEROUS_BUCKLE,
|
||||
"TRAIT_DEL_ON_SPACE_DUMP" = TRAIT_DEL_ON_SPACE_DUMP,
|
||||
"TRAIT_FOOD_DONT_INHERIT_NAME_FROM_PROCESSED" = TRAIT_FOOD_DONT_INHERIT_NAME_FROM_PROCESSED,
|
||||
"TRAIT_FROZEN" = TRAIT_FROZEN,
|
||||
|
||||
@@ -8,11 +8,13 @@
|
||||
/datum/ai_planning_subtree/escape_captivity/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick)
|
||||
var/mob/living/living_pawn = controller.pawn
|
||||
|
||||
if (living_pawn.buckled && !ismob(living_pawn.buckled))
|
||||
if (!pacifist && !living_pawn.can_hold_items() || living_pawn.usable_hands < 1) // If we don't have hands then prioritise slapping the shit out of whatever we are attached to
|
||||
controller.queue_behavior(/datum/ai_behavior/break_out_of_object, living_pawn.buckled)
|
||||
else
|
||||
if (isobj(living_pawn.buckled))
|
||||
// we can just stand up we don't need to freak out
|
||||
if (pacifist || !HAS_TRAIT(living_pawn.buckled, TRAIT_DANGEROUS_BUCKLE))
|
||||
controller.queue_behavior(/datum/ai_behavior/resist)
|
||||
// otherwise beat the shit out of we we gotta get out NOW
|
||||
else
|
||||
controller.queue_behavior(/datum/ai_behavior/break_out_of_object, living_pawn.buckled)
|
||||
return SUBTREE_RETURN_FINISH_PLANNING
|
||||
|
||||
if (!isturf(living_pawn.loc) && !ismob(living_pawn.loc) && !istype(living_pawn.loc, /obj/item/mob_holder))
|
||||
@@ -26,7 +28,7 @@
|
||||
controller.queue_behavior(/datum/ai_behavior/break_out_of_object, contained_in)
|
||||
else
|
||||
controller.queue_behavior(/datum/ai_behavior/resist)
|
||||
return SUBTREE_RETURN_FINISH_PLANNING
|
||||
return SUBTREE_RETURN_FINISH_PLANNING
|
||||
|
||||
var/mob/puller = living_pawn.pulledby
|
||||
if (puller && puller.grab_state > GRAB_PASSIVE)
|
||||
|
||||
@@ -15,6 +15,10 @@
|
||||
can_deconstruct = FALSE
|
||||
var/static/mutable_appearance/nest_overlay = mutable_appearance('icons/mob/nonhuman-player/alien.dmi', "nestoverlay", LYING_MOB_LAYER)
|
||||
|
||||
/obj/structure/bed/nest/Initialize(mapload)
|
||||
. = ..()
|
||||
ADD_TRAIT(src, TRAIT_DANGEROUS_BUCKLE, INNATE_TRAIT)
|
||||
|
||||
/obj/structure/bed/nest/add_context(atom/source, list/context, obj/item/held_item, mob/living/user)
|
||||
if(held_item?.tool_behaviour == TOOL_WRENCH)
|
||||
return NONE
|
||||
|
||||
@@ -78,6 +78,7 @@
|
||||
/obj/structure/kitchenspike/Initialize(mapload)
|
||||
. = ..()
|
||||
register_context()
|
||||
ADD_TRAIT(src, TRAIT_DANGEROUS_BUCKLE, INNATE_TRAIT)
|
||||
|
||||
/obj/structure/kitchenspike/examine(mob/user)
|
||||
. = ..()
|
||||
|
||||
@@ -27,6 +27,7 @@
|
||||
underlay.layer = BELOW_MOB_LAYER
|
||||
SET_PLANE_EXPLICIT(underlay, GAME_PLANE, src)
|
||||
add_overlay(underlay)
|
||||
ADD_TRAIT(src, TRAIT_DANGEROUS_BUCKLE, INNATE_TRAIT)
|
||||
|
||||
/obj/structure/energy_net/play_attack_sound(damage, damage_type = BRUTE, damage_flag = 0)
|
||||
if(damage_type == BRUTE || damage_type == BURN)
|
||||
|
||||
Reference in New Issue
Block a user