diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm index e48eea451d..033636017d 100644 --- a/code/__DEFINES/traits.dm +++ b/code/__DEFINES/traits.dm @@ -173,6 +173,7 @@ #define TRAIT_AUTO_CATCH_ITEM "auto_catch_item" #define TRAIT_CLOWN_MENTALITY "clown_mentality" // The future is now, clownman. #define TRAIT_FREESPRINT "free_sprinting" +#define TRAIT_NO_TELEPORT "no-teleport" //you just can't #define TRAIT_NO_ALCOHOL "alcohol_intolerance" // common trait sources @@ -234,4 +235,5 @@ #define NUKEOP_ANTAGONIST "nukeop-antagonist" #define MADE_UNCLONEABLE "made-uncloneable" #define NUKEOP_TRAIT "nuke-op" +#define MEGAFAUNA_TRAIT "megafauna" #define DEATHSQUAD_TRAIT "deathsquad" diff --git a/code/datums/helper_datums/teleport.dm b/code/datums/helper_datums/teleport.dm index 1c2ce851fe..6b0981665d 100644 --- a/code/datums/helper_datums/teleport.dm +++ b/code/datums/helper_datums/teleport.dm @@ -66,7 +66,7 @@ var/area/A = get_area(curturf) var/area/B = get_area(destturf) - if(!forced && (A.noteleport || B.noteleport)) + if(!forced && (HAS_TRAIT(teleatom, TRAIT_NO_TELEPORT) || A.noteleport || B.noteleport)) return FALSE if(SEND_SIGNAL(destturf, COMSIG_ATOM_INTERCEPT_TELEPORT, channel, curturf, destturf)) diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index 54548962eb..33cbdb7cc9 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -16,7 +16,7 @@ name = "AI" icon = 'icons/mob/ai.dmi' icon_state = "ai" - move_resist = MOVE_FORCE_VERY_STRONG + move_resist = MOVE_FORCE_OVERPOWERING density = TRUE canmove = FALSE status_flags = CANSTUN|CANPUSH @@ -101,6 +101,7 @@ new/obj/structure/AIcore/deactivated(loc) //New empty terminal. return INITIALIZE_HINT_QDEL //Delete AI. + ADD_TRAIT(src, TRAIT_NO_TELEPORT, src) if(L && istype(L, /datum/ai_laws)) laws = L laws.associate(src) @@ -312,11 +313,13 @@ if(incapacitated()) return var/is_anchored = FALSE - if(move_resist == MOVE_FORCE_VERY_STRONG) - move_resist = MOVE_FORCE_VERY_STRONG + if(move_resist == MOVE_FORCE_OVERPOWERING) + move_resist = MOVE_FORCE_NORMAL else is_anchored = TRUE - move_resist = MOVE_FORCE_NORMAL + move_resist = MOVE_FORCE_OVERPOWERING + REMOVE_TRAIT(src, TRAIT_NO_TELEPORT, src) + ADD_TRAIT(src, TRAIT_NO_TELEPORT, src) to_chat(src, "You are now [is_anchored ? "" : "un"]anchored.") // the message in the [] will change depending whether or not the AI is anchored diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/megafauna.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/megafauna.dm index db35fc95c9..d7c52efe1d 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/megafauna.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/megafauna.dm @@ -39,6 +39,7 @@ /mob/living/simple_animal/hostile/megafauna/Initialize(mapload) . = ..() apply_status_effect(STATUS_EFFECT_CRUSHERDAMAGETRACKING) + ADD_TRAIT(src, TRAIT_NO_TELEPORT, MEGAFAUNA_TRAIT) /mob/living/simple_animal/hostile/megafauna/Destroy() QDEL_NULL(internal)