diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm index 2c6de96739a..ee69cf03333 100644 --- a/code/__DEFINES/traits.dm +++ b/code/__DEFINES/traits.dm @@ -88,8 +88,8 @@ #define TRAUMA_TRAIT "trauma" #define SPECIES_TRAIT "species" #define ORGAN_TRAIT "organ" -#define OUTFIT_TRAIT "outfit" #define ROUNDSTART_TRAIT "roundstart" //cannot be removed without admin intervention +#define JOB_TRAIT "job" // unique trait sources, still defines #define STATUE_MUTE "statue" @@ -102,5 +102,6 @@ #define GENETICS_SPELL "genetics_spell" #define EYES_COVERED "eyes_covered" #define CULT_EYES "cult_eyes" -#define OBSERVER_TRAIT "observer-trait" #define SCRYING_ORB "scrying-orb" +#define NUKEOP_TRAIT "nuke-op" +#define DEATHSQUAD_TRAIT "deathsquad" diff --git a/code/datums/outfit.dm b/code/datums/outfit.dm index 698996ddede..1f5c28d3c2a 100755 --- a/code/datums/outfit.dm +++ b/code/datums/outfit.dm @@ -22,7 +22,6 @@ var/internals_slot = null //ID of slot containing a gas tank var/list/backpack_contents = null // In the list(path=count,otherpath=count) format var/list/implants = null - var/list/mind_traits = null var/accessory = null var/can_be_admin_equipped = TRUE // Set to FALSE if your outfit requires runtime parameters @@ -107,9 +106,6 @@ for(var/implant_type in implants) var/obj/item/implant/I = new implant_type(H) I.implant(H, null, TRUE) - if(mind_traits && H.mind) - for(var/mt in mind_traits) - H.mind.add_trait(mt, OUTFIT_TRAIT) H.update_body() return TRUE diff --git a/code/datums/traits.dm b/code/datums/traits.dm index c105865b11e..15715c3c888 100644 --- a/code/datums/traits.dm +++ b/code/datums/traits.dm @@ -1,16 +1,16 @@ /datum/proc/add_trait(trait, source) LAZYINITLIST(status_traits) - + if(!status_traits[trait]) status_traits[trait] = list(source) else status_traits[trait] |= list(source) - + /datum/proc/remove_trait(trait, list/sources, force) if(!status_traits) return //nothing to remove - + if(!status_traits[trait]) return @@ -33,11 +33,11 @@ if(!LAZYLEN(status_traits[trait])) status_traits -= trait - + /datum/proc/has_trait(trait, list/sources) if(!status_traits) return FALSE //well of course it doesn't have the trait - + if(!status_traits[trait]) return FALSE @@ -51,11 +51,11 @@ return TRUE else if(LAZYLEN(status_traits[trait])) return TRUE - + /datum/proc/remove_all_traits(remove_species_traits = FALSE, remove_organ_traits = FALSE, remove_quirks = FALSE) if(!status_traits) return //nothing to remove - + var/list/blacklisted_sources = list() if(!remove_species_traits) blacklisted_sources += SPECIES_TRAIT @@ -72,4 +72,4 @@ break if(!skip) remove_trait(kebab, null, TRUE) - CHECK_TICK \ No newline at end of file + CHECK_TICK diff --git a/code/modules/antagonists/ert/ert.dm b/code/modules/antagonists/ert/ert.dm index 76dc6983471..5f069b99066 100644 --- a/code/modules/antagonists/ert/ert.dm +++ b/code/modules/antagonists/ert/ert.dm @@ -34,6 +34,12 @@ . = ..() name_source = GLOB.commando_names +/datum/antagonist/ert/deathsquad/apply_innate_effects(mob/living/mob_override) + owner.add_trait(TRAIT_DISK_VERIFIER, DEATHSQUAD_TRAIT) + +/datum/antagonist/ert/deathsquad/remove_innate_effects(mob/living/mob_override) + owner.remove_trait(TRAIT_DISK_VERIFIER, DEATHSQUAD_TRAIT) + /datum/antagonist/ert/security // kinda handled by the base template but here for completion /datum/antagonist/ert/security/red diff --git a/code/modules/antagonists/nukeop/equipment/nuclearbomb.dm b/code/modules/antagonists/nukeop/equipment/nuclearbomb.dm index cc35b8f5d84..fe136774b4a 100644 --- a/code/modules/antagonists/nukeop/equipment/nuclearbomb.dm +++ b/code/modules/antagonists/nukeop/equipment/nuclearbomb.dm @@ -600,7 +600,7 @@ This is here to make the tiles around the station mininuke change when it's arme if(!fake) return - if(user.has_trait(TRAIT_DISK_VERIFIER) || (user.mind && user.mind.has_trait(TRAIT_DISK_VERIFIER))) + if(isobserver(user) || user.has_trait(TRAIT_DISK_VERIFIER) || (user.mind && user.mind.has_trait(TRAIT_DISK_VERIFIER))) to_chat(user, "The serial numbers on [src] are incorrect.") /obj/item/disk/nuclear/attackby(obj/item/I, mob/living/user, params) diff --git a/code/modules/antagonists/nukeop/nukeop.dm b/code/modules/antagonists/nukeop/nukeop.dm index 5ed70c6ef7d..b391a1c7a10 100644 --- a/code/modules/antagonists/nukeop/nukeop.dm +++ b/code/modules/antagonists/nukeop/nukeop.dm @@ -23,10 +23,12 @@ /datum/antagonist/nukeop/apply_innate_effects(mob/living/mob_override) var/mob/living/M = mob_override || owner.current update_synd_icons_added(M) + owner.add_trait(TRAIT_DISK_VERIFIER, NUKEOP_TRAIT) /datum/antagonist/nukeop/remove_innate_effects(mob/living/mob_override) var/mob/living/M = mob_override || owner.current update_synd_icons_removed(M) + owner.remove_trait(TRAIT_DISK_VERIFIER, NUKEOP_TRAIT) /datum/antagonist/nukeop/proc/equip_op() if(!ishuman(owner.current)) @@ -42,7 +44,6 @@ owner.current.playsound_local(get_turf(owner.current), 'sound/ambience/antag/ops.ogg',100,0) to_chat(owner, "You are a [nuke_team ? nuke_team.syndicate_name : "syndicate"] agent!") owner.announce_objectives() - return /datum/antagonist/nukeop/on_gain() give_alias() @@ -50,7 +51,6 @@ . = ..() equip_op() memorize_code() - owner.add_trait(TRAIT_DISK_VERIFIER, "nuke-op") if(send_to_spawnpoint) move_to_spawnpoint() diff --git a/code/modules/jobs/job_types/captain.dm b/code/modules/jobs/job_types/captain.dm index 621681293e8..091f3e70f28 100755 --- a/code/modules/jobs/job_types/captain.dm +++ b/code/modules/jobs/job_types/captain.dm @@ -26,6 +26,9 @@ Captain /datum/job/captain/get_access() return get_all_accesses() +/datum/job/captain/after_spawn(mob/living/H, mob/M, latejoin = FALSE) + H.mind.add_trait(TRAIT_DISK_VERIFIER, JOB_TRAIT) + /datum/job/captain/announce(mob/living/carbon/human/H) ..() SSticker.OnRoundstart(CALLBACK(GLOBAL_PROC, .proc/minor_announce, "Captain [H.real_name] on deck!")) @@ -50,7 +53,6 @@ Captain duffelbag = /obj/item/storage/backpack/duffelbag/captain implants = list(/obj/item/implant/mindshield) - mind_traits = list(TRAIT_DISK_VERIFIER) accessory = /obj/item/clothing/accessory/medal/gold/captain chameleon_extras = list(/obj/item/gun/energy/e_gun, /obj/item/stamp/captain) diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index 66dd3712fec..fe109ee0e71 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -133,7 +133,6 @@ GLOBAL_VAR_INIT(observer_default_invisibility, INVISIBILITY_OBSERVER) . = ..() grant_all_languages() - grant_observer_traits() /mob/dead/observer/get_photo_description(obj/item/camera/camera) if(!invisibility || camera.see_ghosts) @@ -842,6 +841,3 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp spawners_menu = new(src) spawners_menu.ui_interact(src) - -/mob/dead/observer/proc/grant_observer_traits() - add_trait(TRAIT_DISK_VERIFIER, OBSERVER_TRAIT)