diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm
index 805e72cfcb..b620902bb8 100644
--- a/code/__DEFINES/traits.dm
+++ b/code/__DEFINES/traits.dm
@@ -1,3 +1,61 @@
+// trait accessor defines
+#define ADD_TRAIT(target, trait, source) \
+ do { \
+ var/list/_L; \
+ if (!target.status_traits) { \
+ target.status_traits = list(); \
+ _L = target.status_traits; \
+ _L[trait] = list(source); \
+ } else { \
+ _L = target.status_traits; \
+ if (_L[trait]) { \
+ _L[trait] |= list(source); \
+ } else { \
+ _L[trait] = list(source); \
+ } \
+ } \
+ } while (0)
+#define REMOVE_TRAIT(target, trait, sources) \
+ do { \
+ var/list/_L = target.status_traits; \
+ var/list/_S; \
+ if (sources && !islist(sources)) { \
+ _S = list(sources); \
+ } else { \
+ _S = sources\
+ }; \
+ if (_L && _L[trait]) { \
+ for (var/_T in _L[trait]) { \
+ if ((!_S && (_T != ROUNDSTART_TRAIT)) || (_T in _S)) { \
+ _L[trait] -= _T \
+ } \
+ };\
+ if (!length(_L[trait])) { \
+ _L -= trait \
+ }; \
+ if (!length(_L)) { \
+ target.status_traits = null \
+ }; \
+ } \
+ } while (0)
+#define REMOVE_TRAITS_NOT_IN(target, sources) \
+ do { \
+ var/list/_L = target.status_traits; \
+ var/list/_S = sources; \
+ if (_L) { \
+ for (var/_T in _L) { \
+ _L[_T] &= _S;\
+ if (!length(_L[_T])) { \
+ _L -= _T } \
+ };\
+ if (!length(_L)) { \
+ target.status_traits = null\
+ };\
+ }\
+ } while (0)
+#define HAS_TRAIT(target, trait) (target.status_traits ? (target.status_traits[trait] ? TRUE : FALSE) : FALSE)
+#define HAS_TRAIT_FROM(target, trait, source) (target.status_traits ? (target.status_traits[trait] ? (source in target.status_traits[trait]) : FALSE) : FALSE)
+
//mob traits
#define TRAIT_BLIND "blind"
#define TRAIT_MUTE "mute"
diff --git a/code/datums/datum.dm b/code/datums/datum.dm
index e74e30b536..cdb195dd82 100644
--- a/code/datums/datum.dm
+++ b/code/datums/datum.dm
@@ -2,6 +2,7 @@
var/gc_destroyed //Time when this object was destroyed.
var/list/active_timers //for SStimer
var/list/datum_components //for /datum/components
+ var/list/status_traits
var/list/comp_lookup //it used to be for looking up components which had registered a signal but now anything can register
var/list/signal_procs
var/signal_enabled = FALSE
diff --git a/code/game/objects/items/weaponry.dm b/code/game/objects/items/weaponry.dm
index ffbe5c004c..ccc703296e 100644
--- a/code/game/objects/items/weaponry.dm
+++ b/code/game/objects/items/weaponry.dm
@@ -115,10 +115,10 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
/obj/item/claymore/highlander/pickup(mob/living/user)
to_chat(user, "The power of Scotland protects you! You are shielded from all stuns and knockdowns.")
user.add_stun_absorption("highlander", INFINITY, 1, " is protected by the power of Scotland!", "The power of Scotland absorbs the stun!", " is protected by the power of Scotland!")
- user.add_trait(TRAIT_IGNORESLOWDOWN, HIGHLANDER)
+ user.ignore_slowdown(HIGHLANDER)
/obj/item/claymore/highlander/dropped(mob/living/user)
- user.remove_trait(TRAIT_IGNORESLOWDOWN, HIGHLANDER)
+ user.unignore_slowdown(HIGHLANDER)
if(!QDELETED(src))
qdel(src) //If this ever happens, it's because you lost an arm
diff --git a/code/modules/mob/living/brain/brain_item.dm b/code/modules/mob/living/brain/brain_item.dm
index 2f3ee10428..2ced3054c4 100644
--- a/code/modules/mob/living/brain/brain_item.dm
+++ b/code/modules/mob/living/brain/brain_item.dm
@@ -21,7 +21,7 @@
name = "brain"
if(C.mind && C.mind.has_antag_datum(/datum/antagonist/changeling) && !no_id_transfer) //congrats, you're trapped in a body you don't control
- if(brainmob && !(C.stat == DEAD || (C.has_trait(TRAIT_DEATHCOMA))))
+ if(brainmob && !(C.stat == DEAD || (HAS_TRAIT(C, TRAIT_DEATHCOMA))))
to_chat(brainmob, "You can't feel your body! You're still just a brain!")
forceMove(C)
C.update_hair()
@@ -64,7 +64,7 @@
name = "[L.name]'s brain"
if(brainmob)
return
-
+
if(!L.mind)
return
brainmob = new(src)
@@ -76,7 +76,7 @@
if(!brainmob.stored_dna)
brainmob.stored_dna = new /datum/dna/stored(brainmob)
C.dna.copy_dna(brainmob.stored_dna)
- if(L.has_trait(TRAIT_NOCLONE))
+ if(HAS_TRAIT(L, TRAIT_NOCLONE))
brainmob.status_traits[TRAIT_NOCLONE] = L.status_traits[TRAIT_NOCLONE]
var/obj/item/organ/zombie_infection/ZI = L.getorganslot(ORGAN_SLOT_ZOMBIE)
if(ZI)
diff --git a/code/modules/mob/living/carbon/alien/alien.dm b/code/modules/mob/living/carbon/alien/alien.dm
index 10fddfcb20..c8ece3f656 100644
--- a/code/modules/mob/living/carbon/alien/alien.dm
+++ b/code/modules/mob/living/carbon/alien/alien.dm
@@ -105,7 +105,7 @@ Des: Gives the client of the alien an image on each infected mob.
if (client)
for (var/i in GLOB.mob_living_list)
var/mob/living/L = i
- if(L.has_trait(TRAIT_XENO_HOST))
+ if(HAS_TRAIT(L, TRAIT_XENO_HOST))
var/obj/item/organ/body_egg/alien_embryo/A = L.getorgan(/obj/item/organ/body_egg/alien_embryo)
if(A)
var/I = image('icons/mob/alien.dmi', loc = L, icon_state = "infected[A.stage]")
diff --git a/code/modules/mob/living/carbon/alien/larva/life.dm b/code/modules/mob/living/carbon/alien/larva/life.dm
index 383edd566a..01a52b3b80 100644
--- a/code/modules/mob/living/carbon/alien/larva/life.dm
+++ b/code/modules/mob/living/carbon/alien/larva/life.dm
@@ -18,7 +18,7 @@
if(health<= -maxHealth || !getorgan(/obj/item/organ/brain))
death()
return
- if(IsUnconscious() || IsSleeping() || getOxyLoss() > 50 || (has_trait(TRAIT_DEATHCOMA)) || health <= crit_threshold)
+ if(IsUnconscious() || IsSleeping() || getOxyLoss() > 50 || (HAS_TRAIT(src, TRAIT_DEATHCOMA)) || health <= crit_threshold)
if(stat == CONSCIOUS)
stat = UNCONSCIOUS
blind_eyes(1)
diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm
index ea13255dfe..fb09de7ec2 100644
--- a/code/modules/mob/living/carbon/carbon.dm
+++ b/code/modules/mob/living/carbon/carbon.dm
@@ -167,7 +167,7 @@
if(!throwable_mob.buckled)
thrown_thing = throwable_mob
stop_pulling()
- if(has_trait(TRAIT_PACIFISM))
+ if(HAS_TRAIT(src, TRAIT_PACIFISM))
to_chat(src, "You gently let go of [throwable_mob].")
adjustStaminaLossBuffered(25)//CIT CHANGE - throwing an entire person shall be very tiring
var/turf/start_T = get_turf(loc) //Get the start and target tile for the descriptors
@@ -179,7 +179,7 @@
thrown_thing = I
dropItemToGround(I)
- if(has_trait(TRAIT_PACIFISM) && I.throwforce)
+ if(HAS_TRAIT(src, TRAIT_PACIFISM) && I.throwforce)
to_chat(src, "You set [I] down gently on the ground.")
return
@@ -416,7 +416,7 @@
var/modifier = 0
- if(has_trait(TRAIT_CLUMSY))
+ if(HAS_TRAIT(src, TRAIT_CLUMSY))
modifier -= 40 //Clumsy people are more likely to hit themselves -Honk!
//CIT CHANGES START HERE
@@ -462,7 +462,7 @@
return ..()
/mob/living/carbon/proc/vomit(lost_nutrition = 10, blood = FALSE, stun = TRUE, distance = 1, message = TRUE, toxic = FALSE)
- if(has_trait(TRAIT_NOHUNGER))
+ if(HAS_TRAIT(src, TRAIT_NOHUNGER))
return 1
if(nutrition < 100 && !blood)
@@ -759,14 +759,14 @@
if(status_flags & GODMODE)
return
if(stat != DEAD)
- if(health <= HEALTH_THRESHOLD_DEAD && !has_trait(TRAIT_NODEATH))
+ if(health <= HEALTH_THRESHOLD_DEAD && !HAS_TRAIT(src, TRAIT_NODEATH))
death()
return
- if(IsUnconscious() || IsSleeping() || getOxyLoss() > 50 || (has_trait(TRAIT_DEATHCOMA)) || (health <= HEALTH_THRESHOLD_FULLCRIT && !has_trait(TRAIT_NOHARDCRIT)))
+ if(IsUnconscious() || IsSleeping() || getOxyLoss() > 50 || (HAS_TRAIT(src, TRAIT_DEATHCOMA)) || (health <= HEALTH_THRESHOLD_FULLCRIT && !HAS_TRAIT(src, TRAIT_NOHARDCRIT)))
stat = UNCONSCIOUS
blind_eyes(1)
else
- if(health <= crit_threshold && !has_trait(TRAIT_NOSOFTCRIT))
+ if(health <= crit_threshold && !HAS_TRAIT(src, TRAIT_NOSOFTCRIT))
stat = SOFT_CRIT
else
stat = CONSCIOUS
diff --git a/code/modules/mob/living/carbon/carbon_defense.dm b/code/modules/mob/living/carbon/carbon_defense.dm
index d8bb90460a..e40c591014 100644
--- a/code/modules/mob/living/carbon/carbon_defense.dm
+++ b/code/modules/mob/living/carbon/carbon_defense.dm
@@ -224,7 +224,7 @@
/mob/living/carbon/electrocute_act(shock_damage, obj/source, siemens_coeff = 1, safety = 0, override = 0, tesla_shock = 0, illusion = 0, stun = TRUE)
if(tesla_shock && (flags_1 & TESLA_IGNORE_1))
return FALSE
- if(has_trait(TRAIT_SHOCKIMMUNE))
+ if(HAS_TRAIT(src, TRAIT_SHOCKIMMUNE))
return FALSE
shock_damage *= siemens_coeff
if(dna && dna.species)
@@ -261,7 +261,7 @@
to_chat(M, "You can't put [p_them()] out with just your bare hands!")
return
- if(health >= 0 && !(has_trait(TRAIT_FAKEDEATH)))
+ if(health >= 0 && !(HAS_TRAIT(src, TRAIT_FAKEDEATH)))
if(lying)
if(buckled)
@@ -350,12 +350,12 @@
if(eyes.eye_damage > 20)
if(prob(eyes.eye_damage - 20))
- if(!has_trait(TRAIT_NEARSIGHT))
+ if(!HAS_TRAIT(src, TRAIT_NEARSIGHT))
to_chat(src, "Your eyes start to burn badly!")
become_nearsighted(EYE_DAMAGE)
else if(prob(eyes.eye_damage - 25))
- if(!has_trait(TRAIT_BLIND))
+ if(!HAS_TRAIT(src, TRAIT_BLIND))
to_chat(src, "You can't see anything!")
become_blind(EYE_DAMAGE)
diff --git a/code/modules/mob/living/carbon/carbon_movement.dm b/code/modules/mob/living/carbon/carbon_movement.dm
index 37b888a6b8..8e6c888c40 100644
--- a/code/modules/mob/living/carbon/carbon_movement.dm
+++ b/code/modules/mob/living/carbon/carbon_movement.dm
@@ -37,7 +37,7 @@
/mob/living/carbon/Move(NewLoc, direct)
. = ..()
if(. && mob_has_gravity()) //floating is easy
- if(has_trait(TRAIT_NOHUNGER))
+ if(HAS_TRAIT(src, TRAIT_NOHUNGER))
nutrition = NUTRITION_LEVEL_FED - 1 //just less than feeling vigorous
else if(nutrition && stat != DEAD)
nutrition -= HUNGER_FACTOR/10
diff --git a/code/modules/mob/living/carbon/damage_procs.dm b/code/modules/mob/living/carbon/damage_procs.dm
index c21f9ce213..749ae3b5b0 100644
--- a/code/modules/mob/living/carbon/damage_procs.dm
+++ b/code/modules/mob/living/carbon/damage_procs.dm
@@ -83,7 +83,7 @@
return amount
/mob/living/carbon/adjustToxLoss(amount, updating_health = TRUE, forced = FALSE)
- if(!forced && has_trait(TRAIT_TOXINLOVER)) //damage becomes healing and healing becomes damage
+ if(!forced && HAS_TRAIT(src, TRAIT_TOXINLOVER)) //damage becomes healing and healing becomes damage
amount = -amount
if(amount > 0)
blood_volume -= 5*amount
diff --git a/code/modules/mob/living/carbon/examine.dm b/code/modules/mob/living/carbon/examine.dm
index c42bd82797..22da46346c 100644
--- a/code/modules/mob/living/carbon/examine.dm
+++ b/code/modules/mob/living/carbon/examine.dm
@@ -67,7 +67,7 @@
else
msg += "[t_He] [t_is] severely deformed!\n"
- if(has_trait(TRAIT_DUMB))
+ if(HAS_TRAIT(src, TRAIT_DUMB))
msg += "[t_He] seem[p_s()] to be clumsy and unable to think.\n"
if(fire_stacks > 0)
@@ -88,7 +88,7 @@
if(digitalcamo)
msg += "[t_He] [t_is] moving [t_his] body in an unnatural and blatantly unsimian manner.\n"
-
+
if(combatmode)
msg += "[t_He] [t_is] visibly tense[resting ? "." : ", and [t_is] standing in combative stance."]\n"
diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm
index 26e19ff376..94f08280d4 100644
--- a/code/modules/mob/living/carbon/human/examine.dm
+++ b/code/modules/mob/living/carbon/human/examine.dm
@@ -10,7 +10,7 @@
if(isliving(user))
var/mob/living/L = user
- if(L.has_trait(TRAIT_PROSOPAGNOSIA))
+ if(HAS_TRAIT(L, TRAIT_PROSOPAGNOSIA))
obscure_name = TRUE
var/msg = "*---------*\nThis is [!obscure_name ? name : "Unknown"]!\n"
@@ -93,7 +93,7 @@
if(!(SLOT_GLASSES in obscured))
if(glasses)
msg += "[t_He] [t_has] [glasses.get_examine_string(user)] covering [t_his] eyes.\n"
- else if(eye_color == BLOODCULT_EYE && iscultist(src) && has_trait(CULT_EYES))
+ else if(eye_color == BLOODCULT_EYE && iscultist(src) && HAS_TRAIT(src, CULT_EYES))
msg += "[t_His] eyes are glowing an unnatural red!\n"
//ears
@@ -126,7 +126,7 @@
msg += "[t_He] [t_is] twitching ever so slightly.\n"
var/appears_dead = 0
- if(stat == DEAD || (has_trait(TRAIT_FAKEDEATH)))
+ if(stat == DEAD || (HAS_TRAIT(src, TRAIT_FAKEDEATH)))
appears_dead = 1
if(suiciding)
msg += "[t_He] appear[p_s()] to have committed suicide... there is no hope of recovery.\n"
@@ -287,7 +287,7 @@
if(stat == UNCONSCIOUS)
msg += "[t_He] [t_is]n't responding to anything around [t_him] and seem[p_s()] to be asleep.\n"
else
- if(has_trait(TRAIT_DUMB))
+ if(HAS_TRAIT(src, TRAIT_DUMB))
msg += "[t_He] [t_has] a stupid expression on [t_his] face.\n"
if(InCritical())
msg += "[t_He] [t_is] barely conscious.\n"
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index 13da7b913c..0f962d7b0f 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -499,7 +499,7 @@
. = 1 // Default to returning true.
if(user && !target_zone)
target_zone = user.zone_selected
- if(has_trait(TRAIT_PIERCEIMMUNE) && !bypass_immunity)
+ if(HAS_TRAIT(src, TRAIT_PIERCEIMMUNE) && !bypass_immunity)
. = 0
// If targeting the head, see if the head item is thin enough.
// If targeting anything else, see if the wear suit is thin enough.
@@ -604,7 +604,7 @@
threatcount += 4 //fuk u antags <3 //no you
//mindshield implants imply trustworthyness
- if(has_trait(TRAIT_MINDSHIELD))
+ if(HAS_TRAIT(src, TRAIT_MINDSHIELD))
threatcount -= 1
//Agent cards lower threatlevel.
@@ -640,7 +640,7 @@
/mob/living/carbon/human/proc/do_cpr(mob/living/carbon/C)
CHECK_DNA_AND_SPECIES(C)
- if(C.stat == DEAD || (C.has_trait(TRAIT_FAKEDEATH)))
+ if(C.stat == DEAD || (HAS_TRAIT(C, TRAIT_FAKEDEATH)))
to_chat(src, "[C.name] is dead!")
return
if(is_mouth_covered())
@@ -657,7 +657,7 @@
to_chat(src, "You fail to perform CPR on [C]!")
return 0
- var/they_breathe = !C.has_trait(TRAIT_NOBREATH)
+ var/they_breathe = !HAS_TRAIT(C, TRAIT_NOBREATH)
var/they_lung = C.getorganslot(ORGAN_SLOT_LUNGS)
if(C.health > C.crit_threshold)
diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm
index b66ebdb001..b8278d503a 100644
--- a/code/modules/mob/living/carbon/human/human_defense.dm
+++ b/code/modules/mob/living/carbon/human/human_defense.dm
@@ -138,7 +138,7 @@
else if(I)
if(I.throw_speed >= EMBED_THROWSPEED_THRESHOLD)
if(can_embed(I))
- if(prob(I.embedding.embed_chance) && !has_trait(TRAIT_PIERCEIMMUNE))
+ if(prob(I.embedding.embed_chance) && !HAS_TRAIT(src, TRAIT_PIERCEIMMUNE))
throw_alert("embeddedobject", /obj/screen/alert/embeddedobject)
var/obj/item/bodypart/L = pick(bodyparts)
L.embedded_objects |= I
@@ -153,7 +153,7 @@
return ..()
/mob/living/carbon/human/grabbedby(mob/living/carbon/user, supress_message = 0)
- if(user == src && pulling && !pulling.anchored && grab_state >= GRAB_AGGRESSIVE && (has_trait(TRAIT_FAT)) && ismonkey(pulling))
+ if(user == src && pulling && !pulling.anchored && grab_state >= GRAB_AGGRESSIVE && (HAS_TRAIT(src, TRAIT_FAT)) && ismonkey(pulling))
devour_mob(pulling)
else
..()
@@ -668,7 +668,7 @@
if(prob(30))
burndamage += rand(30,40)
- if(has_trait(TRAIT_SELF_AWARE))
+ if(HAS_TRAIT(src, TRAIT_SELF_AWARE))
status = "[brutedamage] brute damage and [burndamage] burn damage"
if(!brutedamage && !burndamage)
status = "no damage"
@@ -695,7 +695,7 @@
var/no_damage
if(status == "OK" || status == "no damage")
no_damage = TRUE
- to_chat(src, "\t Your [LB.name] [has_trait(TRAIT_SELF_AWARE) ? "has" : "is"] [status].")
+ to_chat(src, "\t Your [LB.name] [HAS_TRAIT(src, TRAIT_SELF_AWARE) ? "has" : "is"] [status].")
for(var/obj/item/I in LB.embedded_objects)
to_chat(src, "\t There is \a [I] embedded in your [LB.name]!")
@@ -710,7 +710,7 @@
to_chat(src, "You're completely exhausted.")
else
to_chat(src, "You feel fatigued.")
- if(has_trait(TRAIT_SELF_AWARE))
+ if(HAS_TRAIT(src, TRAIT_SELF_AWARE))
if(toxloss)
if(toxloss > 10)
to_chat(src, "You feel sick.")
diff --git a/code/modules/mob/living/carbon/human/human_helpers.dm b/code/modules/mob/living/carbon/human/human_helpers.dm
index dd37563f8f..0b40d3d26a 100644
--- a/code/modules/mob/living/carbon/human/human_helpers.dm
+++ b/code/modules/mob/living/carbon/human/human_helpers.dm
@@ -56,7 +56,7 @@
if( head && (head.flags_inv&HIDEFACE) )
return if_no_face //Likewise for hats
var/obj/item/bodypart/O = get_bodypart(BODY_ZONE_HEAD)
- if( !O || (has_trait(TRAIT_DISFIGURED)) || (O.brutestate+O.burnstate)>2 || cloneloss>50 || !real_name || nameless) //disfigured. use id-name if possible
+ if( !O || (HAS_TRAIT(src, TRAIT_DISFIGURED)) || (O.brutestate+O.burnstate)>2 || cloneloss>50 || !real_name || nameless) //disfigured. use id-name if possible
return if_no_face
return real_name
@@ -92,7 +92,7 @@
/mob/living/carbon/human/IsAdvancedToolUser()
- if(has_trait(TRAIT_MONKEYLIKE))
+ if(HAS_TRAIT(src, TRAIT_MONKEYLIKE))
return FALSE
return TRUE//Humans can use guns and such
@@ -138,7 +138,7 @@
if(src.dna.check_mutation(HULK))
to_chat(src, "Your meaty finger is much too large for the trigger guard!")
return FALSE
- if(has_trait(TRAIT_NOGUNS))
+ if(HAS_TRAIT(src, TRAIT_NOGUNS))
to_chat(src, "Your fingers don't fit in the trigger guard!")
return FALSE
if(mind)
diff --git a/code/modules/mob/living/carbon/human/human_movement.dm b/code/modules/mob/living/carbon/human/human_movement.dm
index 1addb3615c..6ea9c985e2 100644
--- a/code/modules/mob/living/carbon/human/human_movement.dm
+++ b/code/modules/mob/living/carbon/human/human_movement.dm
@@ -1,7 +1,7 @@
/mob/living/carbon/human/get_movespeed_modifiers()
var/list/considering = ..()
. = considering
- if(has_trait(TRAIT_IGNORESLOWDOWN))
+ if(HAS_TRAIT(src, TRAIT_IGNORESLOWDOWN))
for(var/id in .)
var/list/data = .[id]
if(data[MOVESPEED_DATA_INDEX_FLAGS] & IGNORE_NOSLOW)
@@ -13,10 +13,10 @@
. += dna.species.movement_delay(src)
/mob/living/carbon/human/slip(knockdown_amount, obj/O, lube)
- if(has_trait(TRAIT_NOSLIPALL))
+ if(HAS_TRAIT(src, TRAIT_NOSLIPALL))
return 0
if (!(lube&GALOSHES_DONT_HELP))
- if(has_trait(TRAIT_NOSLIPWATER))
+ if(HAS_TRAIT(src, TRAIT_NOSLIPWATER))
return 0
if(shoes && istype(shoes, /obj/item/clothing))
var/obj/item/clothing/CS = shoes
diff --git a/code/modules/mob/living/carbon/human/inventory.dm b/code/modules/mob/living/carbon/human/inventory.dm
index 7e2545f93e..176d967d52 100644
--- a/code/modules/mob/living/carbon/human/inventory.dm
+++ b/code/modules/mob/living/carbon/human/inventory.dm
@@ -187,7 +187,7 @@
if(G.tint)
update_tint()
if(G.vision_correction)
- if(has_trait(TRAIT_NEARSIGHT))
+ if(HAS_TRAIT(src, TRAIT_NEARSIGHT))
overlay_fullscreen("nearsighted", /obj/screen/fullscreen/impaired, 1)
adjust_eye_damage(0)
if(G.vision_flags || G.darkness_view || G.invis_override || G.invis_view || !isnull(G.lighting_alpha))
diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm
index a50fb4fe79..12b1d73778 100644
--- a/code/modules/mob/living/carbon/human/life.dm
+++ b/code/modules/mob/living/carbon/human/life.dm
@@ -63,7 +63,7 @@
/mob/living/carbon/human/handle_traits()
if(eye_blind) //blindness, heals slowly over time
- if(has_trait(TRAIT_BLIND, EYES_COVERED)) //covering your eyes heals blurry eyes faster
+ if(HAS_TRAIT(src, TRAIT_BLIND, EYES_COVERED)) //covering your eyes heals blurry eyes faster
adjust_blindness(-3)
else
adjust_blindness(-1)
@@ -95,7 +95,7 @@
if(!L)
if(health >= crit_threshold)
adjustOxyLoss(HUMAN_MAX_OXYLOSS + 1)
- else if(!has_trait(TRAIT_NOCRITDAMAGE))
+ else if(!HAS_TRAIT(src, TRAIT_NOCRITDAMAGE))
adjustOxyLoss(HUMAN_CRIT_MAX_OXYLOSS)
failed_last_breath = 1
@@ -332,7 +332,7 @@
HM.on_life(src)
/mob/living/carbon/human/proc/handle_heart()
- var/we_breath = !has_trait(TRAIT_NOBREATH, SPECIES_TRAIT)
+ var/we_breath = !HAS_TRAIT(src, TRAIT_NOBREATH, SPECIES_TRAIT)
if(!undergoing_cardiac_arrest())
return
diff --git a/code/modules/mob/living/carbon/human/say.dm b/code/modules/mob/living/carbon/human/say.dm
index 7ce3f78da0..b0ac43aa42 100644
--- a/code/modules/mob/living/carbon/human/say.dm
+++ b/code/modules/mob/living/carbon/human/say.dm
@@ -54,7 +54,7 @@
/mob/living/carbon/human/IsVocal()
// how do species that don't breathe talk? magic, that's what.
- if(!has_trait(TRAIT_NOBREATH, SPECIES_TRAIT) && !getorganslot(ORGAN_SLOT_LUNGS))
+ if(!HAS_TRAIT(src, TRAIT_NOBREATH, SPECIES_TRAIT) && !getorganslot(ORGAN_SLOT_LUNGS))
return FALSE
if(mind)
return !mind.miming
diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm
index 3930d19168..769b67e8e6 100644
--- a/code/modules/mob/living/carbon/human/species.dm
+++ b/code/modules/mob/living/carbon/human/species.dm
@@ -322,7 +322,7 @@ GLOBAL_LIST_EMPTY(roundstart_races)
var/obj/item/bodypart/head/HD = H.get_bodypart(BODY_ZONE_HEAD)
if(!HD) //Decapitated
return
- if(H.has_trait(TRAIT_HUSK))
+ if(HAS_TRAIT(H, TRAIT_HUSK))
return
var/datum/sprite_accessory/S
@@ -462,7 +462,7 @@ GLOBAL_LIST_EMPTY(roundstart_races)
var/obj/item/bodypart/head/HD = H.get_bodypart(BODY_ZONE_HEAD)
- if(HD && !(H.has_trait(TRAIT_HUSK)))
+ if(HD && !(HAS_TRAIT(H, TRAIT_HUSK)))
// lipstick
if(H.lip_style && (LIPS in species_traits))
var/mutable_appearance/lip_overlay = mutable_appearance('icons/mob/human_face.dmi', "lips_[H.lip_style]", -BODY_LAYER)
@@ -757,7 +757,7 @@ GLOBAL_LIST_EMPTY(roundstart_races)
for(var/index=1, index<=colorlist.len, index++)
colorlist[index] = colorlist[index]/255
- if(!(H.has_trait(TRAIT_HUSK)))
+ if(!HAS_TRAIT(H, TRAIT_HUSK))
if(!forced_colour)
switch(S.color_src)
if(SKINTONE)
@@ -916,11 +916,11 @@ GLOBAL_LIST_EMPTY(roundstart_races)
/datum/species/proc/spec_life(mob/living/carbon/human/H)
- if(H.has_trait(TRAIT_NOBREATH))
+ if(HAS_TRAIT(H, TRAIT_NOBREATH))
H.setOxyLoss(0)
H.losebreath = 0
- var/takes_crit_damage = (!H.has_trait(TRAIT_NOCRITDAMAGE))
+ var/takes_crit_damage = !HAS_TRAIT(H, TRAIT_NOCRITDAMAGE)
if((H.health < H.crit_threshold) && takes_crit_damage)
H.adjustBruteLoss(1)
@@ -1158,7 +1158,7 @@ GLOBAL_LIST_EMPTY(roundstart_races)
/datum/species/proc/handle_digestion(mob/living/carbon/human/H)
//The fucking TRAIT_FAT mutation is the dumbest shit ever. It makes the code so difficult to work with
- if(H.has_trait(TRAIT_FAT))//I share your pain, past coder.
+ if(HAS_TRAIT(H, TRAIT_FAT))//I share your pain, past coder.
if(H.overeatduration < 100)
to_chat(H, "You feel fit again!")
H.remove_trait(TRAIT_FAT, OBESITY)
@@ -1172,7 +1172,7 @@ GLOBAL_LIST_EMPTY(roundstart_races)
H.update_inv_wear_suit()
// nutrition decrease and satiety
- if (H.nutrition > 0 && H.stat != DEAD && !H.has_trait(TRAIT_NOHUNGER))
+ if (H.nutrition > 0 && H.stat != DEAD && !HAS_TRAIT(H, TRAIT_NOHUNGER))
// THEY HUNGER
var/hunger_rate = HUNGER_FACTOR
GET_COMPONENT_FROM(mood, /datum/component/mood, H)
@@ -1201,7 +1201,7 @@ GLOBAL_LIST_EMPTY(roundstart_races)
if(H.nutrition > NUTRITION_LEVEL_FAT)
H.metabolism_efficiency = 1
else if(H.nutrition > NUTRITION_LEVEL_FED && H.satiety > 80)
- if(H.metabolism_efficiency != 1.25 && !H.has_trait(TRAIT_NOHUNGER))
+ if(H.metabolism_efficiency != 1.25 && !HAS_TRAIT(H, TRAIT_NOHUNGER))
to_chat(H, "You feel vigorous.")
H.metabolism_efficiency = 1.25
else if(H.nutrition < NUTRITION_LEVEL_STARVING + 50)
@@ -1230,7 +1230,7 @@ GLOBAL_LIST_EMPTY(roundstart_races)
. = FALSE
var/radiation = H.radiation
- if(H.has_trait(TRAIT_RADIMMUNE))
+ if(HAS_TRAIT(H, TRAIT_RADIMMUNE))
radiation = 0
return TRUE
@@ -1277,17 +1277,17 @@ GLOBAL_LIST_EMPTY(roundstart_races)
gravity = H.has_gravity()
if(gravity && !flight) //Check for chemicals and innate speedups and slowdowns if we're on the ground
- if(H.has_trait(TRAIT_GOTTAGOFAST))
+ if(HAS_TRAIT(H, TRAIT_GOTTAGOFAST))
. -= 1
- if(H.has_trait(TRAIT_GOTTAGOREALLYFAST))
+ if(HAS_TRAIT(H, TRAIT_GOTTAGOREALLYFAST))
. -= 2
. += speedmod
. += H.physiology.speed_mod
- if (H.m_intent == MOVE_INTENT_WALK && H.has_trait(TRAIT_SPEEDY_STEP))
+ if (H.m_intent == MOVE_INTENT_WALK && HAS_TRAIT(H, TRAIT_SPEEDY_STEP))
. -= 1
- if(H.has_trait(TRAIT_IGNORESLOWDOWN))
+ if(HAS_TRAIT(H, TRAIT_IGNORESLOWDOWN))
ignoreslow = 1
if(!gravity)
@@ -1338,9 +1338,9 @@ GLOBAL_LIST_EMPTY(roundstart_races)
if(SANITY_UNSTABLE to SANITY_DISTURBED)
. += 0.5
- if(H.has_trait(TRAIT_FAT))
+ if(HAS_TRAIT(H, TRAIT_FAT))
. += (1.5 - flight)
- if(H.bodytemperature < BODYTEMP_COLD_DAMAGE_LIMIT && !H.has_trait(TRAIT_RESISTCOLD))
+ if(H.bodytemperature < BODYTEMP_COLD_DAMAGE_LIMIT && !HAS_TRAIT(H, TRAIT_RESISTCOLD))
. += (BODYTEMP_COLD_DAMAGE_LIMIT - H.bodytemperature) / COLD_SLOWDOWN_FACTOR
return .
@@ -1353,13 +1353,13 @@ GLOBAL_LIST_EMPTY(roundstart_races)
//////////////////
/datum/species/proc/help(mob/living/carbon/human/user, mob/living/carbon/human/target, datum/martial_art/attacker_style)
- if(target.health >= 0 && !(target.has_trait(TRAIT_FAKEDEATH)))
+ if(target.health >= 0 && !HAS_TRAIT(target, TRAIT_FAKEDEATH))
target.help_shake_act(user)
if(target != user)
log_combat(user, target, "shaked")
return 1
else
- var/we_breathe = !user.has_trait(TRAIT_NOBREATH)
+ var/we_breathe = !HAS_TRAIT(user, TRAIT_NOBREATH)
var/we_lung = user.getorganslot(ORGAN_SLOT_LUNGS)
if(we_breathe && we_lung)
@@ -1384,7 +1384,7 @@ GLOBAL_LIST_EMPTY(roundstart_races)
/datum/species/proc/harm(mob/living/carbon/human/user, mob/living/carbon/human/target, datum/martial_art/attacker_style)
- if(user.has_trait(TRAIT_PACIFISM))
+ if(HAS_TRAIT(user, TRAIT_PACIFISM))
to_chat(user, "You don't want to harm [target]!")
return FALSE
if(user.getStaminaLoss() >= STAMINA_SOFTCRIT) //CITADEL CHANGE - makes it impossible to punch while in stamina softcrit
@@ -1480,7 +1480,7 @@ GLOBAL_LIST_EMPTY(roundstart_races)
"You slap [user == target ? "yourself" : "\the [target]"] in the face! ",\
"You hear a slap."
)
- if (!target.has_trait(TRAIT_NYMPHO))
+ if (!target.HAS_TRAIT(TRAIT_NYMPHO))
stop_wagging_tail(target)
user.do_attack_animation(target, ATTACK_EFFECT_FACE_SLAP)
user.adjustStaminaLossBuffered(3)
diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm
index e757e6dcf4..db8ca40a56 100644
--- a/code/modules/mob/living/carbon/life.dm
+++ b/code/modules/mob/living/carbon/life.dm
@@ -116,7 +116,7 @@
air_update_turf()
/mob/living/carbon/proc/has_smoke_protection()
- if(has_trait(TRAIT_NOBREATH))
+ if(HAS_TRAIT(src, TRAIT_NOBREATH))
return TRUE
return FALSE
@@ -324,7 +324,7 @@
return
// No decay if formaldehyde in corpse or when the corpse is charred
- if(reagents.has_reagent("formaldehyde", 15) || has_trait(TRAIT_HUSK))
+ if(reagents.has_reagent("formaldehyde", 15) || HAS_TRAIT(src, TRAIT_HUSK))
return
// Also no decay if corpse chilled or not organic/undead
@@ -551,7 +551,7 @@ GLOBAL_LIST_INIT(ballmer_windows_me_msg, list("Yo man, what if, we like, uh, put
if(drunkenness >= 6)
SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "drunk", /datum/mood_event/drunk)
jitteriness = max(jitteriness - 3, 0)
- if(has_trait(TRAIT_DRUNK_HEALING))
+ if(HAS_TRAIT(src, TRAIT_DRUNK_HEALING))
adjustBruteLoss(-0.12, FALSE)
adjustFireLoss(-0.06, FALSE)
@@ -576,7 +576,7 @@ GLOBAL_LIST_INIT(ballmer_windows_me_msg, list("Yo man, what if, we like, uh, put
if(prob(25))
confused += 2
Dizzy(10)
- if(has_trait(TRAIT_DRUNK_HEALING)) // effects stack with lower tiers
+ if(HAS_TRAIT(src, TRAIT_DRUNK_HEALING)) // effects stack with lower tiers
adjustBruteLoss(-0.3, FALSE)
adjustFireLoss(-0.15, FALSE)
@@ -589,7 +589,7 @@ GLOBAL_LIST_INIT(ballmer_windows_me_msg, list("Yo man, what if, we like, uh, put
if(drunkenness >= 61)
if(prob(50))
blur_eyes(5)
- if(has_trait(TRAIT_DRUNK_HEALING))
+ if(HAS_TRAIT(src, TRAIT_DRUNK_HEALING))
adjustBruteLoss(-0.4, FALSE)
adjustFireLoss(-0.2, FALSE)
@@ -657,7 +657,7 @@ GLOBAL_LIST_INIT(ballmer_windows_me_msg, list("Yo man, what if, we like, uh, put
/mob/living/carbon/proc/liver_failure()
reagents.metabolize(src, can_overdose=FALSE, liverless = TRUE)
- if(has_trait(TRAIT_STABLEHEART))
+ if(HAS_TRAIT(src, TRAIT_STABLEHEART))
return
adjustToxLoss(4, TRUE, TRUE)
if(prob(30))
@@ -693,7 +693,7 @@ GLOBAL_LIST_INIT(ballmer_windows_me_msg, list("Yo man, what if, we like, uh, put
return TRUE
/mob/living/carbon/proc/needs_heart()
- if(has_trait(TRAIT_STABLEHEART))
+ if(HAS_TRAIT(src, TRAIT_STABLEHEART))
return FALSE
if(dna && dna.species && (NOBLOOD in dna.species.species_traits)) //not all carbons have species!
return FALSE
diff --git a/code/modules/mob/living/carbon/update_icons.dm b/code/modules/mob/living/carbon/update_icons.dm
index 212b96e6d9..87bf662c4f 100644
--- a/code/modules/mob/living/carbon/update_icons.dm
+++ b/code/modules/mob/living/carbon/update_icons.dm
@@ -279,7 +279,7 @@
else
. += "-robotic"
- if(has_trait(TRAIT_HUSK))
+ if(HAS_TRAIT(src, TRAIT_HUSK))
. += "-husk"
diff --git a/code/modules/mob/living/living_defines.dm b/code/modules/mob/living/living_defines.dm
index 0ba5b4c56d..3b0af53866 100644
--- a/code/modules/mob/living/living_defines.dm
+++ b/code/modules/mob/living/living_defines.dm
@@ -33,8 +33,6 @@
var/incorporeal_move = FALSE //FALSE is off, INCORPOREAL_MOVE_BASIC is normal, INCORPOREAL_MOVE_SHADOW is for ninjas
//and INCORPOREAL_MOVE_JAUNT is blocked by holy water/salt
- var/list/status_traits = list()
-
var/list/roundstart_quirks = list()
var/list/surgeries = list() //a list of surgery datums. generally empty, they're added when the player wants them.
diff --git a/code/modules/mob/living/status_procs.dm b/code/modules/mob/living/status_procs.dm
index d1c72069ac..537ce8e67d 100644
--- a/code/modules/mob/living/status_procs.dm
+++ b/code/modules/mob/living/status_procs.dm
@@ -140,17 +140,6 @@
/////////////////////////////////// DISABILITIES ////////////////////////////////////
-/mob/living/proc/add_trait(trait, source)
- if(!status_traits[trait])
- status_traits[trait] = list(source)
- on_add_trait(trait, source)
- else
- status_traits[trait] |= list(source)
-
-/mob/living/proc/on_add_trait(trait, source)
- if(trait == TRAIT_IGNORESLOWDOWN)
- update_movespeed(FALSE)
-
/mob/living/proc/add_quirk(quirk, spawn_effects) //separate proc due to the way these ones are handled
if(has_trait(quirk))
return
@@ -160,80 +149,15 @@
new T (src, spawn_effects)
return TRUE
-/mob/living/proc/remove_trait(trait, list/sources, force)
- if(!status_traits[trait])
- return
-
- if(locate(ROUNDSTART_TRAIT) in status_traits[trait] && !force) //mob traits applied through roundstart cannot normally be removed
- return
-
- if(!sources) // No defined source cures the trait entirely.
- status_traits -= trait
- on_remove_trait(trait, sources, force)
- return
-
- if(!islist(sources))
- sources = list(sources)
-
- if(LAZYLEN(sources))
- for(var/S in sources)
- if(S in status_traits[trait])
- status_traits[trait] -= S
- else
- status_traits[trait] = list()
-
- if(!LAZYLEN(status_traits[trait]))
- status_traits -= trait
- on_remove_trait(trait, sources, force)
-
-/mob/living/proc/on_remove_trait(trait, list/sources, force)
- if(trait == TRAIT_IGNORESLOWDOWN)
- update_movespeed(FALSE)
-
/mob/living/proc/remove_quirk(quirk)
var/datum/quirk/T = roundstart_quirks[quirk]
if(T)
qdel(T)
return TRUE
-/mob/living/proc/has_trait(trait, list/sources)
- if(!status_traits[trait])
- return FALSE
-
- . = FALSE
-
- if(sources && !islist(sources))
- sources = list(sources)
- if(LAZYLEN(sources))
- for(var/S in sources)
- if(S in status_traits[trait])
- return TRUE
- else if(LAZYLEN(status_traits[trait]))
- return TRUE
-
/mob/living/proc/has_quirk(quirk)
return roundstart_quirks[quirk]
-/mob/living/proc/remove_all_traits(remove_species_traits = FALSE, remove_organ_traits = FALSE, remove_quirks = FALSE)
-
- var/list/blacklisted_sources = list()
- if(!remove_species_traits)
- blacklisted_sources += SPECIES_TRAIT
- if(!remove_organ_traits)
- blacklisted_sources += ORGAN_TRAIT
- if(!remove_quirks)
- blacklisted_sources += ROUNDSTART_TRAIT
-
- for(var/kebab in status_traits)
- var/skip
- for(var/S in blacklisted_sources)
- if(S in status_traits[kebab])
- skip = TRUE
- break
- if(!skip)
- remove_trait(kebab, null, TRUE)
- CHECK_TICK
-
/////////////////////////////////// TRAIT PROCS ////////////////////////////////////
/mob/living/proc/cure_blind(list/sources)
@@ -285,4 +209,12 @@
add_trait(TRAIT_FAKEDEATH, source)
add_trait(TRAIT_DEATHCOMA, source)
tod = STATION_TIME_TIMESTAMP("hh:mm:ss")
- update_stat()
\ No newline at end of file
+ update_stat()
+
+/mob/living/proc/unignore_slowdown(list/sources)
+ remove_trait(TRAIT_IGNORESLOWDOWN, sources)
+ update_movespeed(FALSE)
+
+/mob/living/proc/ignore_slowdown(source)
+ add_trait(TRAIT_IGNORESLOWDOWN, source)
+ update_movespeed(FALSE)
\ No newline at end of file
diff --git a/code/modules/mob/living/taste.dm b/code/modules/mob/living/taste.dm
index 534bf36c59..fec024cebf 100644
--- a/code/modules/mob/living/taste.dm
+++ b/code/modules/mob/living/taste.dm
@@ -9,7 +9,7 @@
/mob/living/carbon/get_taste_sensitivity()
var/obj/item/organ/tongue/tongue = getorganslot(ORGAN_SLOT_TONGUE)
- if(istype(tongue) && !has_trait(TRAIT_AGEUSIA))
+ if(istype(tongue) && !HAS_TRAIT(src, TRAIT_AGEUSIA))
. = tongue.taste_sensitivity
else
. = 101 // can't taste anything without a tongue
diff --git a/code/modules/reagents/chemistry/reagents/drug_reagents.dm b/code/modules/reagents/chemistry/reagents/drug_reagents.dm
index d77756a649..a4a2c8e527 100644
--- a/code/modules/reagents/chemistry/reagents/drug_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/drug_reagents.dm
@@ -167,10 +167,10 @@
/datum/reagent/drug/methamphetamine/on_mob_add(mob/living/L)
..()
- L.add_trait(TRAIT_IGNORESLOWDOWN, id)
+ L.ignore_slowdown(id)
/datum/reagent/drug/methamphetamine/on_mob_delete(mob/living/L)
- L.remove_trait(TRAIT_IGNORESLOWDOWN, id)
+ L.unignore_slowdown(id)
..()
/datum/reagent/drug/methamphetamine/on_mob_life(mob/living/carbon/M)
diff --git a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm
index 3970e8157b..6c9f77c762 100644
--- a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm
@@ -632,10 +632,10 @@
/datum/reagent/medicine/morphine/on_mob_add(mob/living/L)
..()
- L.add_trait(TRAIT_IGNORESLOWDOWN, id)
+ L.ignore_slowdown(id)
/datum/reagent/medicine/morphine/on_mob_delete(mob/living/L)
- L.remove_trait(TRAIT_IGNORESLOWDOWN, id)
+ L.unignore_slowdown(id)
..()
/datum/reagent/medicine/morphine/on_mob_life(mob/living/carbon/M)
@@ -1224,11 +1224,11 @@
/datum/reagent/medicine/muscle_stimulant/on_mob_add(mob/living/M)
. = ..()
- M.add_trait(TRAIT_IGNORESLOWDOWN, id)
+ M.ignore_slowdown(id)
/datum/reagent/medicine/muscle_stimulant/on_mob_delete(mob/living/M)
. = ..()
- M.remove_trait(TRAIT_IGNORESLOWDOWN, id)
+ M.unignore_slowdown(id)
/datum/reagent/medicine/modafinil
name = "Modafinil"
diff --git a/code/modules/research/xenobiology/crossbreeding/_status_effects.dm b/code/modules/research/xenobiology/crossbreeding/_status_effects.dm
index aba54cfdf3..20d879cd77 100644
--- a/code/modules/research/xenobiology/crossbreeding/_status_effects.dm
+++ b/code/modules/research/xenobiology/crossbreeding/_status_effects.dm
@@ -767,11 +767,11 @@ datum/status_effect/stabilized/blue/on_remove()
colour = "red"
/datum/status_effect/stabilized/red/on_apply()
- owner.add_trait(TRAIT_IGNORESLOWDOWN,"slimestatus")
+ owner.ignore_slowdown("slimestatus")
return ..()
/datum/status_effect/stabilized/red/on_remove()
- owner.remove_trait(TRAIT_IGNORESLOWDOWN,"slimestatus")
+ owner.unignore_slowdown("slimestatus")
/datum/status_effect/stabilized/green
id = "stabilizedgreen"
diff --git a/tgstation.dme b/tgstation.dme
index 9219376f29..dd6db2a5e4 100755
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -2504,22 +2504,10 @@
#include "code\modules\research\designs\AI_module_designs.dm"
#include "code\modules\research\designs\biogenerator_designs.dm"
#include "code\modules\research\designs\bluespace_designs.dm"
-#include "code\modules\research\designs\comp_board_designs\comp_board_designs_all_misc.dm"
-#include "code\modules\research\designs\comp_board_designs\comp_board_designs_cargo .dm"
-#include "code\modules\research\designs\comp_board_designs\comp_board_designs_engi.dm"
-#include "code\modules\research\designs\comp_board_designs\comp_board_designs_medical.dm"
-#include "code\modules\research\designs\comp_board_designs\comp_board_designs_sci.dm"
-#include "code\modules\research\designs\comp_board_designs\comp_board_designs_sec.dm"
#include "code\modules\research\designs\computer_part_designs.dm"
#include "code\modules\research\designs\electronics_designs.dm"
#include "code\modules\research\designs\equipment_designs.dm"
#include "code\modules\research\designs\limbgrower_designs.dm"
-#include "code\modules\research\designs\machine_desings\machine_designs_all_misc.dm"
-#include "code\modules\research\designs\machine_desings\machine_designs_cargo.dm"
-#include "code\modules\research\designs\machine_desings\machine_designs_engi.dm"
-#include "code\modules\research\designs\machine_desings\machine_designs_medical.dm"
-#include "code\modules\research\designs\machine_desings\machine_designs_sci.dm"
-#include "code\modules\research\designs\machine_desings\machine_designs_service.dm"
#include "code\modules\research\designs\mecha_designs.dm"
#include "code\modules\research\designs\mechfabricator_designs.dm"
#include "code\modules\research\designs\medical_designs.dm"
@@ -2537,6 +2525,18 @@
#include "code\modules\research\designs\autolathe_desings\autolathe_designs_sec_and_hacked.dm"
#include "code\modules\research\designs\autolathe_desings\autolathe_designs_tcomms_and_misc.dm"
#include "code\modules\research\designs\autolathe_desings\autolathe_designs_tools.dm"
+#include "code\modules\research\designs\comp_board_designs\comp_board_designs_all_misc.dm"
+#include "code\modules\research\designs\comp_board_designs\comp_board_designs_cargo .dm"
+#include "code\modules\research\designs\comp_board_designs\comp_board_designs_engi.dm"
+#include "code\modules\research\designs\comp_board_designs\comp_board_designs_medical.dm"
+#include "code\modules\research\designs\comp_board_designs\comp_board_designs_sci.dm"
+#include "code\modules\research\designs\comp_board_designs\comp_board_designs_sec.dm"
+#include "code\modules\research\designs\machine_desings\machine_designs_all_misc.dm"
+#include "code\modules\research\designs\machine_desings\machine_designs_cargo.dm"
+#include "code\modules\research\designs\machine_desings\machine_designs_engi.dm"
+#include "code\modules\research\designs\machine_desings\machine_designs_medical.dm"
+#include "code\modules\research\designs\machine_desings\machine_designs_sci.dm"
+#include "code\modules\research\designs\machine_desings\machine_designs_service.dm"
#include "code\modules\research\machinery\_production.dm"
#include "code\modules\research\machinery\circuit_imprinter.dm"
#include "code\modules\research\machinery\departmental_circuit_imprinter.dm"