From cb1a832add78b87c2761b05a331d4ded3048fcf4 Mon Sep 17 00:00:00 2001 From: Zwei <35403274+Gottfrei@users.noreply.github.com> Date: Fri, 10 May 2024 18:46:21 +0300 Subject: [PATCH] refactor: No Transform Trait (#4961) * No Transform Trait * Few Tweaks --------- Co-authored-by: Daeberdir <115735095+Daeberdir@users.noreply.github.com> --- code/__DEFINES/traits/declarations.dm | 3 +++ code/__DEFINES/traits/sources.dm | 14 ++++++++++- code/__HELPERS/unique_ids.dm | 7 ++++++ code/_globalvars/traits.dm | 1 + code/controllers/subsystem/npcpool.dm | 2 +- code/datums/cinematics/cinematic_datum.dm | 16 +++++-------- .../datums/diseases/viruses/transformation.dm | 4 ++-- code/datums/spells/bloodcrawl.dm | 9 +++---- code/datums/spells/devil.dm | 16 ++++++------- code/datums/spells/ethereal_jaunt.dm | 4 ++-- code/datums/spells/rod_form.dm | 11 ++++++--- code/game/gamemodes/cult/runes.dm | 6 ++--- .../gamemodes/miniantags/revenant/revenant.dm | 8 +++---- .../special_shadowling_abilities.dm | 2 +- .../objects/items/weapons/anomaly_extract.dm | 10 ++++---- code/game/turfs/simulated/floor/chasm.dm | 8 +++---- .../vampire/vampire_powers/bestia_powers.dm | 4 ++-- code/modules/awaymissions/zvis.dm | 5 ++-- code/modules/client/client_defines.dm | 1 - .../mining/lavaland/loot/colossus_loot.dm | 4 ++-- .../mining/lavaland/loot/tendril_loot.dm | 4 ++-- code/modules/mob/living/carbon/alien/death.dm | 4 ++-- .../carbon/alien/humanoid/update_icons.dm | 3 +-- code/modules/mob/living/carbon/brain/death.dm | 2 +- code/modules/mob/living/carbon/human/death.dm | 6 ++--- code/modules/mob/living/carbon/human/life.dm | 3 ++- .../mob/living/carbon/human/update_icons.dm | 2 +- code/modules/mob/living/carbon/life.dm | 2 +- code/modules/mob/living/death.dm | 6 ++--- code/modules/mob/living/life.dm | 3 ++- code/modules/mob/living/silicon/death.dm | 4 ++-- .../modules/mob/living/silicon/robot/death.dm | 4 ++-- code/modules/mob/living/silicon/robot/life.dm | 3 ++- .../mob/living/simple_animal/slime/life.dm | 4 +++- code/modules/mob/mob.dm | 18 ++++++++------ code/modules/mob/mob_defines.dm | 1 - code/modules/mob/mob_movement.dm | 13 ++++------ code/modules/mob/transform_procs.dm | 24 +++++++++---------- .../projectiles/guns/projectile/launchers.dm | 4 ++-- code/modules/projectiles/projectile/magic.dm | 4 ++-- .../research/xenobiology/xenobiology.dm | 4 ++-- .../modules/ruins/lavalandruin_code/puzzle.dm | 4 ++-- 42 files changed, 141 insertions(+), 116 deletions(-) diff --git a/code/__DEFINES/traits/declarations.dm b/code/__DEFINES/traits/declarations.dm index 00799f40548..37b70848923 100644 --- a/code/__DEFINES/traits/declarations.dm +++ b/code/__DEFINES/traits/declarations.dm @@ -33,6 +33,9 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai #define TRAIT_EMOTE_MUTE "emote_mute" #define TRAIT_IGNORESLOWDOWN "ignoreslow" #define TRAIT_IGNOREDAMAGESLOWDOWN "ignoredamageslowdown" +/// "Magic" trait that blocks the mob from moving or interacting with anything. Used for transient stuff like mob transformations or incorporality in special cases. +/// Will block movement, `Life()` (!!!), and other stuff based on the mob. +#define TRAIT_NO_TRANSFORM "block_transformations" /// This mob heals from carp rifts. #define TRAIT_HEALS_FROM_CARP_RIFTS "heals_from_carp_rifts" /// This mob heals from cult pylons. diff --git a/code/__DEFINES/traits/sources.dm b/code/__DEFINES/traits/sources.dm index 8da9ad842fb..66f3b814765 100644 --- a/code/__DEFINES/traits/sources.dm +++ b/code/__DEFINES/traits/sources.dm @@ -4,7 +4,7 @@ /// The item is magically cursed #define CURSED_ITEM_TRAIT(item_type) "cursed_item_[item_type]" /// Gives a unique trait source for any given datum -#define UNIQUE_TRAIT_SOURCE(target) "unique_source_[UID(target)]" +#define UNIQUE_TRAIT_SOURCE(target) "unique_source_[UID_of(target)]" /// Trait applied by element #define ELEMENT_TRAIT(source) "element_trait_[source]" /// A trait given by a specific status effect (not sure why we need both but whatever!) @@ -22,6 +22,10 @@ /// cannot be removed without admin intervention #define ROUNDSTART_TRAIT "roundstart" +#define CINEMATIC_TRAIT "cinematic" + +#define CHASM_TRAIT "chasm_trait" + // unique trait sources #define CULT_EYES "cult_eyes" #define CLOCK_HANDS "clock_hands" @@ -29,6 +33,7 @@ #define CHANGELING_TRAIT "changeling" #define VAMPIRE_TRAIT "vampire" #define NINJA_TRAIT "space-ninja" +#define REVENANT_TRAIT "revenant" /// (B)admins only. #define ADMIN_TRAIT "admin" @@ -63,6 +68,13 @@ /// A trait gained from a mob's leap action, like the leaper #define LEAPING_TRAIT "leaping" +#define INCORPOREAL_TRAIT "incorporeal" + +/// Will be removed once the transformation is complete. +#define TEMPORARY_TRANSFORMATION_TRAIT "temporary_transformation" +/// Considered "permanent" since we'll be deleting the old mob and the client will be inserted into a new one (without this trait) +#define PERMANENT_TRANSFORMATION_TRAIT "permanent_transformation" + /// Trait given by your current speed #define SPEED_TRAIT "speed_trait" diff --git a/code/__HELPERS/unique_ids.dm b/code/__HELPERS/unique_ids.dm index 946292fceff..5e75f7827e3 100644 --- a/code/__HELPERS/unique_ids.dm +++ b/code/__HELPERS/unique_ids.dm @@ -35,6 +35,13 @@ GLOBAL_LIST_EMPTY(uid_log) GLOB.uid_log[type]++ return unique_datum_id + +/proc/UID_of(datum/target) + if(!isdatum(target)) + CRASH("Non-datum passed as argument.") + return target.UID() + + /** * Locates a datum based off of the UID * diff --git a/code/_globalvars/traits.dm b/code/_globalvars/traits.dm index b2ffece2691..7d50ed1f503 100644 --- a/code/_globalvars/traits.dm +++ b/code/_globalvars/traits.dm @@ -46,6 +46,7 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_LASEREYES" = TRAIT_LASEREYES, "TRAIT_MUTE" = TRAIT_MUTE, "TRAIT_NEGATES_GRAVITY" = TRAIT_NEGATES_GRAVITY, + "TRAIT_NO_TRANSFORM" = TRAIT_NO_TRANSFORM, "TRAIT_PACIFISM" = TRAIT_PACIFISM, "TRAIT_PULL_BLOCKED" = TRAIT_PULL_BLOCKED, "TRAIT_RESTRAINED" = TRAIT_RESTRAINED, diff --git a/code/controllers/subsystem/npcpool.dm b/code/controllers/subsystem/npcpool.dm index 83b7fd773e8..520fcd05207 100644 --- a/code/controllers/subsystem/npcpool.dm +++ b/code/controllers/subsystem/npcpool.dm @@ -26,7 +26,7 @@ SUBSYSTEM_DEF(npcpool) GLOB.simple_animals[AI_ON] -= SA continue - if(!SA.ckey && !SA.notransform) + if(!SA.ckey && !HAS_TRAIT(SA, TRAIT_NO_TRANSFORM)) if(SA.stat != DEAD) SA.handle_automated_movement() if(SA.stat != DEAD) diff --git a/code/datums/cinematics/cinematic_datum.dm b/code/datums/cinematics/cinematic_datum.dm index 8fb1ee23054..4067817df7c 100644 --- a/code/datums/cinematics/cinematic_datum.dm +++ b/code/datums/cinematics/cinematic_datum.dm @@ -36,7 +36,7 @@ /datum/cinematic /// A list of all clients watching the cinematic var/list/client/watching = list() - /// A list of all mobs who have notransform set while watching the cinematic + /// A list of all mobs who have TRAIT_NO_TRANSFORM set, while watching the cinematic var/list/datum/locked = list() /// Whether the cinematic is a global cinematic or not var/is_global = FALSE @@ -60,7 +60,7 @@ /datum/cinematic/Destroy() QDEL_NULL(screen) - QDEL_NULL(special_callback) + special_callback = null watching.Cut() locked.Cut() return ..() @@ -126,11 +126,7 @@ /datum/cinematic/proc/show_to(mob/watching_mob, client/watching_client) SIGNAL_HANDLER - // We could technically rip people out of notransform who shouldn't be, - // so we'll only lock down all viewing mobs who don't have it already set. - // This does potentially mean some mobs could lose their notrasnform and - // not be locked down by cinematics, but that should be very unlikely. - if(!watching_mob.notransform) + if(!HAS_TRAIT_FROM(watching_mob, TRAIT_NO_TRANSFORM, CINEMATIC_TRAIT)) lock_mob(watching_mob) // Only show the actual cinematic to cliented mobs. @@ -187,7 +183,7 @@ */ /datum/cinematic/proc/lock_mob(mob/to_lock) locked += to_lock - to_lock.notransform = TRUE + ADD_TRAIT(to_lock, TRAIT_NO_TRANSFORM, CINEMATIC_TRAIT) /** @@ -197,7 +193,7 @@ var/mob/locked_mob = mob_ref if(isnull(locked_mob)) return - locked_mob.notransform = FALSE + REMOVE_TRAIT(locked_mob, TRAIT_NO_TRANSFORM, CINEMATIC_TRAIT) UnregisterSignal(locked_mob, COMSIG_MOB_CLIENT_LOGIN) @@ -212,7 +208,7 @@ UnregisterSignal(no_longer_watching, COMSIG_PARENT_QDELETING) // We'll clear the cinematic if they have a mob which has one, - // but we won't remove notransform. Wait for the cinematic end to do that. + // but we won't remove TRAIT_NO_TRANSFORM. Wait for the cinematic end to do that. no_longer_watching.mob?.clear_fullscreen("cinematic") no_longer_watching.screen -= screen diff --git a/code/datums/diseases/viruses/transformation.dm b/code/datums/diseases/viruses/transformation.dm index 2f59da8190f..95330453b3b 100644 --- a/code/datums/diseases/viruses/transformation.dm +++ b/code/datums/diseases/viruses/transformation.dm @@ -51,10 +51,10 @@ affected_mob.death(1) return - if(affected_mob.notransform) + if(HAS_TRAIT(affected_mob, TRAIT_NO_TRANSFORM)) return - affected_mob.notransform = 1 + ADD_TRAIT(affected_mob, TRAIT_NO_TRANSFORM, PERMANENT_TRANSFORMATION_TRAIT) affected_mob.canmove = FALSE affected_mob.icon = null affected_mob.cut_overlays() diff --git a/code/datums/spells/bloodcrawl.dm b/code/datums/spells/bloodcrawl.dm index 1238774cfaa..699dfd02a29 100644 --- a/code/datums/spells/bloodcrawl.dm +++ b/code/datums/spells/bloodcrawl.dm @@ -192,7 +192,7 @@ /obj/effect/proc_holder/spell/bloodcrawl/proc/post_phase_in(mob/living/user, obj/effect/dummy/slaughter/holder) - user.notransform = FALSE + REMOVE_TRAIT(user, TRAIT_NO_TRANSFORM, UNIQUE_TRAIT_SOURCE(src)) /obj/effect/proc_holder/spell/bloodcrawl/proc/phaseout(obj/effect/decal/cleanable/enter_point, mob/living/carbon/user) @@ -200,7 +200,7 @@ if(istype(user) && !block_hands(user)) return FALSE - user.notransform = TRUE + ADD_TRAIT(user, TRAIT_NO_TRANSFORM, UNIQUE_TRAIT_SOURCE(src)) INVOKE_ASYNC(src, PROC_REF(async_phase), enter_point, user) return TRUE @@ -244,8 +244,9 @@ /obj/effect/proc_holder/spell/bloodcrawl/proc/phasein(atom/enter_point, mob/living/user) - - if(user.notransform) + if(HAS_TRAIT_NOT_FROM(user, TRAIT_NO_TRANSFORM, UNIQUE_TRAIT_SOURCE(src))) + return FALSE + if(HAS_TRAIT_FROM(user, TRAIT_NO_TRANSFORM, UNIQUE_TRAIT_SOURCE(src))) to_chat(user, span_warning("Finish eating first!")) return FALSE rise_message(enter_point) diff --git a/code/datums/spells/devil.dm b/code/datums/spells/devil.dm index 590080a8c09..e8a94f8328f 100644 --- a/code/datums/spells/devil.dm +++ b/code/datums/spells/devil.dm @@ -125,7 +125,7 @@ if(continuing) to_chat(user,"You are now phasing in.") if(do_mob(user,user,150)) - user.infernalphasein() + user.infernalphasein(src) else to_chat(user,"You can only re-appear near a potential signer or on a shuttle.") revert_cast() @@ -134,8 +134,8 @@ user.fakefire() to_chat(user,"You begin to phase back into sinful flames.") if(do_mob(user,user,150)) - user.notransform = TRUE - user.infernalphaseout() + ADD_TRAIT(user, TRAIT_NO_TRANSFORM, UNIQUE_TRAIT_SOURCE(src)) + user.infernalphaseout(src) else to_chat(user,"You must remain still while exiting.") user.ExtinguishMob() @@ -144,7 +144,7 @@ revert_cast() -/mob/living/proc/infernalphaseout() +/mob/living/proc/infernalphaseout(obj/effect/proc_holder/spell/infernal_jaunt/spell) dust_animation() visible_message("[src] disappears in a flashfire!") playsound(get_turf(src), 'sound/misc/enter_blood.ogg', 100, 1, -1) @@ -152,14 +152,14 @@ ExtinguishMob() forceMove(s_holder) holder = s_holder - notransform = FALSE + REMOVE_TRAIT(src, TRAIT_NO_TRANSFORM, UNIQUE_TRAIT_SOURCE(spell)) fakefireextinguish() -/mob/living/proc/infernalphasein() - if(notransform) +/mob/living/proc/infernalphasein(obj/effect/proc_holder/spell/infernal_jaunt/spell) + if(HAS_TRAIT(src, TRAIT_NO_TRANSFORM)) to_chat(src,"You're too busy to jaunt in.") - return 0 + return FALSE fakefire() forceMove(get_turf(src)) visible_message("[src] appears in a firey blaze!") diff --git a/code/datums/spells/ethereal_jaunt.dm b/code/datums/spells/ethereal_jaunt.dm index 908e3577f29..9c184c1f47c 100644 --- a/code/datums/spells/ethereal_jaunt.dm +++ b/code/datums/spells/ethereal_jaunt.dm @@ -32,14 +32,14 @@ /obj/effect/proc_holder/spell/ethereal_jaunt/proc/do_jaunt(mob/living/target) playsound(get_turf(target), sound_in, 50, TRUE, -1) - target.notransform = TRUE + ADD_TRAIT(target, TRAIT_NO_TRANSFORM, UNIQUE_TRAIT_SOURCE(src)) var/turf/mobloc = get_turf(target) var/obj/effect/dummy/spell_jaunt/holder = new jaunt_type_path(mobloc) new jaunt_out_type(mobloc, target.dir) target.ExtinguishMob() target.forceMove(holder) target.reset_perspective(holder) - target.notransform = FALSE //mob is safely inside holder now, no need for protection. + REMOVE_TRAIT(target, TRAIT_NO_TRANSFORM, UNIQUE_TRAIT_SOURCE(src)) if(jaunt_water_effect) jaunt_steam(mobloc) diff --git a/code/datums/spells/rod_form.dm b/code/datums/spells/rod_form.dm index 5b170b90a8f..3864c01bfa6 100644 --- a/code/datums/spells/rod_form.dm +++ b/code/datums/spells/rod_form.dm @@ -28,10 +28,11 @@ var/turf/start = get_turf(M) var/obj/effect/immovablerod/wizard/W = new(start, get_ranged_target_turf(M, M.dir, (15 + spell_level * 3)), rod_delay) W.wizard = M + W.spell = src W.max_distance += spell_level * 3 //You travel farther when you upgrade the spell W.start_turf = start M.forceMove(W) - M.notransform = TRUE + ADD_TRAIT(M, TRAIT_NO_TRANSFORM, UNIQUE_TRAIT_SOURCE(src)) M.status_flags |= GODMODE @@ -42,10 +43,11 @@ var/max_distance = 13 var/mob/living/wizard var/turf/start_turf + var/obj/effect/proc_holder/spell/spell notify = FALSE -/obj/effect/immovablerod/wizard/Move() +/obj/effect/immovablerod/wizard/Move(atom/newloc, direct = NONE, movetime) if(get_dist(start_turf, get_turf(src)) >= max_distance) qdel(src) ..() @@ -54,7 +56,10 @@ /obj/effect/immovablerod/wizard/Destroy() if(wizard) wizard.status_flags &= ~GODMODE - wizard.notransform = FALSE + REMOVE_TRAIT(wizard, TRAIT_NO_TRANSFORM, UNIQUE_TRAIT_SOURCE(spell)) wizard.forceMove(get_turf(src)) + wizard = null + spell = null + start_turf = null return ..() diff --git a/code/game/gamemodes/cult/runes.dm b/code/game/gamemodes/cult/runes.dm index 840b77c8d20..22d9b454a87 100644 --- a/code/game/gamemodes/cult/runes.dm +++ b/code/game/gamemodes/cult/runes.dm @@ -200,10 +200,10 @@ structure_check() searches for nearby cultist structures required for the invoca new /obj/effect/temp_visual/dir_setting/cult/phase/out(location, user.dir) new /obj/effect/temp_visual/dir_setting/cult/phase(target, user.dir) // So that the mob only appears after the effect is finished - user.notransform = TRUE + ADD_TRAIT(user, TRAIT_NO_TRANSFORM, UNIQUE_TRAIT_SOURCE(src)) user.invisibility = INVISIBILITY_MAXIMUM - sleep(12) - user.notransform = FALSE + sleep(1.2 SECONDS) + REMOVE_TRAIT(user, TRAIT_NO_TRANSFORM, UNIQUE_TRAIT_SOURCE(src)) user.invisibility = 0 /obj/effect/rune/proc/do_invoke_glow() diff --git a/code/game/gamemodes/miniantags/revenant/revenant.dm b/code/game/gamemodes/miniantags/revenant/revenant.dm index 82c7d6e8b2d..a665f3db892 100644 --- a/code/game/gamemodes/miniantags/revenant/revenant.dm +++ b/code/game/gamemodes/miniantags/revenant/revenant.dm @@ -77,7 +77,7 @@ to_chat(src, "You are once more concealed.") if(unstun_time && world.time >= unstun_time) unstun_time = 0 - notransform = 0 + REMOVE_TRAIT(src, TRAIT_NO_TRANSFORM, REVENANT_TRAIT) to_chat(src, "You can move again!") update_icon(UPDATE_ICON_STATE) @@ -217,7 +217,7 @@ return FALSE to_chat(src, "NO! No... it's too late, you can feel your essence breaking apart...") - notransform = 1 + ADD_TRAIT(src, TRAIT_NO_TRANSFORM, REVENANT_TRAIT) revealed = 1 invisibility = 0 playsound(src, 'sound/effects/screech.ogg', 100, 1) @@ -297,7 +297,7 @@ return if(time <= 0) return - notransform = 1 + ADD_TRAIT(src, TRAIT_NO_TRANSFORM, REVENANT_TRAIT) if(!unstun_time) to_chat(src, "You cannot move!") unstun_time = world.time + time @@ -308,7 +308,7 @@ /mob/living/simple_animal/revenant/update_icon_state() if(revealed) - if(notransform) + if(HAS_TRAIT_FROM(src, TRAIT_NO_TRANSFORM, REVENANT_TRAIT)) if(draining) icon_state = icon_drain else diff --git a/code/game/gamemodes/shadowling/special_shadowling_abilities.dm b/code/game/gamemodes/shadowling/special_shadowling_abilities.dm index 4d830affed4..c30977e3b83 100644 --- a/code/game/gamemodes/shadowling/special_shadowling_abilities.dm +++ b/code/game/gamemodes/shadowling/special_shadowling_abilities.dm @@ -183,7 +183,7 @@ GLOBAL_LIST_INIT(possibleShadowlingNames, list("U'ruan", "Y`shej", "Nex", "Hel-u return if("Yes") - user.notransform = TRUE + ADD_TRAIT(user, TRAIT_NO_TRANSFORM, PERMANENT_TRANSFORMATION_TRAIT) user.visible_message("[user] gently rises into the air, red light glowing in its eyes.", \ "You rise into the air and get ready for your transformation.") diff --git a/code/game/objects/items/weapons/anomaly_extract.dm b/code/game/objects/items/weapons/anomaly_extract.dm index 1ad55fc89e6..ee174ba9cd2 100644 --- a/code/game/objects/items/weapons/anomaly_extract.dm +++ b/code/game/objects/items/weapons/anomaly_extract.dm @@ -100,9 +100,8 @@ /obj/effect/proc_holder/spell/slime_degradation/proc/slime_transform(mob/living/carbon/human/user) - for(var/obj/item/I in user) - if(!istype(I, /obj/item/implant)) - user.drop_item_ground(I, force = TRUE) + for(var/obj/item/check as anything in user.get_equipped_items(include_pockets = TRUE, include_hands = TRUE)) + user.drop_item_ground(check, force = TRUE) user.underwear = "Nude" user.undershirt = "Nude" @@ -116,7 +115,7 @@ span_notice("You hear something squishing...")) original_body = user - user.notransform = TRUE + ADD_TRAIT(original_body, TRAIT_NO_TRANSFORM, UNIQUE_TRAIT_SOURCE(src)) slimeme.status_flags |= GODMODE user.status_flags |= GODMODE slimeme.canmove = FALSE @@ -148,7 +147,6 @@ cooldown_handler.start_recharge() playsound(get_turf(usr), sound, 50, TRUE) user.density = FALSE - original_body.notransform = TRUE original_body.dir = SOUTH original_body.forceMove(get_turf(user)) original_body.canmove = FALSE @@ -170,7 +168,7 @@ stack_trace("Spell or original_body was qdeled during the [src] work.") return - original_body.notransform = FALSE + REMOVE_TRAIT(original_body, TRAIT_NO_TRANSFORM, UNIQUE_TRAIT_SOURCE(src)) original_body.status_flags &= ~GODMODE original_body.canmove = TRUE is_transformed = FALSE diff --git a/code/game/turfs/simulated/floor/chasm.dm b/code/game/turfs/simulated/floor/chasm.dm index 42ec1d3c2bb..1ae87d1228f 100644 --- a/code/game/turfs/simulated/floor/chasm.dm +++ b/code/game/turfs/simulated/floor/chasm.dm @@ -236,7 +236,7 @@ into the enveloping dark.")) if(isliving(AM)) var/mob/living/L = AM - L.notransform = TRUE + ADD_TRAIT(L, TRAIT_NO_TRANSFORM, CHASM_TRAIT) L.Stun(400 SECONDS) L.resting = TRUE var/oldtransform = AM.transform @@ -283,11 +283,10 @@ visible_message(span_boldwarning("[src] spits out [AM]!")) AM.throw_at(get_edge_target_turf(src, pick(GLOB.alldirs)), rand(1, 10), rand(1, 10)) - var/mob/living/fallen_mob = AM if(fallen_mob.stat != DEAD) fallen_mob.death(TRUE) - fallen_mob.notransform = FALSE + REMOVE_TRAIT(fallen_mob, TRAIT_NO_TRANSFORM, CHASM_TRAIT) fallen_mob.apply_damage(1000) else @@ -317,7 +316,7 @@ if(isliving(gone)) UnregisterSignal(gone, COMSIG_LIVING_REVIVE) -#define CHASM_TRAIT "chasm trait" + /** * Called if something comes back to life inside the pit. Expected sources are badmins and changelings. * Ethereals should take enough damage to be smashed and not revive. @@ -341,7 +340,6 @@ escapee.Sleeping(20 SECONDS) UnregisterSignal(escapee, COMSIG_LIVING_REVIVE) -#undef CHASM_TRAIT /turf/simulated/floor/chasm/straight_down/lava_land_surface/normal_air oxygen = MOLES_O2STANDARD diff --git a/code/modules/antagonists/vampire/vampire_powers/bestia_powers.dm b/code/modules/antagonists/vampire/vampire_powers/bestia_powers.dm index 2a955cf4437..b8d37372100 100644 --- a/code/modules/antagonists/vampire/vampire_powers/bestia_powers.dm +++ b/code/modules/antagonists/vampire/vampire_powers/bestia_powers.dm @@ -1004,7 +1004,7 @@ vampire.stop_sucking() original_body = user vampire_animal.status_flags |= GODMODE - user.notransform = TRUE + ADD_TRAIT(user, TRAIT_NO_TRANSFORM, UNIQUE_TRAIT_SOURCE(src)) user.status_flags |= GODMODE vampire_animal.canmove = FALSE user.forceMove(vampire_animal) @@ -1066,7 +1066,7 @@ stack_trace("Spell or original_body was qdeled during the [src] work.") return - original_body.notransform = FALSE + REMOVE_TRAIT(original_body, TRAIT_NO_TRANSFORM, UNIQUE_TRAIT_SOURCE(src)) original_body.status_flags &= ~GODMODE original_body.update_canmove() is_transformed = FALSE diff --git a/code/modules/awaymissions/zvis.dm b/code/modules/awaymissions/zvis.dm index cb6caf83efd..a388715ca35 100644 --- a/code/modules/awaymissions/zvis.dm +++ b/code/modules/awaymissions/zvis.dm @@ -302,7 +302,7 @@ var/ox = thing.x - x var/oy = thing.y - y if(istype(M) && M.client) - M.notransform = 1 + ADD_TRAIT(M, TRAIT_NO_TRANSFORM, UNIQUE_TRAIT_SOURCE(src)) // cover up client-side map loading M.screen_loc = "CENTER" M.client.screen += M @@ -321,7 +321,8 @@ M.screen_loc = initial(M.screen_loc) thing.forceMove(get_turf(other.loc)) if(istype(M) && M.client) - M.notransform = 0 + REMOVE_TRAIT(M, TRAIT_NO_TRANSFORM, UNIQUE_TRAIT_SOURCE(src)) + /obj/effect/view_portal/visual/attack_ghost(mob/user) user.forceMove(get_turf(other.loc)) diff --git a/code/modules/client/client_defines.dm b/code/modules/client/client_defines.dm index 323a6882665..006b5c242aa 100644 --- a/code/modules/client/client_defines.dm +++ b/code/modules/client/client_defines.dm @@ -19,7 +19,6 @@ var/datum/preferences/prefs = null var/move_delay = 1 var/current_move_delay = 0 - var/moving = null var/area = null var/time_joined_as_mouse = null //when the client last spawned as a mouse diff --git a/code/modules/mining/lavaland/loot/colossus_loot.dm b/code/modules/mining/lavaland/loot/colossus_loot.dm index ff700d68a2f..42408bd598b 100644 --- a/code/modules/mining/lavaland/loot/colossus_loot.dm +++ b/code/modules/mining/lavaland/loot/colossus_loot.dm @@ -372,7 +372,7 @@ /obj/structure/closet/stasis/Entered(atom/A) if(isliving(A) && holder_animal) var/mob/living/L = A - L.notransform = 1 + ADD_TRAIT(L, TRAIT_NO_TRANSFORM, UNIQUE_TRAIT_SOURCE(src)) L.mutations |= MUTE L.status_flags |= GODMODE L.mind.transfer_to(holder_animal) @@ -385,7 +385,7 @@ for(var/mob/living/L in src) L.mutations -=MUTE L.status_flags &= ~GODMODE - L.notransform = 0 + REMOVE_TRAIT(L, TRAIT_NO_TRANSFORM, UNIQUE_TRAIT_SOURCE(src)) if(holder_animal && !QDELETED(holder_animal)) holder_animal.mind.transfer_to(L) L.mind.RemoveSpell(/obj/effect/proc_holder/spell/exit_possession) diff --git a/code/modules/mining/lavaland/loot/tendril_loot.dm b/code/modules/mining/lavaland/loot/tendril_loot.dm index 24056a89a3a..f6fcf191dae 100644 --- a/code/modules/mining/lavaland/loot/tendril_loot.dm +++ b/code/modules/mining/lavaland/loot/tendril_loot.dm @@ -444,7 +444,7 @@ effect.desc = "It's shaped an awful lot like [user.name]." effect.setDir(user.dir) user.forceMove(effect) - user.notransform = TRUE + ADD_TRAIT(user, TRAIT_NO_TRANSFORM, UNIQUE_TRAIT_SOURCE(src)) user.status_flags |= GODMODE addtimer(CALLBACK(src, PROC_REF(reappear), user, effect), 10 SECONDS) @@ -460,7 +460,7 @@ return user.status_flags &= ~GODMODE - user.notransform = FALSE + REMOVE_TRAIT(user, TRAIT_NO_TRANSFORM, UNIQUE_TRAIT_SOURCE(src)) user.forceMove(effect_turf) user.visible_message(span_danger("[user] pops back into reality!")) effect.can_destroy = TRUE diff --git a/code/modules/mob/living/carbon/alien/death.dm b/code/modules/mob/living/carbon/alien/death.dm index e5610a983a1..ca3f7402611 100644 --- a/code/modules/mob/living/carbon/alien/death.dm +++ b/code/modules/mob/living/carbon/alien/death.dm @@ -3,7 +3,7 @@ return FALSE death(1) var/atom/movable/overlay/animation = null - notransform = 1 + ADD_TRAIT(src, TRAIT_NO_TRANSFORM, PERMANENT_TRANSFORMATION_TRAIT) canmove = FALSE icon = null invisibility = INVISIBILITY_ABSTRACT @@ -26,7 +26,7 @@ /mob/living/carbon/alien/dust() if(!death(TRUE) && stat != DEAD) return FALSE - notransform = 1 + ADD_TRAIT(src, TRAIT_NO_TRANSFORM, PERMANENT_TRANSFORMATION_TRAIT) canmove = FALSE icon = null invisibility = INVISIBILITY_ABSTRACT diff --git a/code/modules/mob/living/carbon/alien/humanoid/update_icons.dm b/code/modules/mob/living/carbon/alien/humanoid/update_icons.dm index 1cb6ca9686d..6d088348435 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/update_icons.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/update_icons.dm @@ -60,8 +60,7 @@ /mob/living/carbon/alien/humanoid/regenerate_icons() - ..() - if(notransform) + if(HAS_TRAIT(src, TRAIT_NO_TRANSFORM)) return //update_inv_head() diff --git a/code/modules/mob/living/carbon/brain/death.dm b/code/modules/mob/living/carbon/brain/death.dm index dbef53fce91..f5287eaeb2e 100644 --- a/code/modules/mob/living/carbon/brain/death.dm +++ b/code/modules/mob/living/carbon/brain/death.dm @@ -12,7 +12,7 @@ // can we muster a parent call here? if(!death(TRUE) && stat != DEAD) return FALSE - notransform = 1 + ADD_TRAIT(src, TRAIT_NO_TRANSFORM, PERMANENT_TRANSFORMATION_TRAIT) canmove = FALSE icon = null invisibility = INVISIBILITY_ABSTRACT diff --git a/code/modules/mob/living/carbon/human/death.dm b/code/modules/mob/living/carbon/human/death.dm index 6d6ff24e375..df963ca81c3 100644 --- a/code/modules/mob/living/carbon/human/death.dm +++ b/code/modules/mob/living/carbon/human/death.dm @@ -2,7 +2,7 @@ if(!death(TRUE) && stat != DEAD) return FALSE var/atom/movable/overlay/animation = null - notransform = 1 + ADD_TRAIT(src, TRAIT_NO_TRANSFORM, PERMANENT_TRANSFORMATION_TRAIT) canmove = FALSE icon = null invisibility = INVISIBILITY_ABSTRACT @@ -50,7 +50,7 @@ /mob/living/carbon/human/dust() if(!death(TRUE) && stat != DEAD) return FALSE - notransform = 1 + ADD_TRAIT(src, TRAIT_NO_TRANSFORM, PERMANENT_TRANSFORMATION_TRAIT) canmove = FALSE icon = null invisibility = INVISIBILITY_ABSTRACT @@ -75,7 +75,7 @@ if(!death(TRUE) && stat != DEAD) return FALSE var/atom/movable/overlay/animation = null - notransform = 1 + ADD_TRAIT(src, TRAIT_NO_TRANSFORM, PERMANENT_TRANSFORMATION_TRAIT) canmove = FALSE icon = null invisibility = INVISIBILITY_ABSTRACT diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 08823d8de3e..0e002025427 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -1,6 +1,7 @@ /mob/living/carbon/human/Life(seconds, times_fired) set invisibility = 0 - if(notransform) + + if(HAS_TRAIT(src, TRAIT_NO_TRANSFORM)) return . = ..() diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index 22e53d3ff3a..79dd4bf509c 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -517,7 +517,7 @@ GLOBAL_LIST_EMPTY(damage_icon_parts) /* --------------------------------------- */ //For legacy support. /mob/living/carbon/human/regenerate_icons() - if(notransform) + if(HAS_TRAIT(src, TRAIT_NO_TRANSFORM)) return cut_overlays() update_mutantrace(update_hair = FALSE) diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm index 8881324527b..ad47f68f44e 100644 --- a/code/modules/mob/living/carbon/life.dm +++ b/code/modules/mob/living/carbon/life.dm @@ -1,7 +1,7 @@ /mob/living/carbon/Life(seconds, times_fired) set invisibility = 0 - if(notransform) + if(HAS_TRAIT(src, TRAIT_NO_TRANSFORM)) return if(damageoverlaytemp) diff --git a/code/modules/mob/living/death.dm b/code/modules/mob/living/death.dm index 2ca6e7acde9..6321370929d 100644 --- a/code/modules/mob/living/death.dm +++ b/code/modules/mob/living/death.dm @@ -4,7 +4,7 @@ if(!death(TRUE) && stat != DEAD) return FALSE // hide and freeze for the GC - notransform = 1 + ADD_TRAIT(src, TRAIT_NO_TRANSFORM, PERMANENT_TRANSFORMATION_TRAIT) canmove = FALSE icon = null invisibility = INVISIBILITY_ABSTRACT @@ -22,7 +22,7 @@ return FALSE new /obj/effect/decal/cleanable/ash(loc) // hide and freeze them while they get GC'd - notransform = 1 + ADD_TRAIT(src, TRAIT_NO_TRANSFORM, PERMANENT_TRANSFORMATION_TRAIT) canmove = FALSE icon = null invisibility = INVISIBILITY_ABSTRACT @@ -33,7 +33,7 @@ if(!death(TRUE) && stat != DEAD) return FALSE // hide and freeze them while they get GC'd - notransform = 1 + ADD_TRAIT(src, TRAIT_NO_TRANSFORM, PERMANENT_TRANSFORMATION_TRAIT) canmove = FALSE icon = null invisibility = INVISIBILITY_ABSTRACT diff --git a/code/modules/mob/living/life.dm b/code/modules/mob/living/life.dm index 7e1ed4a8dc9..7f941f681c1 100644 --- a/code/modules/mob/living/life.dm +++ b/code/modules/mob/living/life.dm @@ -14,8 +14,9 @@ add_misc_logs(src, "Z-TRACKING: [src] of type [src.type] has a Z-registration despite not having a client.") update_z(null) - if(notransform) + if(HAS_TRAIT(src, TRAIT_NO_TRANSFORM)) return FALSE + if(!loc) return FALSE diff --git a/code/modules/mob/living/silicon/death.dm b/code/modules/mob/living/silicon/death.dm index 6e6094f09fb..125e2dae72d 100644 --- a/code/modules/mob/living/silicon/death.dm +++ b/code/modules/mob/living/silicon/death.dm @@ -1,7 +1,7 @@ /mob/living/silicon/gib() death(1) var/atom/movable/overlay/animation = null - notransform = 1 + ADD_TRAIT(src, TRAIT_NO_TRANSFORM, PERMANENT_TRANSFORMATION_TRAIT) canmove = FALSE icon = null invisibility = INVISIBILITY_ABSTRACT @@ -25,7 +25,7 @@ /mob/living/silicon/dust() if(!death(TRUE) && stat != DEAD) return FALSE - notransform = 1 + ADD_TRAIT(src, TRAIT_NO_TRANSFORM, PERMANENT_TRANSFORMATION_TRAIT) canmove = FALSE icon = null invisibility = INVISIBILITY_ABSTRACT diff --git a/code/modules/mob/living/silicon/robot/death.dm b/code/modules/mob/living/silicon/robot/death.dm index e0c05f62ec9..0e2593701ba 100644 --- a/code/modules/mob/living/silicon/robot/death.dm +++ b/code/modules/mob/living/silicon/robot/death.dm @@ -3,7 +3,7 @@ return FALSE //robots don't die when gibbed. instead they drop their MMI'd brain var/atom/movable/overlay/animation = null - notransform = 1 + ADD_TRAIT(src, TRAIT_NO_TRANSFORM, PERMANENT_TRANSFORMATION_TRAIT) canmove = FALSE icon = null invisibility = INVISIBILITY_ABSTRACT @@ -32,7 +32,7 @@ /mob/living/silicon/robot/dust() if(!death(TRUE) && stat != DEAD) return FALSE - notransform = 1 + ADD_TRAIT(src, TRAIT_NO_TRANSFORM, PERMANENT_TRANSFORMATION_TRAIT) canmove = FALSE icon = null invisibility = INVISIBILITY_ABSTRACT diff --git a/code/modules/mob/living/silicon/robot/life.dm b/code/modules/mob/living/silicon/robot/life.dm index 4d9ad26a7e7..656bfcdb507 100644 --- a/code/modules/mob/living/silicon/robot/life.dm +++ b/code/modules/mob/living/silicon/robot/life.dm @@ -1,6 +1,7 @@ /mob/living/silicon/robot/Life(seconds, times_fired) set invisibility = 0 - if(notransform) + + if(HAS_TRAIT(src, TRAIT_NO_TRANSFORM)) return . = ..() diff --git a/code/modules/mob/living/simple_animal/slime/life.dm b/code/modules/mob/living/simple_animal/slime/life.dm index daf434607a0..a383f7fb27a 100644 --- a/code/modules/mob/living/simple_animal/slime/life.dm +++ b/code/modules/mob/living/simple_animal/slime/life.dm @@ -9,8 +9,10 @@ /mob/living/simple_animal/slime/Life() set invisibility = 0 - if(notransform) + + if(HAS_TRAIT(src, TRAIT_NO_TRANSFORM)) return + if(..()) if(buckled) handle_feeding() diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 5c6f1703188..4e90a3d2324 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -805,13 +805,17 @@ // facing verbs /mob/proc/canface() - if(!canmove) return 0 - if(client.moving) return 0 - if(stat==2) return 0 - if(anchored) return 0 - if(notransform) return 0 - if(restrained()) return 0 - return 1 + if(!canmove) + return FALSE + if(stat == DEAD) + return FALSE + if(anchored) + return FALSE + if(HAS_TRAIT(src, TRAIT_NO_TRANSFORM)) + return FALSE + if(restrained()) + return FALSE + return TRUE /mob/proc/fall(var/forced) drop_l_hand() diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm index ceb324559bb..bb6d1343ed3 100644 --- a/code/modules/mob/mob_defines.dm +++ b/code/modules/mob/mob_defines.dm @@ -59,7 +59,6 @@ var/currently_grab_pulled = null /// only set while the move is ongoing, to prevent shuffling between pullees var/memory = "" var/next_move = null - var/notransform = null //Carbon var/hand = null // 0 - right hand is active, 1 - left hand is active var/real_name = null var/flavor_text = "" diff --git a/code/modules/mob/mob_movement.dm b/code/modules/mob/mob_movement.dm index 2f7a1e3dc57..e8c1ceda6db 100644 --- a/code/modules/mob/mob_movement.dm +++ b/code/modules/mob/mob_movement.dm @@ -33,8 +33,8 @@ if(!n || !direct) // why did we never check this before? return FALSE - if(mob.notransform) - return 0 //This is sota the goto stop mobs from moving var + if(HAS_TRAIT(mob, TRAIT_NO_TRANSFORM)) + return FALSE //This is sota the goto stop mobs from moving var if(mob.control_object) return Move_object(direct) @@ -49,9 +49,6 @@ if(SEND_SIGNAL(mob, COMSIG_MOB_CLIENT_PRE_LIVING_MOVE, n, direct) & COMSIG_MOB_CLIENT_BLOCK_PRE_LIVING_MOVE) return FALSE - if(moving) - return 0 - var/mob/living/L = mob //Already checked for isliving earlier if(L.incorporeal_move)//Move though walls move_delay = world.time + 0.5 // cap to 20fps @@ -234,10 +231,10 @@ if(INCORPOREAL_REVENANT) //Incorporeal move, but blocked by holy-watered tiles var/turf/simulated/floor/stepTurf = get_step(L, direct) if(stepTurf.flags & NOJAUNT) - to_chat(L, "Святые силы блокируют ваш путь.") - L.notransform = 1 + to_chat(L, span_warning("Святые силы блокируют ваш путь.")) + ADD_TRAIT(L, TRAIT_NO_TRANSFORM, INCORPOREAL_TRAIT) spawn(2) - L.notransform = 0 + REMOVE_TRAIT(L, TRAIT_NO_TRANSFORM, INCORPOREAL_TRAIT) else L.forceMove(get_step(L, direct)) L.dir = direct diff --git a/code/modules/mob/transform_procs.dm b/code/modules/mob/transform_procs.dm index ecd258aeaa0..5843cb94f52 100644 --- a/code/modules/mob/transform_procs.dm +++ b/code/modules/mob/transform_procs.dm @@ -19,11 +19,11 @@ return ..() /mob/living/carbon/AIize() - if(notransform) + if(HAS_TRAIT(src, TRAIT_NO_TRANSFORM)) return for(var/obj/item/check as anything in get_equipped_items(include_pockets = TRUE, include_hands = TRUE)) drop_item_ground(check, force = TRUE) - notransform = TRUE + ADD_TRAIT(src, TRAIT_NO_TRANSFORM, PERMANENT_TRANSFORMATION_TRAIT) canmove = FALSE icon = null invisibility = INVISIBILITY_ABSTRACT @@ -65,12 +65,12 @@ * AI: A reference to the AI we want to connect to. */ /mob/living/carbon/human/proc/Robotize(cell_type = null, connect_to_default_AI = TRUE, mob/living/silicon/ai/AI = null) - if(notransform) + if(HAS_TRAIT(src, TRAIT_NO_TRANSFORM)) return for(var/obj/item/check as anything in get_equipped_items(include_pockets = TRUE, include_hands = TRUE)) drop_item_ground(check, force = TRUE) - notransform = TRUE + ADD_TRAIT(src, TRAIT_NO_TRANSFORM, PERMANENT_TRANSFORMATION_TRAIT) canmove = FALSE icon = null invisibility = INVISIBILITY_ABSTRACT @@ -130,11 +130,11 @@ return O /mob/living/carbon/human/proc/corgize() - if(notransform) + if(HAS_TRAIT(src, TRAIT_NO_TRANSFORM)) return for(var/obj/item/check as anything in get_equipped_items(include_pockets = TRUE, include_hands = TRUE)) drop_item_ground(check, force = TRUE) - notransform = TRUE + ADD_TRAIT(src, TRAIT_NO_TRANSFORM, PERMANENT_TRANSFORMATION_TRAIT) canmove = FALSE icon = null invisibility = INVISIBILITY_ABSTRACT @@ -153,12 +153,12 @@ var/list/mobtypes = typesof(/mob/living/simple_animal) var/mobpath = input("Which type of mob should [src] turn into?", "Choose a type") in mobtypes - if(notransform) + if(HAS_TRAIT(src, TRAIT_NO_TRANSFORM)) return for(var/obj/item/check as anything in get_equipped_items(include_pockets = TRUE, include_hands = TRUE)) drop_item_ground(check, force = TRUE) - notransform = TRUE + ADD_TRAIT(src, TRAIT_NO_TRANSFORM, PERMANENT_TRANSFORMATION_TRAIT) canmove = FALSE icon = null invisibility = INVISIBILITY_ABSTRACT @@ -191,11 +191,11 @@ qdel(src) /mob/living/carbon/human/proc/paize(name, bespai) - if(notransform) + if(HAS_TRAIT(src, TRAIT_NO_TRANSFORM)) return for(var/obj/item/check as anything in get_equipped_items(include_pockets = TRUE, include_hands = TRUE)) drop_item_ground(check, force = TRUE) - notransform = TRUE + ADD_TRAIT(src, TRAIT_NO_TRANSFORM, PERMANENT_TRANSFORMATION_TRAIT) canmove = FALSE icon = null invisibility = INVISIBILITY_ABSTRACT @@ -219,7 +219,7 @@ INVOKE_ASYNC(GLOBAL_PROC, /proc/qdel, src) /mob/proc/gorillize(gorilla_type = "Normal", message = TRUE) - if(notransform) + if(HAS_TRAIT(src, TRAIT_NO_TRANSFORM)) return if(stat == DEAD) @@ -228,7 +228,7 @@ for(var/obj/item/check as anything in get_equipped_items(include_pockets = TRUE, include_hands = TRUE)) drop_item_ground(check, force = TRUE) - notransform = TRUE + ADD_TRAIT(src, TRAIT_NO_TRANSFORM, PERMANENT_TRANSFORMATION_TRAIT) icon = null invisibility = INVISIBILITY_MAXIMUM diff --git a/code/modules/projectiles/guns/projectile/launchers.dm b/code/modules/projectiles/guns/projectile/launchers.dm index ca7257430c0..daf249c26da 100644 --- a/code/modules/projectiles/guns/projectile/launchers.dm +++ b/code/modules/projectiles/guns/projectile/launchers.dm @@ -150,13 +150,13 @@ /obj/item/gun/projectile/revolver/rocketlauncher/suicide_act(mob/user) user.visible_message("[user] aims [src] at the ground! It looks like [user.p_theyre()] performing a sick rocket jump!") if(can_shoot(user)) - user.notransform = TRUE + ADD_TRAIT(user, TRAIT_NO_TRANSFORM, UNIQUE_TRAIT_SOURCE(src)) playsound(src, 'sound/weapons/rocketlaunch.ogg', 80, 1, 5) animate(user, pixel_z = 300, time = 3 SECONDS, easing = LINEAR_EASING) sleep(7 SECONDS) animate(user, pixel_z = 0, time = 0.5 SECONDS, easing = LINEAR_EASING) sleep(0.5 SECONDS) - user.notransform = FALSE + REMOVE_TRAIT(user, TRAIT_NO_TRANSFORM, UNIQUE_TRAIT_SOURCE(src)) process_fire(user, user, TRUE) if(!QDELETED(user)) //if they weren't gibbed by the explosion, take care of them for good. user.gib() diff --git a/code/modules/projectiles/projectile/magic.dm b/code/modules/projectiles/projectile/magic.dm index 2556e7b658d..2109a925cfc 100644 --- a/code/modules/projectiles/projectile/magic.dm +++ b/code/modules/projectiles/projectile/magic.dm @@ -157,8 +157,8 @@ wabbajack(change) /proc/wabbajack(mob/living/M) - if(istype(M) && M.stat != DEAD && !M.notransform) - M.notransform = TRUE + if(istype(M) && M.stat != DEAD && !HAS_TRAIT(M, TRAIT_NO_TRANSFORM)) + ADD_TRAIT(M, TRAIT_NO_TRANSFORM, PERMANENT_TRANSFORMATION_TRAIT) M.canmove = FALSE M.icon = null M.cut_overlays() diff --git a/code/modules/research/xenobiology/xenobiology.dm b/code/modules/research/xenobiology/xenobiology.dm index 432d545effe..2973a98766a 100644 --- a/code/modules/research/xenobiology/xenobiology.dm +++ b/code/modules/research/xenobiology/xenobiology.dm @@ -784,7 +784,7 @@ var/mob/living/M = A if(M in immune) continue - M.notransform = 1 + ADD_TRAIT(M, TRAIT_NO_TRANSFORM, UNIQUE_TRAIT_SOURCE(src)) M.set_anchored(TRUE) if(istype(M, /mob/living/simple_animal/hostile)) var/mob/living/simple_animal/hostile/H = M @@ -812,7 +812,7 @@ return /obj/effect/timestop/proc/unfreeze_mob(mob/living/M) - M.notransform = 0 + REMOVE_TRAIT(M, TRAIT_NO_TRANSFORM, UNIQUE_TRAIT_SOURCE(src)) M.set_anchored(FALSE) if(istype(M, /mob/living/simple_animal/hostile)) var/mob/living/simple_animal/hostile/H = M diff --git a/code/modules/ruins/lavalandruin_code/puzzle.dm b/code/modules/ruins/lavalandruin_code/puzzle.dm index 39434f98075..8af8b9e17c8 100644 --- a/code/modules/ruins/lavalandruin_code/puzzle.dm +++ b/code/modules/ruins/lavalandruin_code/puzzle.dm @@ -287,7 +287,7 @@ /obj/effect/sliding_puzzle/prison/dispense_reward() prisoner.forceMove(get_turf(src)) - prisoner.notransform = FALSE + REMOVE_TRAIT(prisoner, TRAIT_NO_TRANSFORM, UNIQUE_TRAIT_SOURCE(src)) prisoner = null //Some armor so it's harder to kill someone by mistake. @@ -327,7 +327,7 @@ return FALSE //First grab the prisoner and move them temporarily into the generator so they won't get thrown around. - prisoner.notransform = TRUE + ADD_TRAIT(prisoner, TRAIT_NO_TRANSFORM, UNIQUE_TRAIT_SOURCE(cube)) prisoner.forceMove(cube) to_chat(prisoner,"You're trapped by the prison cube! You will remain trapped until someone solves it.")