diff --git a/code/__DEFINES/traits/declarations.dm b/code/__DEFINES/traits/declarations.dm index 13466757108..d21b53334a0 100644 --- a/code/__DEFINES/traits/declarations.dm +++ b/code/__DEFINES/traits/declarations.dm @@ -1604,4 +1604,8 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai /// Mob is artificially spawned rather than being created through more natural means - applied to monkey cubes and such #define TRAIT_SPAWNED_MOB "spawned_mob" +/// Turf is one that ai mobs will generally avoid pathing through +/// Doesn't need to be applied to any turfs that override can_cross_safely +#define TRAIT_AI_AVOID_TURF "warning_turf" + // END TRAIT DEFINES diff --git a/code/_globalvars/traits/_traits.dm b/code/_globalvars/traits/_traits.dm index ae43a415f20..fdb59ad3c00 100644 --- a/code/_globalvars/traits/_traits.dm +++ b/code/_globalvars/traits/_traits.dm @@ -804,6 +804,7 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_MECHA_DIAGNOSTIC_CREATED" = TRAIT_MECHA_DIAGNOSTIC_CREATED, ), /turf = list( + "TRAIT_AI_AVOID_TURF" = TRAIT_AI_AVOID_TURF, "TRAIT_CHASM_STOPPED" = TRAIT_CHASM_STOPPED, "TRAIT_CONTAINMENT_FIELD" = TRAIT_CONTAINMENT_FIELD, "TRAIT_ELEVATED_TURF" = TRAIT_ELEVATED_TURF, diff --git a/code/datums/components/chasm.dm b/code/datums/components/chasm.dm index 7ce66b86c1a..f74261c0022 100644 --- a/code/datums/components/chasm.dm +++ b/code/datums/components/chasm.dm @@ -42,6 +42,7 @@ RegisterSignal(parent, SIGNAL_ADDTRAIT(TRAIT_CHASM_STOPPED), PROC_REF(on_chasm_stopped)) RegisterSignal(parent, SIGNAL_REMOVETRAIT(TRAIT_CHASM_STOPPED), PROC_REF(on_chasm_no_longer_stopped)) target_turf = target + ADD_TRAIT(parent, TRAIT_AI_AVOID_TURF, REF(src)) RegisterSignal(parent, COMSIG_ATOM_ABSTRACT_ENTERED, PROC_REF(entered)) RegisterSignal(parent, COMSIG_ATOM_ABSTRACT_EXITED, PROC_REF(exited)) RegisterSignal(parent, COMSIG_ATOM_AFTER_SUCCESSFUL_INITIALIZED_ON, PROC_REF(initialized_on)) @@ -53,6 +54,7 @@ parent.AddComponent(/datum/component/fishing_spot, GLOB.preset_fish_sources[/datum/fish_source/chasm]) /datum/component/chasm/UnregisterFromParent() + REMOVE_TRAIT(parent, TRAIT_AI_AVOID_TURF, REF(src)) storage = null /datum/component/chasm/proc/entered(datum/source, atom/movable/arrived, atom/old_loc, list/atom/old_locs) diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm index 6c14103cd73..72ad60b3c46 100644 --- a/code/game/objects/structures/tables_racks.dm +++ b/code/game/objects/structures/tables_racks.dm @@ -552,6 +552,7 @@ COMSIG_ATOM_ENTERED = PROC_REF(on_entered), ) AddElement(/datum/element/connect_loc, loc_connections) + AddElement(/datum/element/give_turf_traits, string_list(list(TRAIT_AI_AVOID_TURF))) /obj/structure/table/glass/proc/on_entered(datum/source, atom/movable/AM) SIGNAL_HANDLER @@ -1432,4 +1433,3 @@ R.add_fingerprint(user) qdel(src) building = FALSE - diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index 4fc848f9f24..3a17329e878 100644 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -804,7 +804,7 @@ GLOBAL_LIST_EMPTY(station_turfs) /// Returns whether it is safe for an atom to move across this turf /turf/proc/can_cross_safely(atom/movable/crossing) - return TRUE + return !HAS_TRAIT(src, TRAIT_AI_AVOID_TURF) /** * the following are some fishing-related optimizations to shave off as much