diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm
index 350e3c053da..a673d2b8d41 100644
--- a/code/__DEFINES/traits.dm
+++ b/code/__DEFINES/traits.dm
@@ -240,12 +240,12 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai
// You can stare into the abyss, but it does not stare back.
// You're immune to the hallucination effect of the supermatter, either
-// through force of will, or equipment.
+// through force of will, or equipment. Present on /mob or /datum/mind
#define TRAIT_SUPERMATTER_MADNESS_IMMUNE "supermatter_madness_immune"
// You can stare into the abyss, and it turns pink.
// Being close enough to the supermatter makes it heal at higher temperatures
-// and emit less heat. A trait applied to a mind.
+// and emit less heat. Present on /mob or /datum/mind
#define TRAIT_SUPERMATTER_SOOTHER "supermatter_soother"
//SKILLS
diff --git a/code/modules/jobs/job_types/psychologist.dm b/code/modules/jobs/job_types/psychologist.dm
index f211e8778ee..434ce3a2a8d 100644
--- a/code/modules/jobs/job_types/psychologist.dm
+++ b/code/modules/jobs/job_types/psychologist.dm
@@ -14,8 +14,6 @@
paycheck = PAYCHECK_MEDIUM
paycheck_department = ACCOUNT_SRV
- mind_traits = list(TRAIT_SUPERMATTER_SOOTHER, TRAIT_SUPERMATTER_MADNESS_IMMUNE)
-
display_order = JOB_DISPLAY_ORDER_PSYCHOLOGIST
/datum/outfit/job/psychologist
@@ -32,6 +30,8 @@
backpack_contents = list(/obj/item/storage/pill_bottle/mannitol, /obj/item/storage/pill_bottle/psicodine, /obj/item/storage/pill_bottle/paxpsych, /obj/item/storage/pill_bottle/happinesspsych, /obj/item/storage/pill_bottle/lsdpsych)
+ skillchips = list(/obj/item/skillchip/job/psychology)
+
backpack = /obj/item/storage/backpack/medic
satchel = /obj/item/storage/backpack/satchel/med
duffelbag = /obj/item/storage/backpack/duffelbag/med
diff --git a/code/modules/library/skill_learning/job_skillchips/psychologist.dm b/code/modules/library/skill_learning/job_skillchips/psychologist.dm
new file mode 100644
index 00000000000..280bc43aa0d
--- /dev/null
+++ b/code/modules/library/skill_learning/job_skillchips/psychologist.dm
@@ -0,0 +1,9 @@
+/obj/item/skillchip/job/psychology
+ name = "HYPERG1G4 skillchip"
+ desc = "Learn to bend the abyss to your will."
+ auto_traits = list(TRAIT_SUPERMATTER_SOOTHER, TRAIT_SUPERMATTER_MADNESS_IMMUNE)
+ skill_name = "Supermatter Cognition Theory"
+ skill_description = "Understand the correct mental patterns to keep in mind around matter in a hyperfractal state, causing immunity to visions and making the matter in question \"calmer\"."
+ skill_icon = "spa"
+ activate_message = "You start thinking in patterns that will render you immune to visions from, and act as a calming influence for, matter in a hyperfractal state."
+ deactivate_message = "Your thoughts become more disordered and jumbled. You are no longer immune to the abyss."
diff --git a/code/modules/library/skill_learning/job_skillchips/roboticist.dm b/code/modules/library/skill_learning/job_skillchips/roboticist.dm
index f0895c7cc78..b6835c9d484 100644
--- a/code/modules/library/skill_learning/job_skillchips/roboticist.dm
+++ b/code/modules/library/skill_learning/job_skillchips/roboticist.dm
@@ -1,7 +1,7 @@
/obj/item/skillchip/job/roboticist
name = "Cyborg C1-RCU-1T skillchip"
desc = "A roboticist's second best friend."
- auto_trait = TRAIT_KNOW_CYBORG_WIRES
+ auto_traits = list(TRAIT_KNOW_CYBORG_WIRES)
skill_name = "Cyborg Circuitry"
skill_description = "Recognise cyborg wire layouts and understand their functionality at a glance."
skill_icon = "sitemap"
diff --git a/code/modules/library/skill_learning/job_skillchips/station_engineer.dm b/code/modules/library/skill_learning/job_skillchips/station_engineer.dm
index 2c8f1eb21fa..0ed2edb5ccd 100644
--- a/code/modules/library/skill_learning/job_skillchips/station_engineer.dm
+++ b/code/modules/library/skill_learning/job_skillchips/station_engineer.dm
@@ -1,7 +1,7 @@
/obj/item/skillchip/job/engineer
name = "Engineering C1-RCU-1T skillchip"
desc = "Endorsed by Poly."
- auto_trait = TRAIT_KNOW_ENGI_WIRES
+ auto_traits = list(TRAIT_KNOW_ENGI_WIRES)
skill_name = "Engineering Circuitry"
skill_description = "Recognise airlock and APC wire layouts and understand their functionality at a glance."
skill_icon = "sitemap"
diff --git a/code/modules/library/skill_learning/skillchip.dm b/code/modules/library/skill_learning/skillchip.dm
index 04fc7b44b68..60de99294b7 100644
--- a/code/modules/library/skill_learning/skillchip.dm
+++ b/code/modules/library/skill_learning/skillchip.dm
@@ -7,8 +7,8 @@
custom_price = PAYCHECK_MEDIUM * 3
w_class = WEIGHT_CLASS_SMALL
- /// Trait automatically granted by this chip, optional
- var/auto_trait
+ /// Traits automatically granted by this chip, optional. Lazylist.
+ var/list/auto_traits
/// Skill name shown on UI
var/skill_name
/// Skill description shown on UI
@@ -142,8 +142,8 @@
if(!silent && activate_message)
to_chat(user, activate_message)
- if(auto_trait)
- ADD_TRAIT(user, auto_trait, SKILLCHIP_TRAIT)
+ for(var/trait in auto_traits)
+ ADD_TRAIT(user, trait, SKILLCHIP_TRAIT)
active = TRUE
@@ -176,8 +176,8 @@
if(!silent && deactivate_message)
to_chat(user, deactivate_message)
- if(auto_trait)
- REMOVE_TRAIT(user, auto_trait, SKILLCHIP_TRAIT)
+ for(var/trait in auto_traits)
+ REMOVE_TRAIT(user, trait, SKILLCHIP_TRAIT)
active = FALSE
@@ -369,7 +369,7 @@
/obj/item/skillchip/basketweaving
name = "Basketsoft 3000 skillchip"
desc = "Underwater edition."
- auto_trait = TRAIT_UNDERWATER_BASKETWEAVING_KNOWLEDGE
+ auto_traits = list(TRAIT_UNDERWATER_BASKETWEAVING_KNOWLEDGE)
skill_name = "Underwater Basketweaving"
skill_description = "Master intricate art of using twine to create perfect baskets while submerged."
skill_icon = "shopping-basket"
@@ -379,7 +379,7 @@
/obj/item/skillchip/wine_taster
name = "WINE skillchip"
desc = "Wine.Is.Not.Equal version 5."
- auto_trait = TRAIT_WINE_TASTER
+ auto_traits = list(TRAIT_WINE_TASTER)
skill_name = "Wine Tasting"
skill_description = "Recognize wine vintage from taste alone. Never again lack an opinion when presented with an unknown drink."
skill_icon = "wine-bottle"
@@ -388,7 +388,7 @@
/obj/item/skillchip/bonsai
name = "Hedge 3 skillchip"
- auto_trait = TRAIT_BONSAI
+ auto_traits = list(TRAIT_BONSAI)
skill_name = "Hedgetrimming"
skill_description = "Trim hedges and potted plants into marvelous new shapes with any old knife. Not applicable to plastic plants."
skill_icon = "spa"
@@ -409,7 +409,7 @@
/obj/item/skillchip/light_remover
name = "N16H7M4R3 skillchip"
- auto_trait = TRAIT_LIGHTBULB_REMOVER
+ auto_traits = list(TRAIT_LIGHTBULB_REMOVER)
skill_name = "Lightbulb Removing"
skill_description = "Stop failing taking out lightbulbs today, no gloves needed!"
skill_icon = "lightbulb"
@@ -418,7 +418,7 @@
/obj/item/skillchip/disk_verifier
name = "K33P-TH4T-D15K skillchip"
- auto_trait = TRAIT_DISK_VERIFIER
+ auto_traits = list(TRAIT_DISK_VERIFIER)
skill_name = "Nuclear Disk Verification"
skill_description = "Nuclear authentication disks have an extremely long serial number for verification. This skillchip stores that number, which allows the user to automatically spot forgeries."
skill_icon = "save"
diff --git a/code/modules/power/supermatter/supermatter.dm b/code/modules/power/supermatter/supermatter.dm
index 970afd43f4b..7cfd376874f 100644
--- a/code/modules/power/supermatter/supermatter.dm
+++ b/code/modules/power/supermatter/supermatter.dm
@@ -709,13 +709,11 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal)
for(var/mob/living/carbon/human/l in view(src, HALLUCINATION_RANGE(power)))
// Someone (generally a Psychologist), when looking at the SM
// within hallucination range makes it easier to manage.
- if (QDELETED(l.mind))
- continue
- if(HAS_TRAIT(l.mind, TRAIT_SUPERMATTER_SOOTHER))
+ if(HAS_TRAIT(l, TRAIT_SUPERMATTER_SOOTHER) || (l.mind && HAS_TRAIT(l.mind, TRAIT_SUPERMATTER_SOOTHER)))
toAdd = 0.05
psy_overlay = TRUE
// If they can see it without being immune (mesons, Psychologist)
- if (!(HAS_TRAIT(l, TRAIT_SUPERMATTER_MADNESS_IMMUNE) || HAS_TRAIT(l.mind, TRAIT_SUPERMATTER_MADNESS_IMMUNE)))
+ if (!(HAS_TRAIT(l, TRAIT_SUPERMATTER_MADNESS_IMMUNE) || (l.mind && HAS_TRAIT(l.mind, TRAIT_SUPERMATTER_MADNESS_IMMUNE))))
var/D = sqrt(1 / max(1, get_dist(l, src)))
l.hallucination += power * hallucination_power * D
l.hallucination = clamp(l.hallucination, 0, 200)
diff --git a/tgstation.dme b/tgstation.dme
index 32352cdf9e6..8c45869f427 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -2215,6 +2215,7 @@
#include "code\modules\library\skill_learning\job_skillchips\_job.dm"
#include "code\modules\library\skill_learning\job_skillchips\roboticist.dm"
#include "code\modules\library\skill_learning\job_skillchips\station_engineer.dm"
+#include "code\modules\library\skill_learning\job_skillchips\psychologist.dm"
#include "code\modules\library\skill_learning\job_skillchips\traitor.dm"
#include "code\modules\lighting\emissive_blocker.dm"
#include "code\modules\lighting\lighting_area.dm"