From 8735bbe5877a866b7594636b5958977c3348c57b Mon Sep 17 00:00:00 2001 From: Doubleumc Date: Mon, 6 May 2024 02:56:57 -0400 Subject: [PATCH 1/5] initial --- code/modules/vehicles/interior/interactable/seats.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/vehicles/interior/interactable/seats.dm b/code/modules/vehicles/interior/interactable/seats.dm index 8abbf9f1190d..f463afb4e3f6 100644 --- a/code/modules/vehicles/interior/interactable/seats.dm +++ b/code/modules/vehicles/interior/interactable/seats.dm @@ -108,7 +108,7 @@ to_chat(user, SPAN_WARNING("You are unable to use heavy weaponry.")) return - if(!HAS_TRAIT(user, TRAIT_OPPOSABLE_THUMBS)) + if(!user.IsAdvancedToolUser()) return for(var/obj/item/I in user.contents) //prevents shooting while zoomed in, but zoom can still be activated and used without shooting if(I.zoom) From 96352e9672e8494d736f4a95569e877e2f7d6d1d Mon Sep 17 00:00:00 2001 From: Doubleumc Date: Mon, 6 May 2024 04:37:37 -0400 Subject: [PATCH 2/5] humanoids granted thumbs reverts seat logic change, grants all humanoids the thumbs trait, fixes a stack-trace from double-buckling --- code/game/objects/objs.dm | 1 + .../modules/mob/living/carbon/human/species/human.dm | 1 + .../mob/living/carbon/human/species/monkey.dm | 1 + .../mob/living/carbon/human/species/synthetic.dm | 12 ++++++------ .../carbon/human/species/working_joe/_species.dm | 2 +- .../living/carbon/human/species/yautja/_species.dm | 1 + .../mob/living/carbon/human/species/zombie.dm | 2 +- code/modules/vehicles/interior/interactable/seats.dm | 2 +- 8 files changed, 13 insertions(+), 9 deletions(-) diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm index 70dc5ff1786d..d22faa905831 100644 --- a/code/game/objects/objs.dm +++ b/code/game/objects/objs.dm @@ -306,6 +306,7 @@ if (M.mob_size <= MOB_SIZE_XENO) if ((M.stat == DEAD && istype(src, /obj/structure/bed/roller) || HAS_TRAIT(M, TRAIT_OPPOSABLE_THUMBS))) do_buckle(M, user) + return if ((M.mob_size > MOB_SIZE_HUMAN)) to_chat(user, SPAN_WARNING("[M] is too big to buckle in.")) return diff --git a/code/modules/mob/living/carbon/human/species/human.dm b/code/modules/mob/living/carbon/human/species/human.dm index 684bfa672b19..def39ac23bf9 100644 --- a/code/modules/mob/living/carbon/human/species/human.dm +++ b/code/modules/mob/living/carbon/human/species/human.dm @@ -87,6 +87,7 @@ primitive = /mob/living/carbon/human/monkey unarmed_type = /datum/unarmed_attack/punch flags = HAS_SKIN_TONE|HAS_LIPS|HAS_UNDERWEAR|HAS_HARDCRIT + mob_inherent_traits = list(TRAIT_OPPOSABLE_THUMBS) mob_flags = KNOWS_TECHNOLOGY uses_ethnicity = TRUE diff --git a/code/modules/mob/living/carbon/human/species/monkey.dm b/code/modules/mob/living/carbon/human/species/monkey.dm index 8e8d2443293d..0a6df2299e8d 100644 --- a/code/modules/mob/living/carbon/human/species/monkey.dm +++ b/code/modules/mob/living/carbon/human/species/monkey.dm @@ -11,6 +11,7 @@ pain_type = /datum/pain/monkey unarmed_type = /datum/unarmed_attack/bite secondary_unarmed_type = /datum/unarmed_attack + mob_inherent_traits = list(TRAIT_OPPOSABLE_THUMBS) death_message = "lets out a faint chimper as it collapses and stops moving..." knock_down_reduction = 0.5 stun_reduction = 0.5 diff --git a/code/modules/mob/living/carbon/human/species/synthetic.dm b/code/modules/mob/living/carbon/human/species/synthetic.dm index 38b7e935268d..2df48719e991 100644 --- a/code/modules/mob/living/carbon/human/species/synthetic.dm +++ b/code/modules/mob/living/carbon/human/species/synthetic.dm @@ -7,7 +7,7 @@ unarmed_type = /datum/unarmed_attack/punch/synthetic pain_type = /datum/pain/synthetic stamina_type = /datum/stamina/none - mob_inherent_traits = list(TRAIT_SUPER_STRONG) + mob_inherent_traits = list(TRAIT_OPPOSABLE_THUMBS, TRAIT_SUPER_STRONG) rarity_value = 2 insulated = TRUE @@ -62,7 +62,7 @@ /datum/species/synthetic/gen_one name = SYNTH_GEN_ONE uses_ethnicity = FALSE - mob_inherent_traits = list(TRAIT_SUPER_STRONG, TRAIT_INTENT_EYES) + mob_inherent_traits = list(TRAIT_OPPOSABLE_THUMBS, TRAIT_SUPER_STRONG, TRAIT_INTENT_EYES) hair_color = "#000000" icobase = 'icons/mob/humans/species/r_synthetic.dmi' @@ -77,7 +77,7 @@ name_plural = "Colonial Synthetics" uses_ethnicity = TRUE burn_mod = 0.8 - mob_inherent_traits = list(TRAIT_SUPER_STRONG) + mob_inherent_traits = list(TRAIT_OPPOSABLE_THUMBS, TRAIT_SUPER_STRONG) pain_type = /datum/pain/synthetic/colonial rarity_value = 1.5 @@ -97,7 +97,7 @@ /datum/species/synthetic/colonial/colonial_gen_one name = SYNTH_COLONY_GEN_ONE uses_ethnicity = FALSE - mob_inherent_traits = list(TRAIT_SUPER_STRONG, TRAIT_INTENT_EYES) + mob_inherent_traits = list(TRAIT_OPPOSABLE_THUMBS, TRAIT_SUPER_STRONG, TRAIT_INTENT_EYES) //sets colonial_gen_one synth's hair to black hair_color = "#000000" //sets colonial_gen_one synth's icon to WJ sprite @@ -109,7 +109,7 @@ name = SYNTH_COMBAT name_plural = "Combat Synthetics" uses_ethnicity = FALSE - mob_inherent_traits = list(TRAIT_SUPER_STRONG, TRAIT_INTENT_EYES) + mob_inherent_traits = list(TRAIT_OPPOSABLE_THUMBS, TRAIT_SUPER_STRONG, TRAIT_INTENT_EYES) burn_mod = 0.6 //made for combat total_health = 250 //made for combat @@ -130,7 +130,7 @@ name = SYNTH_INFILTRATOR name_plural = "Infiltrator Synthetics" uses_ethnicity = TRUE - mob_inherent_traits = list(TRAIT_SUPER_STRONG, TRAIT_INFILTRATOR_SYNTH) + mob_inherent_traits = list(TRAIT_OPPOSABLE_THUMBS, TRAIT_SUPER_STRONG, TRAIT_INFILTRATOR_SYNTH) bloodsplatter_type = /obj/effect/temp_visual/dir_setting/bloodsplatter/human diff --git a/code/modules/mob/living/carbon/human/species/working_joe/_species.dm b/code/modules/mob/living/carbon/human/species/working_joe/_species.dm index 829f1d89e939..6744e9dcac35 100644 --- a/code/modules/mob/living/carbon/human/species/working_joe/_species.dm +++ b/code/modules/mob/living/carbon/human/species/working_joe/_species.dm @@ -4,7 +4,7 @@ death_message = "violently gargles fluid and seizes up, the glow in their eyes dimming..." uses_ethnicity = FALSE burn_mod = 0.65 // made for hazardous environments, withstanding temperatures up to 1210 degrees - mob_inherent_traits = list(TRAIT_SUPER_STRONG, TRAIT_INTENT_EYES, TRAIT_EMOTE_CD_EXEMPT, TRAIT_CANNOT_EAT, TRAIT_UNSTRIPPABLE) + mob_inherent_traits = list(TRAIT_OPPOSABLE_THUMBS, TRAIT_SUPER_STRONG, TRAIT_INTENT_EYES, TRAIT_EMOTE_CD_EXEMPT, TRAIT_CANNOT_EAT, TRAIT_UNSTRIPPABLE) slowdown = 0.45 hair_color = "#000000" diff --git a/code/modules/mob/living/carbon/human/species/yautja/_species.dm b/code/modules/mob/living/carbon/human/species/yautja/_species.dm index f871bfe02407..46039c323033 100644 --- a/code/modules/mob/living/carbon/human/species/yautja/_species.dm +++ b/code/modules/mob/living/carbon/human/species/yautja/_species.dm @@ -9,6 +9,7 @@ uses_ethnicity = TRUE flags = IS_WHITELISTED|HAS_SKIN_COLOR|NO_CLONE_LOSS|NO_POISON|NO_NEURO|SPECIAL_BONEBREAK|NO_SHRAPNEL|HAS_HARDCRIT mob_inherent_traits = list( + TRAIT_OPPOSABLE_THUMBS, TRAIT_YAUTJA_TECH, TRAIT_SUPER_STRONG, TRAIT_FOREIGN_BIO, diff --git a/code/modules/mob/living/carbon/human/species/zombie.dm b/code/modules/mob/living/carbon/human/species/zombie.dm index 4e8a0b5e98e2..4c5517962173 100644 --- a/code/modules/mob/living/carbon/human/species/zombie.dm +++ b/code/modules/mob/living/carbon/human/species/zombie.dm @@ -15,7 +15,7 @@ stamina_type = /datum/stamina/none death_message = "seizes up and falls limp..." flags = NO_BREATHE|NO_CLONE_LOSS|NO_POISON|NO_NEURO|NO_SHRAPNEL - mob_inherent_traits = list(TRAIT_FOREIGN_BIO) + mob_inherent_traits = list(TRAIT_OPPOSABLE_THUMBS, TRAIT_FOREIGN_BIO) brute_mod = 0.6 //Minor bullet resistance burn_mod = 0.8 //Lowered burn damage since it would 1-shot zombies from 2 to 0.8. speech_chance = 5 diff --git a/code/modules/vehicles/interior/interactable/seats.dm b/code/modules/vehicles/interior/interactable/seats.dm index f463afb4e3f6..8abbf9f1190d 100644 --- a/code/modules/vehicles/interior/interactable/seats.dm +++ b/code/modules/vehicles/interior/interactable/seats.dm @@ -108,7 +108,7 @@ to_chat(user, SPAN_WARNING("You are unable to use heavy weaponry.")) return - if(!user.IsAdvancedToolUser()) + if(!HAS_TRAIT(user, TRAIT_OPPOSABLE_THUMBS)) return for(var/obj/item/I in user.contents) //prevents shooting while zoomed in, but zoom can still be activated and used without shooting if(I.zoom) From eaff95aa9ebec3c85805989d8cbe258a4d4f7047 Mon Sep 17 00:00:00 2001 From: Doubleumc Date: Mon, 6 May 2024 17:20:34 -0400 Subject: [PATCH 3/5] broadened thumbs check before only humans got checked for thumbs, now all users do --- code/__DEFINES/traits.dm | 5 +++-- code/modules/vehicles/interior/interactable/seats.dm | 5 +++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm index 881c41182ab4..cfeaa71f2943 100644 --- a/code/__DEFINES/traits.dm +++ b/code/__DEFINES/traits.dm @@ -175,12 +175,12 @@ #define TRAIT_INFILTRATOR_SYNTH "t_infiltrator_synth" /// Makes it impossible to strip the inventory of this mob. #define TRAIT_UNSTRIPPABLE "t_unstrippable" +/// If the species can use objects. +#define TRAIT_OPPOSABLE_THUMBS "t_thumbs" // HIVE TRAITS /// If the Hive is a Xenonid Hive #define TRAIT_XENONID "t_xenonid" -/// If the hive or xeno can use objects. -#define TRAIT_OPPOSABLE_THUMBS "t_thumbs" /// If the Hive delays round end (this is overridden for some hives). Does not occur naturally. Must be applied in events. #define TRAIT_NO_HIVE_DELAY "t_no_hive_delay" /// If the Hive uses it's colors on the mobs. Does not occur naturally, excepting the Mutated hive. @@ -348,6 +348,7 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_CANNOT_EAT" = TRAIT_CANNOT_EAT, "TRAIT_VULTURE_USER" = TRAIT_VULTURE_USER, "TRAIT_CLOAKED" = TRAIT_CLOAKED, + "TRAIT_OPPOSABLE_THUMBS" = TRAIT_OPPOSABLE_THUMBS, ), // /mob/living/carbon/human = list( // ), diff --git a/code/modules/vehicles/interior/interactable/seats.dm b/code/modules/vehicles/interior/interactable/seats.dm index 8abbf9f1190d..7d87897ec62b 100644 --- a/code/modules/vehicles/interior/interactable/seats.dm +++ b/code/modules/vehicles/interior/interactable/seats.dm @@ -108,8 +108,9 @@ to_chat(user, SPAN_WARNING("You are unable to use heavy weaponry.")) return - if(!HAS_TRAIT(user, TRAIT_OPPOSABLE_THUMBS)) - return + if(!HAS_TRAIT(user, TRAIT_OPPOSABLE_THUMBS)) + return + for(var/obj/item/I in user.contents) //prevents shooting while zoomed in, but zoom can still be activated and used without shooting if(I.zoom) I.zoom(user) From 774034e6c6918153509538acc6b9cd1fd9212b4a Mon Sep 17 00:00:00 2001 From: Doubleumc Date: Wed, 15 May 2024 01:21:30 -0400 Subject: [PATCH 4/5] revert, simplify seats check unnecessary as un-thumbed xenos are stopped earlier --- code/__DEFINES/traits.dm | 4 ++-- .../modules/mob/living/carbon/human/species/human.dm | 1 - .../mob/living/carbon/human/species/monkey.dm | 1 - .../mob/living/carbon/human/species/synthetic.dm | 12 ++++++------ .../carbon/human/species/working_joe/_species.dm | 2 +- .../living/carbon/human/species/yautja/_species.dm | 1 - .../mob/living/carbon/human/species/zombie.dm | 2 +- code/modules/vehicles/interior/interactable/seats.dm | 3 --- 8 files changed, 10 insertions(+), 16 deletions(-) diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm index cfeaa71f2943..6de764488c83 100644 --- a/code/__DEFINES/traits.dm +++ b/code/__DEFINES/traits.dm @@ -175,12 +175,12 @@ #define TRAIT_INFILTRATOR_SYNTH "t_infiltrator_synth" /// Makes it impossible to strip the inventory of this mob. #define TRAIT_UNSTRIPPABLE "t_unstrippable" -/// If the species can use objects. -#define TRAIT_OPPOSABLE_THUMBS "t_thumbs" // HIVE TRAITS /// If the Hive is a Xenonid Hive #define TRAIT_XENONID "t_xenonid" +/// If the hive or xeno can use objects. +#define TRAIT_OPPOSABLE_THUMBS "t_thumbs" /// If the Hive delays round end (this is overridden for some hives). Does not occur naturally. Must be applied in events. #define TRAIT_NO_HIVE_DELAY "t_no_hive_delay" /// If the Hive uses it's colors on the mobs. Does not occur naturally, excepting the Mutated hive. diff --git a/code/modules/mob/living/carbon/human/species/human.dm b/code/modules/mob/living/carbon/human/species/human.dm index 1ef93625292f..d02a2c3be5bb 100644 --- a/code/modules/mob/living/carbon/human/species/human.dm +++ b/code/modules/mob/living/carbon/human/species/human.dm @@ -87,7 +87,6 @@ primitive = /mob/living/carbon/human/monkey unarmed_type = /datum/unarmed_attack/punch flags = HAS_SKIN_TONE|HAS_LIPS|HAS_UNDERWEAR|HAS_HARDCRIT - mob_inherent_traits = list(TRAIT_OPPOSABLE_THUMBS) mob_flags = KNOWS_TECHNOLOGY uses_ethnicity = TRUE diff --git a/code/modules/mob/living/carbon/human/species/monkey.dm b/code/modules/mob/living/carbon/human/species/monkey.dm index 0a6df2299e8d..8e8d2443293d 100644 --- a/code/modules/mob/living/carbon/human/species/monkey.dm +++ b/code/modules/mob/living/carbon/human/species/monkey.dm @@ -11,7 +11,6 @@ pain_type = /datum/pain/monkey unarmed_type = /datum/unarmed_attack/bite secondary_unarmed_type = /datum/unarmed_attack - mob_inherent_traits = list(TRAIT_OPPOSABLE_THUMBS) death_message = "lets out a faint chimper as it collapses and stops moving..." knock_down_reduction = 0.5 stun_reduction = 0.5 diff --git a/code/modules/mob/living/carbon/human/species/synthetic.dm b/code/modules/mob/living/carbon/human/species/synthetic.dm index 2df48719e991..38b7e935268d 100644 --- a/code/modules/mob/living/carbon/human/species/synthetic.dm +++ b/code/modules/mob/living/carbon/human/species/synthetic.dm @@ -7,7 +7,7 @@ unarmed_type = /datum/unarmed_attack/punch/synthetic pain_type = /datum/pain/synthetic stamina_type = /datum/stamina/none - mob_inherent_traits = list(TRAIT_OPPOSABLE_THUMBS, TRAIT_SUPER_STRONG) + mob_inherent_traits = list(TRAIT_SUPER_STRONG) rarity_value = 2 insulated = TRUE @@ -62,7 +62,7 @@ /datum/species/synthetic/gen_one name = SYNTH_GEN_ONE uses_ethnicity = FALSE - mob_inherent_traits = list(TRAIT_OPPOSABLE_THUMBS, TRAIT_SUPER_STRONG, TRAIT_INTENT_EYES) + mob_inherent_traits = list(TRAIT_SUPER_STRONG, TRAIT_INTENT_EYES) hair_color = "#000000" icobase = 'icons/mob/humans/species/r_synthetic.dmi' @@ -77,7 +77,7 @@ name_plural = "Colonial Synthetics" uses_ethnicity = TRUE burn_mod = 0.8 - mob_inherent_traits = list(TRAIT_OPPOSABLE_THUMBS, TRAIT_SUPER_STRONG) + mob_inherent_traits = list(TRAIT_SUPER_STRONG) pain_type = /datum/pain/synthetic/colonial rarity_value = 1.5 @@ -97,7 +97,7 @@ /datum/species/synthetic/colonial/colonial_gen_one name = SYNTH_COLONY_GEN_ONE uses_ethnicity = FALSE - mob_inherent_traits = list(TRAIT_OPPOSABLE_THUMBS, TRAIT_SUPER_STRONG, TRAIT_INTENT_EYES) + mob_inherent_traits = list(TRAIT_SUPER_STRONG, TRAIT_INTENT_EYES) //sets colonial_gen_one synth's hair to black hair_color = "#000000" //sets colonial_gen_one synth's icon to WJ sprite @@ -109,7 +109,7 @@ name = SYNTH_COMBAT name_plural = "Combat Synthetics" uses_ethnicity = FALSE - mob_inherent_traits = list(TRAIT_OPPOSABLE_THUMBS, TRAIT_SUPER_STRONG, TRAIT_INTENT_EYES) + mob_inherent_traits = list(TRAIT_SUPER_STRONG, TRAIT_INTENT_EYES) burn_mod = 0.6 //made for combat total_health = 250 //made for combat @@ -130,7 +130,7 @@ name = SYNTH_INFILTRATOR name_plural = "Infiltrator Synthetics" uses_ethnicity = TRUE - mob_inherent_traits = list(TRAIT_OPPOSABLE_THUMBS, TRAIT_SUPER_STRONG, TRAIT_INFILTRATOR_SYNTH) + mob_inherent_traits = list(TRAIT_SUPER_STRONG, TRAIT_INFILTRATOR_SYNTH) bloodsplatter_type = /obj/effect/temp_visual/dir_setting/bloodsplatter/human diff --git a/code/modules/mob/living/carbon/human/species/working_joe/_species.dm b/code/modules/mob/living/carbon/human/species/working_joe/_species.dm index 6744e9dcac35..829f1d89e939 100644 --- a/code/modules/mob/living/carbon/human/species/working_joe/_species.dm +++ b/code/modules/mob/living/carbon/human/species/working_joe/_species.dm @@ -4,7 +4,7 @@ death_message = "violently gargles fluid and seizes up, the glow in their eyes dimming..." uses_ethnicity = FALSE burn_mod = 0.65 // made for hazardous environments, withstanding temperatures up to 1210 degrees - mob_inherent_traits = list(TRAIT_OPPOSABLE_THUMBS, TRAIT_SUPER_STRONG, TRAIT_INTENT_EYES, TRAIT_EMOTE_CD_EXEMPT, TRAIT_CANNOT_EAT, TRAIT_UNSTRIPPABLE) + mob_inherent_traits = list(TRAIT_SUPER_STRONG, TRAIT_INTENT_EYES, TRAIT_EMOTE_CD_EXEMPT, TRAIT_CANNOT_EAT, TRAIT_UNSTRIPPABLE) slowdown = 0.45 hair_color = "#000000" diff --git a/code/modules/mob/living/carbon/human/species/yautja/_species.dm b/code/modules/mob/living/carbon/human/species/yautja/_species.dm index 46039c323033..f871bfe02407 100644 --- a/code/modules/mob/living/carbon/human/species/yautja/_species.dm +++ b/code/modules/mob/living/carbon/human/species/yautja/_species.dm @@ -9,7 +9,6 @@ uses_ethnicity = TRUE flags = IS_WHITELISTED|HAS_SKIN_COLOR|NO_CLONE_LOSS|NO_POISON|NO_NEURO|SPECIAL_BONEBREAK|NO_SHRAPNEL|HAS_HARDCRIT mob_inherent_traits = list( - TRAIT_OPPOSABLE_THUMBS, TRAIT_YAUTJA_TECH, TRAIT_SUPER_STRONG, TRAIT_FOREIGN_BIO, diff --git a/code/modules/mob/living/carbon/human/species/zombie.dm b/code/modules/mob/living/carbon/human/species/zombie.dm index 4c5517962173..4e8a0b5e98e2 100644 --- a/code/modules/mob/living/carbon/human/species/zombie.dm +++ b/code/modules/mob/living/carbon/human/species/zombie.dm @@ -15,7 +15,7 @@ stamina_type = /datum/stamina/none death_message = "seizes up and falls limp..." flags = NO_BREATHE|NO_CLONE_LOSS|NO_POISON|NO_NEURO|NO_SHRAPNEL - mob_inherent_traits = list(TRAIT_OPPOSABLE_THUMBS, TRAIT_FOREIGN_BIO) + mob_inherent_traits = list(TRAIT_FOREIGN_BIO) brute_mod = 0.6 //Minor bullet resistance burn_mod = 0.8 //Lowered burn damage since it would 1-shot zombies from 2 to 0.8. speech_chance = 5 diff --git a/code/modules/vehicles/interior/interactable/seats.dm b/code/modules/vehicles/interior/interactable/seats.dm index 7d87897ec62b..1fee4438074a 100644 --- a/code/modules/vehicles/interior/interactable/seats.dm +++ b/code/modules/vehicles/interior/interactable/seats.dm @@ -108,9 +108,6 @@ to_chat(user, SPAN_WARNING("You are unable to use heavy weaponry.")) return - if(!HAS_TRAIT(user, TRAIT_OPPOSABLE_THUMBS)) - return - for(var/obj/item/I in user.contents) //prevents shooting while zoomed in, but zoom can still be activated and used without shooting if(I.zoom) I.zoom(user) From 50471a18335e03ef53b4bc626f8bde5dcbfa86a9 Mon Sep 17 00:00:00 2001 From: Doubleumc Date: Wed, 15 May 2024 01:29:05 -0400 Subject: [PATCH 5/5] Update traits.dm --- code/__DEFINES/traits.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm index 6de764488c83..6bf9805c261f 100644 --- a/code/__DEFINES/traits.dm +++ b/code/__DEFINES/traits.dm @@ -348,13 +348,13 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_CANNOT_EAT" = TRAIT_CANNOT_EAT, "TRAIT_VULTURE_USER" = TRAIT_VULTURE_USER, "TRAIT_CLOAKED" = TRAIT_CLOAKED, - "TRAIT_OPPOSABLE_THUMBS" = TRAIT_OPPOSABLE_THUMBS, ), // /mob/living/carbon/human = list( // ), /mob/living/carbon/xenomorph = list( "TRAIT_ABILITY_NO_PLASMA_TRANSFER" = TRAIT_ABILITY_NO_PLASMA_TRANSFER, "TRAIT_ABILITY_OVIPOSITOR" = TRAIT_ABILITY_OVIPOSITOR, + "TRAIT_OPPOSABLE_THUMBS" = TRAIT_OPPOSABLE_THUMBS, ), /datum/hive_status = list( "TRAIT_XENONID" = TRAIT_XENONID,