diff --git a/aurorastation.dme b/aurorastation.dme
index 8d7cac106ba..727af03a786 100644
--- a/aurorastation.dme
+++ b/aurorastation.dme
@@ -1251,6 +1251,12 @@
#include "code\modules\client\preference_setup\loadout\loadout_uniform.dm"
#include "code\modules\client\preference_setup\loadout\loadout_utility.dm"
#include "code\modules\client\preference_setup\loadout\loadout_xeno.dm"
+#include "code\modules\client\preference_setup\loadout\loadout_xeno\human.dm"
+#include "code\modules\client\preference_setup\loadout\loadout_xeno\machine.dm"
+#include "code\modules\client\preference_setup\loadout\loadout_xeno\skrell.dm"
+#include "code\modules\client\preference_setup\loadout\loadout_xeno\tajara.dm"
+#include "code\modules\client\preference_setup\loadout\loadout_xeno\unathi.dm"
+#include "code\modules\client\preference_setup\loadout\loadout_xeno\vaurca.dm"
#include "code\modules\client\preference_setup\occupation\occupation.dm"
#include "code\modules\client\preference_setup\other\01_incidents.dm"
#include "code\modules\client\preference_setup\skills\skills.dm"
diff --git a/code/controllers/subsystems/job.dm b/code/controllers/subsystems/job.dm
index 8cdcaad1580..ea0d037b417 100644
--- a/code/controllers/subsystems/job.dm
+++ b/code/controllers/subsystems/job.dm
@@ -420,6 +420,9 @@
var/obj/item/clothing/glasses/G = H.glasses
G.prescription = TRUE
+ if(H.species)
+ H.species.equip_later_gear(H)
+
BITSET(H.hud_updateflag, ID_HUD)
BITSET(H.hud_updateflag, IMPLOYAL_HUD)
BITSET(H.hud_updateflag, SPECIALROLE_HUD)
@@ -557,6 +560,9 @@
G.prescription = TRUE
G.autodrobe_no_remove = TRUE
+ if(H.species)
+ H.species.equip_later_gear(H)
+
// So shoes aren't silent if people never change 'em.
H.update_noise_level()
@@ -754,7 +760,7 @@
Debug("EC/([H]): [thing] failed mask/suit/head check; leftovers=[!!leftovers]")
else if (H.equip_to_slot_or_del(CI, G.slot))
CI.autodrobe_no_remove = TRUE
- to_chat(H, "Equipping you with [thing]!")
+ to_chat(H, "Equipping you with [thing]!")
custom_equip_slots += G.slot
Debug("EC/([H]): Equipped [CI] successfully.")
else if (leftovers)
diff --git a/code/game/machinery/megavend.dm b/code/game/machinery/megavend.dm
index aefa7b06f5d..53ab9d02163 100644
--- a/code/game/machinery/megavend.dm
+++ b/code/game/machinery/megavend.dm
@@ -43,6 +43,8 @@
continue
if(W.autodrobe_no_remove)
continue
+ if(!W.canremove)
+ continue
H.drop_from_inventory(W,gearbox)
to_chat(H,"You feel a pleasant breeze as the autolocker whisks away all of your clothes, packing them neatly in a box.")
diff --git a/code/game/objects/items/weapons/storage/firstaid.dm b/code/game/objects/items/weapons/storage/firstaid.dm
index 464e7a4a380..04d5ddea405 100644
--- a/code/game/objects/items/weapons/storage/firstaid.dm
+++ b/code/game/objects/items/weapons/storage/firstaid.dm
@@ -319,3 +319,17 @@
new /obj/item/weapon/reagent_containers/pill/escitalopram( src )
new /obj/item/weapon/reagent_containers/pill/escitalopram( src )
new /obj/item/weapon/reagent_containers/pill/escitalopram( src )
+
+/obj/item/weapon/storage/pill_bottle/rtm
+ name = "bottle of RTM pills"
+ desc = "Contains pills used to remedy the effects of prolonged zero-gravity adaptations."
+
+/obj/item/weapon/storage/pill_bottle/rtm/fill()
+ ..()
+ new /obj/item/weapon/reagent_containers/pill/rmt(src)
+ new /obj/item/weapon/reagent_containers/pill/rmt(src)
+ new /obj/item/weapon/reagent_containers/pill/rmt(src)
+ new /obj/item/weapon/reagent_containers/pill/rmt(src)
+ new /obj/item/weapon/reagent_containers/pill/rmt(src)
+ new /obj/item/weapon/reagent_containers/pill/rmt(src)
+ new /obj/item/weapon/reagent_containers/pill/rmt(src)
\ No newline at end of file
diff --git a/code/modules/client/preference_setup/loadout/loadout_xeno.dm b/code/modules/client/preference_setup/loadout/loadout_xeno.dm
index 9dfc57b8ce9..81434313802 100644
--- a/code/modules/client/preference_setup/loadout/loadout_xeno.dm
+++ b/code/modules/client/preference_setup/loadout/loadout_xeno.dm
@@ -1,376 +1,3 @@
-//Catagories; Xenowear - Unathi / Xenowear - Tajara / Xenowear - Skrell / Xenowear - Vaurca / Xenowear - IPC / Xeno wear
-
-//unathi items
-
-/datum/gear/suit/unathi_mantle
- display_name = "hide mantle (Unathi)"
- path = /obj/item/clothing/suit/unathi/mantle
- cost = 1
- whitelisted = list("Unathi", "Aut'akh Unathi")
- sort_category = "Xenowear - Unathi"
-
-/datum/gear/suit/unathi_robe
- display_name = "roughspun robe (Unathi)"
- path = /obj/item/clothing/suit/unathi/robe
- cost = 1
- whitelisted = list("Unathi", "Aut'akh Unathi")
- sort_category = "Xenowear - Unathi"
-
-/datum/gear/suit/robe_coat
- display_name = "tzirzi robe (Unathi)"
- path = /obj/item/clothing/suit/unathi/robe/robe_coat
- cost = 1
- whitelisted = list("Unathi", "Aut'akh Unathi")
- sort_category = "Xenowear - Unathi"
-
-/datum/gear/gloves/unathi
- display_name = "gloves selection (Unathi)"
- path = /obj/item/clothing/gloves/black/unathi
- whitelisted = list("Unathi", "Aut'akh Unathi")
- sort_category = "Xenowear - Unathi"
-
-/datum/gear/gloves/unathi/New()
- ..()
- var/un_gloves = list()
- un_gloves["black gloves"] = /obj/item/clothing/gloves/black/unathi
- un_gloves["red gloves"] = /obj/item/clothing/gloves/red/unathi
- un_gloves["blue gloves"] = /obj/item/clothing/gloves/blue/unathi
- un_gloves["orange gloves"] = /obj/item/clothing/gloves/orange/unathi
- un_gloves["purple gloves"] = /obj/item/clothing/gloves/purple/unathi
- un_gloves["brown gloves"] = /obj/item/clothing/gloves/brown/unathi
- un_gloves["green gloves"] = /obj/item/clothing/gloves/green/unathi
- un_gloves["white gloves"] = /obj/item/clothing/gloves/white/unathi
- gear_tweaks += new/datum/gear_tweak/path(un_gloves)
-
-/datum/gear/uniform/unathi
- display_name = "sinta tunic (Unathi)"
- path = /obj/item/clothing/under/unathi
- whitelisted = list("Unathi", "Aut'akh Unathi")
- sort_category = "Xenowear - Unathi"
-
-/datum/gear/uniform/unathi/New()
- ..()
- gear_tweaks = list(gear_tweak_free_color_choice)
-
-/datum/gear/autakh_engineering
- display_name = "engineering grasper"
- description = "An Aut'akh augment limb, this one is outfitted with a limited toolkit."
- path = /obj/item/organ/external/hand/right/autakh/tool
- whitelisted = list("Aut'akh Unathi")
- sort_category = "Xenowear - Unathi"
- cost = 3
- allowed_roles = list("Station Engineer", "Chief Engineer", "Atmospheric Technician", "Engineering Apprentice", "Roboticist")
-
-/datum/gear/autakh_mining
- display_name = "mining grasper"
- description = "An Aut'akh augment limb, this one is outfitted with a mining drill."
- path = /obj/item/organ/external/hand/right/autakh/tool/mining
- whitelisted = list("Aut'akh Unathi")
- sort_category = "Xenowear - Unathi"
- cost = 3
- allowed_roles = list("Shaft Miner")
-
-/datum/gear/autakh_medical
- display_name = "medical grasper"
- description = "An Aut'akh augment limb, this one is outfitted with a health scanner."
- path = /obj/item/organ/external/hand/right/autakh/medical
- whitelisted = list("Aut'akh Unathi")
- sort_category = "Xenowear - Unathi"
- cost = 3
- allowed_roles = list("Chief Medical Officer", "Medical Doctor", "Paramedic", "Medical Resident", "Psychiatrist", "Chemist")
-
-/datum/gear/autakh_security
- display_name = "security grasper"
- description = "An Aut'akh augment limb, this one is outfitted with an electroshock weapon."
- path = /obj/item/organ/external/hand/right/autakh/security
- whitelisted = list("Aut'akh Unathi")
- sort_category = "Xenowear - Unathi"
- cost = 3
- allowed_roles = list("Security Officer", "Head of Security", "Warden")
-
-//skrell
-
-/datum/gear/ears/skrell/chains //Chains
- display_name = "headtail chain selection (Skrell)"
- path = /obj/item/clothing/ears/skrell/chain
- sort_category = "Xenowear - Skrell"
- whitelisted = list("Skrell")
-
-/datum/gear/ears/skrell/chains/New()
- ..()
- var/list/chaintypes = list()
- for(var/chain_style in typesof(/obj/item/clothing/ears/skrell/chain))
- var/obj/item/clothing/ears/skrell/chain/chain = chain_style
- chaintypes[initial(chain.name)] = chain
- gear_tweaks += new/datum/gear_tweak/path(sortAssoc(chaintypes))
-
-/datum/gear/ears/skrell/bands
- display_name = "headtail band selection (Skrell)"
- path = /obj/item/clothing/ears/skrell/band
- sort_category = "Xenowear - Skrell"
- whitelisted = list("Skrell")
-
-/datum/gear/ears/skrell/bands/New()
- ..()
- var/list/bandtypes = list()
- for(var/band_style in typesof(/obj/item/clothing/ears/skrell/band))
- var/obj/item/clothing/ears/skrell/band/band = band_style
- bandtypes[initial(band.name)] = band
- gear_tweaks += new/datum/gear_tweak/path(sortAssoc(bandtypes))
-
-/datum/gear/ears/skrell/cloth/short
- display_name = "short headtail cloth (Skrell)"
- path = /obj/item/clothing/ears/skrell/cloth_short/black
- sort_category = "Xenowear - Skrell"
- whitelisted = list("Skrell")
-
-/datum/gear/ears/skrell/cloth/short/New()
- ..()
- var/list/shorttypes = list()
- for(var/short_style in typesof(/obj/item/clothing/ears/skrell/cloth_short))
- var/obj/item/clothing/ears/skrell/cloth_short/short = short_style
- shorttypes[initial(short.name)] = short
- gear_tweaks += new/datum/gear_tweak/path(sortAssoc(shorttypes))
-
-/datum/gear/ears/skrell/cloth/average
- display_name = "average headtail cloth (Skrell)"
- path = /obj/item/clothing/ears/skrell/cloth_average/black
- sort_category = "Xenowear - Skrell"
- whitelisted = list("Skrell")
-
-/datum/gear/ears/skrell/cloth/average/New()
- ..()
- var/list/averagetypes = list()
- for(var/average_style in typesof(/obj/item/clothing/ears/skrell/cloth_average))
- var/obj/item/clothing/ears/skrell/cloth_average/average = average_style
- averagetypes[initial(average.name)] = average
- gear_tweaks += new/datum/gear_tweak/path(sortAssoc(averagetypes))
-
-/datum/gear/accessory/capes
- display_name = "shoulder capes (Skrell)"
- path = /obj/item/clothing/accessory/poncho/shouldercape
- whitelisted = list("Skrell")
- sort_category = "Xenowear - Skrell"
-
-/datum/gear/accessory/capes/New()
- ..()
- var/capes = list()
- capes["star cape"] = /obj/item/clothing/accessory/poncho/shouldercape/star
- capes["nebula cape"] = /obj/item/clothing/accessory/poncho/shouldercape/nebula
- capes["nova cape"] = /obj/item/clothing/accessory/poncho/shouldercape/nova
- capes["galaxy cape"] = /obj/item/clothing/accessory/poncho/shouldercape/galaxy
- gear_tweaks += new/datum/gear_tweak/path(capes)
-
-//vaurca items
-
-/datum/gear/eyes/blindfold
- display_name = "vaurca blindfold (Vaurca)"
- path = /obj/item/clothing/glasses/sunglasses/blinders
- cost = 2
- whitelisted = list("Vaurca Worker", "Vaurca Warrior")
- sort_category = "Xenowear - Vaurca"
-
-/datum/gear/mask/vaurca
- display_name = "mandible garment (Vaurca)"
- path = /obj/item/clothing/mask/breath/vaurca
- cost = 1
- whitelisted = list("Vaurca Worker", "Vaurca Warrior",)
- sort_category = "Xenowear - Vaurca"
-
-/datum/gear/mask/vaurca_expression
- display_name = "human expression mask (Vaurca)"
- path = /obj/item/clothing/mask/breath/vaurca/expression
- cost = 1
- whitelisted = list("Vaurca Worker", "Vaurca Warrior",)
- sort_category = "Xenowear - Vaurca"
-
-/datum/gear/mask/vaurca_expression/New()
- ..()
- gear_tweaks = list(gear_tweak_free_color_choice)
-
-/datum/gear/mask/vaurca_expression/skrell
- display_name = "skrell expression mask (Vaurca)"
- path = /obj/item/clothing/mask/breath/vaurca/expression/skrell
-
-/datum/gear/cape
- display_name = "tunnel cloak (Vaurca)"
- path = /obj/item/weapon/storage/backpack/cloak
- cost = 1
- whitelisted = list("Vaurca Worker", "Vaurca Warrior",)
- sort_category = "Xenowear - Vaurca"
-
-/datum/gear/vaurca_robe
- display_name = "hive cloak (Vaurca)"
- path = /obj/item/clothing/suit/vaurca
- cost = 1
- whitelisted = list("Vaurca Worker", "Vaurca Warrior",)
- sort_category = "Xenowear - Vaurca"
-
-/datum/gear/vaurca_robe/New()
- ..()
- var/cloaks = list()
- cloaks["hive cloak, red and golden"] = /obj/item/clothing/suit/vaurca
- cloaks["hive cloak, red and silver"] = /obj/item/clothing/suit/vaurca/silver
- cloaks["hive cloak, brown and silver"] = /obj/item/clothing/suit/vaurca/brown
- cloaks["hive cloak, blue and golden"] = /obj/item/clothing/suit/vaurca/blue
- gear_tweaks += new/datum/gear_tweak/path(cloaks)
-
-//tajara items
-
-/datum/gear/gloves/tajara
- display_name = "gloves selection (Tajara)"
- path = /obj/item/clothing/gloves/black/tajara
- whitelisted = list("Tajara", "Zhan-Khazan Tajara", "M'sai Tajara")
- sort_category = "Xenowear - Tajara"
-
-/datum/gear/gloves/tajara/New()
- ..()
- var/taj_gloves = list()
- taj_gloves["black gloves"] = /obj/item/clothing/gloves/black/tajara
- taj_gloves["red gloves"] = /obj/item/clothing/gloves/red/tajara
- taj_gloves["blue gloves"] = /obj/item/clothing/gloves/blue/tajara
- taj_gloves["orange gloves"] = /obj/item/clothing/gloves/orange/tajara
- taj_gloves["purple gloves"] = /obj/item/clothing/gloves/purple/tajara
- taj_gloves["brown gloves"] = /obj/item/clothing/gloves/brown/tajara
- taj_gloves["green gloves"] = /obj/item/clothing/gloves/green/tajara
- taj_gloves["white gloves"] = /obj/item/clothing/gloves/white/tajara
- gear_tweaks += new/datum/gear_tweak/path(taj_gloves)
-
-/datum/gear/suit/tajara_coat
- display_name = "tajara coat selection (Tajara)"
- path = /obj/item/clothing/suit/storage/tajaran
- whitelisted = list("Tajara", "Zhan-Khazan Tajara", "M'sai Tajara")
- sort_category = "Xenowear - Tajara"
-
-/datum/gear/suit/tajara_coat/New()
- ..()
- var/coat = list()
- coat["tajaran naval coat"] = /obj/item/clothing/suit/storage/tajaran
- coat["commoner cloak"] = /obj/item/clothing/suit/storage/tajaran/cloak
- coat["royal cloak"] = /obj/item/clothing/suit/storage/tajaran/cloak/fancy
- coat["gruff cloak"] = /obj/item/clothing/suit/storage/hooded/tajaran
- coat["adhomian wool coat"] = /obj/item/clothing/suit/storage/tajaran/nomad
- gear_tweaks += new/datum/gear_tweak/path(coat)
-
-/datum/gear/suit/tajara_priest
- display_name = "tajara priest robe selection (Tajara)"
- path = /obj/item/clothing/suit/storage/hooded/tajaran/priest
- whitelisted = list("Tajara", "Zhan-Khazan Tajara", "M'sai Tajara")
- sort_category = "Xenowear - Tajara"
-
-/datum/gear/suit/tajara_priest/New()
- ..()
- var/robes = list()
- robes["sun priest robe"] = /obj/item/clothing/suit/storage/hooded/tajaran/priest
- robes["sun sister robe"] = /obj/item/clothing/suit/storage/tajaran/messa
- gear_tweaks += new/datum/gear_tweak/path(robes)
-
-/datum/gear/suit/tajaran_labcoat
- display_name = "PRA medical coat (Tajara)"
- path = /obj/item/clothing/suit/storage/toggle/labcoat/tajaran
- whitelisted = list("Tajara", "Zhan-Khazan Tajara", "M'sai Tajara")
- allowed_roles = list("Chief Medical Officer", "Medical Doctor", "Chemist", "Geneticist", "Paramedic", "Medical Resident")
- sort_category = "Xenowear - Tajara"
-
-/datum/gear/uniform/tajara
- display_name = "tajaran uniform selection (Tajara)"
- path = /obj/item/clothing/under/tajaran
- whitelisted = list("Tajara", "Zhan-Khazan Tajara", "M'sai Tajara")
- sort_category = "Xenowear - Tajara"
-
-/datum/gear/uniform/tajara/New()
- ..()
- var/uniform = list()
- uniform["laborers clothes"] = /obj/item/clothing/under/tajaran
- uniform["fancy uniform"] = /obj/item/clothing/under/tajaran/fancy
- uniform["NanoTrasen overalls"] = /obj/item/clothing/under/tajaran/nt
- gear_tweaks += new/datum/gear_tweak/path(uniform)
-
-/datum/gear/uniform/tajara_dress
- display_name = "tajaran dress selection (Tajara)"
- path = /obj/item/clothing/under/dress/tajaran
- whitelisted = list("Tajara", "Zhan-Khazan Tajara", "M'sai Tajara")
- sort_category = "Xenowear - Tajara"
-
-/datum/gear/uniform/tajara_dress/New()
- ..()
- var/dress = list()
- dress["white fancy adhomian dress"] = /obj/item/clothing/under/dress/tajaran
- dress["blue fancy adhomian dress"] = /obj/item/clothing/under/dress/tajaran/blue
- dress["green fancy adhomian dress"] = /obj/item/clothing/under/dress/tajaran/green
- dress["red fancy adhomian dress"] = /obj/item/clothing/under/dress/tajaran/red
- dress["red noble adhomian dress"] = /obj/item/clothing/under/dress/tajaran/fancy
- dress["black noble adhomian dress"] = /obj/item/clothing/under/dress/tajaran/fancy/black
- gear_tweaks += new/datum/gear_tweak/path(dress)
-
-/datum/gear/accessory/tajara
- display_name = "fur scarf (Tajara)"
- path = /obj/item/clothing/accessory/tajaran
- whitelisted = list("Tajara", "Zhan-Khazan Tajara", "M'sai Tajara")
- sort_category = "Xenowear - Tajara"
-
-/datum/gear/accessory/tajara/New()
- ..()
- var/scarf = list()
- scarf["brown fur scarf"] = /obj/item/clothing/accessory/tajaran
- scarf["light brown fur scarf"] = /obj/item/clothing/accessory/tajaran/lbrown
- scarf["cinnamon fur scarf"] = /obj/item/clothing/accessory/tajaran/cinnamon
- scarf["blue fur scarf"] = /obj/item/clothing/accessory/tajaran/blue
- scarf["silver fur scarf"] = /obj/item/clothing/accessory/tajaran/silver
- scarf["black fur scarf"] = /obj/item/clothing/accessory/tajaran/black
- scarf["ruddy fur scarf"] = /obj/item/clothing/accessory/tajaran/ruddy
- scarf["orange fur scarf"] = /obj/item/clothing/accessory/tajaran/orange
- scarf["cream fur scarf"] = /obj/item/clothing/accessory/tajaran/cream
- gear_tweaks += new/datum/gear_tweak/path(scarf)
-
-/datum/gear/head/tajara
- display_name = "adhomian headgear selection (Tajara)"
- path = /obj/item/clothing/head/tajaran/circlet
- whitelisted = list("Tajara", "Zhan-Khazan Tajara", "M'sai Tajara")
- sort_category = "Xenowear - Tajara"
-
-/datum/gear/head/tajara/New()
- ..()
- var/circlet = list()
- circlet["golden dress circlet"] = /obj/item/clothing/head/tajaran/circlet
- circlet["silver dress circlet"] = /obj/item/clothing/head/tajaran/circlet/silver
- circlet["fur hat"] = /obj/item/clothing/head/tajaran/fur
- gear_tweaks += new/datum/gear_tweak/path(circlet)
-
-/datum/gear/accessory/tajara_wrap
- display_name = "marriage wrap (Tajara)"
- path = /obj/item/clothing/accessory/tajaran_wrap
- whitelisted = list("Tajara", "Zhan-Khazan Tajara", "M'sai Tajara")
- sort_category = "Xenowear - Tajara"
-
-/datum/gear/accessory/tajara_wrap/New()
- ..()
- var/wrap = list()
- wrap["marriage wrap, male"] = /obj/item/clothing/accessory/tajaran_wrap
- wrap["marriage wrap, female"] = /obj/item/clothing/accessory/tajaran_wrap/female
- gear_tweaks += new/datum/gear_tweak/path(wrap)
-
-/datum/gear/accessory/tajara_pelt
- display_name = "ceremonial pelt (Tajara)"
- path = /obj/item/clothing/accessory/tajaran_pelt
- whitelisted = list("Tajara", "Zhan-Khazan Tajara", "M'sai Tajara")
- sort_category = "Xenowear - Tajara"
-
-/datum/gear/mask/tajara
- display_name = "sun sister veil (Tajara)"
- path = /obj/item/clothing/mask/tajara
- cost = 1
- whitelisted = list("Tajara", "Zhan-Khazan Tajara", "M'sai Tajara")
- sort_category = "Xenowear - Tajara"
-
-/datum/gear/shoes/tajara
- display_name = "native tajaran foot-wear"
- path = /obj/item/clothing/shoes/tajara
- sort_category = "Xenowear - Tajara"
- whitelisted = list("Tajara", "Zhan-Khazan Tajara", "M'sai Tajara")
-
-//other things
-
/datum/gear/uniform/gearharness
display_name = "gear harness"
path = /obj/item/clothing/under/gearharness
@@ -410,89 +37,3 @@
caligae["white sock"] = /obj/item/clothing/shoes/caligae/white
caligae["leather"] = /obj/item/clothing/shoes/caligae/armor
gear_tweaks += new/datum/gear_tweak/path(caligae)
-
-//ipc stuff
-
-/datum/gear/head/goldenchains
- display_name = "golden deep headchains (Machine)"
- path = /obj/item/clothing/head/headchain
- cost = 1
- whitelisted = list("Baseline Frame", "Hephaestus G1 Industrial Frame", "Hephaestus G2 Industrial Frame", "Xion Industrial Frame", "Zeng-Hu Mobility Frame", "Bishop Accessory Frame", "Shell Frame")
- sort_category = "Xenowear - IPC"
-
-/datum/gear/head/goldenchains/New()
- ..()
- var/headchains = list()
- headchains["head chains, cobalt"] = /obj/item/clothing/head/headchain
- headchains["head chains, emerald"] = /obj/item/clothing/head/headchain/emerald
- headchains["head chains, ruby"] = /obj/item/clothing/head/headchain/ruby
- gear_tweaks += new/datum/gear_tweak/path(headchains)
-
-/datum/gear/head/goldencrests
- display_name = "golden deep crests (Machine)"
- path = /obj/item/clothing/head/crest
- cost = 1
- whitelisted = list("Baseline Frame", "Hephaestus G1 Industrial Frame", "Hephaestus G2 Industrial Frame", "Xion Industrial Frame", "Zeng-Hu Mobility Frame", "Bishop Accessory Frame", "Shell Frame")
- sort_category = "Xenowear - IPC"
-
-/datum/gear/head/goldencrests/New()
- ..()
- var/crest = list()
- crest["crest, cobalt"] = /obj/item/clothing/head/crest
- crest["crest, emerald"] = /obj/item/clothing/head/crest/emerald
- crest["crest, ruby"] = /obj/item/clothing/head/crest/ruby
- gear_tweaks += new/datum/gear_tweak/path(crest)
-
-/datum/gear/gloves/armchains
- display_name = "golden deep armchains (Machine)"
- path = /obj/item/clothing/gloves/armchain
- cost = 1
- whitelisted = list("Baseline Frame", "Hephaestus G1 Industrial Frame", "Hephaestus G2 Industrial Frame", "Xion Industrial Frame", "Zeng-Hu Mobility Frame", "Bishop Accessory Frame", "Shell Frame")
- sort_category = "Xenowear - IPC"
-
-/datum/gear/gloves/armchains/New()
- ..()
- var/armchains = list()
- armchains["arm chains, cobalt"] = /obj/item/clothing/gloves/armchain
- armchains["arm chains, emerald"] = /obj/item/clothing/gloves/armchain/emerald
- armchains["arm chains, ruby"] = /obj/item/clothing/gloves/armchain/ruby
- gear_tweaks += new/datum/gear_tweak/path(armchains)
-
-/datum/gear/gloves/bracers
- display_name = "golden deep bracers (Machine)"
- path = /obj/item/clothing/gloves/goldbracer
- cost = 1
- whitelisted = list("Baseline Frame", "Hephaestus G1 Industrial Frame", "Hephaestus G2 Industrial Frame", "Xion Industrial Frame", "Zeng-Hu Mobility Frame", "Bishop Accessory Frame", "Shell Frame")
- sort_category = "Xenowear - IPC"
-
-/datum/gear/gloves/bracers/New()
- ..()
- var/bracers = list()
- bracers["arm chains, cobalt"] = /obj/item/clothing/gloves/goldbracer
- bracers["arm chains, emerald"] = /obj/item/clothing/gloves/goldbracer/emerald
- bracers["arm chains, ruby"] = /obj/item/clothing/gloves/goldbracer/ruby
- gear_tweaks += new/datum/gear_tweak/path(bracers)
-
-/datum/gear/ears/antennae
- display_name = "antennae (Machine)"
- path = /obj/item/clothing/head/antenna
- cost = 1
- whitelisted = list("Baseline Frame", "Hephaestus G1 Industrial Frame", "Hephaestus G2 Industrial Frame", "Xion Industrial Frame", "Zeng-Hu Mobility Frame", "Bishop Accessory Frame", "Shell Frame")
- sort_category = "Xenowear - IPC"
-
-/datum/gear/ears/antennae/New()
- ..()
- var/antenna = list()
- antenna["antenna, curved"] = /obj/item/clothing/head/antenna
- antenna["antenna, straight"] = /obj/item/clothing/head/antenna/straight
- antenna["antenna, spiked"] = /obj/item/clothing/head/antenna/spiked
- antenna["antenna, side"] = /obj/item/clothing/head/antenna/side
- antenna["antenna, dish"] = /obj/item/clothing/head/antenna/dish
- gear_tweaks += new/datum/gear_tweak/path(antenna)
-
-/datum/gear/ears/headlights
- display_name = "headlights (Machine)"
- path = /obj/item/device/flashlight/headlights
- cost = 2
- whitelisted = list("Baseline Frame", "Hephaestus G1 Industrial Frame", "Hephaestus G2 Industrial Frame", "Xion Industrial Frame", "Zeng-Hu Mobility Frame", "Bishop Accessory Frame", "Shell Frame")
- sort_category = "Xenowear - IPC"
\ No newline at end of file
diff --git a/code/modules/client/preference_setup/loadout/loadout_xeno/human.dm b/code/modules/client/preference_setup/loadout/loadout_xeno/human.dm
new file mode 100644
index 00000000000..834afca5555
--- /dev/null
+++ b/code/modules/client/preference_setup/loadout/loadout_xeno/human.dm
@@ -0,0 +1,93 @@
+/datum/gear/uniform/offworlder
+ display_name = "CR suit"
+ path = /obj/item/clothing/under/offworlder
+ whitelisted = list("Off-Worlder Human")
+ sort_category = "Xenowear - Human"
+
+/datum/gear/uniform/offworlder/New()
+ ..()
+ gear_tweaks = list(gear_tweak_free_color_choice)
+
+/datum/gear/uniform/offworlder/dress
+ display_name = "CR dress"
+ path = /obj/item/clothing/under/offworlder
+
+/datum/gear/uniform/offworlder/skirt
+ display_name = "CR skirt"
+ path = /obj/item/clothing/under/dress/offworlder
+
+/datum/gear/eyes/glasses/offworlder
+ display_name = "starshades"
+ path = /obj/item/clothing/glasses/spiffygogs/offworlder
+ whitelisted = list("Off-Worlder Human")
+ sort_category = "Xenowear - Human"
+
+/datum/gear/eyes/glasses/offworlder/New()
+ ..()
+ gear_tweaks = list(gear_tweak_free_color_choice)
+
+/datum/gear/accessory/offworlder
+ display_name = "legbrace"
+ path = /obj/item/clothing/accessory/offworlder/bracer
+ whitelisted = list("Off-Worlder Human")
+ sort_category = "Xenowear - Human"
+
+/datum/gear/accessory/offworlder/New()
+ ..()
+ gear_tweaks = list(gear_tweak_free_color_choice)
+
+/datum/gear/accessory/offworlder/venter
+ display_name = "venter assembly"
+ path = /obj/item/clothing/accessory/offworlder
+
+/datum/gear/accessory/offworlder/neckbrace
+ display_name = "neckbrace"
+ path = /obj/item/clothing/accessory/offworlder/bracer/neckbrace
+
+/datum/gear/accessory/offworlder_armband
+ display_name = "exo-stellar ribbon selection"
+ path = /obj/item/clothing/accessory/armband/offworlder
+ whitelisted = list("Off-Worlder Human")
+ sort_category = "Xenowear - Human"
+
+/datum/gear/accessory/offworlder_armband/New()
+ ..()
+ var/armbands = list()
+ armbands["science exo-stellar ribbon"] = /obj/item/clothing/accessory/armband/offworlder
+ armbands["engineering exo-stellar ribbon"] = /obj/item/clothing/accessory/armband/offworlder/engineering
+ armbands["medical exo-stellar ribbon"] = /obj/item/clothing/accessory/armband/offworlder/medical
+ gear_tweaks += new/datum/gear_tweak/path(armbands)
+
+/datum/gear/mask/offworlder
+ display_name = "overmask"
+ path = /obj/item/clothing/mask/breath/offworlder
+ whitelisted = list("Off-Worlder Human")
+ sort_category = "Xenowear - Human"
+
+/datum/gear/mask/offworlder/New()
+ ..()
+ gear_tweaks = list(gear_tweak_free_color_choice)
+
+/datum/gear/mask/offworlder/veil
+ display_name = "starveil"
+ path = /obj/item/clothing/mask/offworlder/veil
+
+/datum/gear/mask/offworlder/veil/jagmask
+ display_name = "jagmask"
+ path = /obj/item/clothing/mask/breath/offworlder/jagmask
+
+/datum/gear/gloves/offworlder
+ display_name = "starmitts"
+ path = /obj/item/clothing/gloves/offworlder
+ whitelisted = list("Off-Worlder Human")
+ sort_category = "Xenowear - Human"
+
+/datum/gear/gloves/offworlder/New()
+ ..()
+ gear_tweaks = list(gear_tweak_free_color_choice)
+
+/datum/gear/offworlder_pills
+ display_name = "bottle of RTM pills"
+ path = /obj/item/weapon/storage/pill_bottle/rtm
+ whitelisted = list("Off-Worlder Human")
+ sort_category = "Xenowear - Human"
\ No newline at end of file
diff --git a/code/modules/client/preference_setup/loadout/loadout_xeno/machine.dm b/code/modules/client/preference_setup/loadout/loadout_xeno/machine.dm
new file mode 100644
index 00000000000..f925008e622
--- /dev/null
+++ b/code/modules/client/preference_setup/loadout/loadout_xeno/machine.dm
@@ -0,0 +1,83 @@
+/datum/gear/head/goldenchains
+ display_name = "golden deep headchains (Machine)"
+ path = /obj/item/clothing/head/headchain
+ cost = 1
+ whitelisted = list("Baseline Frame", "Hephaestus G1 Industrial Frame", "Hephaestus G2 Industrial Frame", "Xion Industrial Frame", "Zeng-Hu Mobility Frame", "Bishop Accessory Frame", "Shell Frame")
+ sort_category = "Xenowear - IPC"
+
+/datum/gear/head/goldenchains/New()
+ ..()
+ var/headchains = list()
+ headchains["head chains, cobalt"] = /obj/item/clothing/head/headchain
+ headchains["head chains, emerald"] = /obj/item/clothing/head/headchain/emerald
+ headchains["head chains, ruby"] = /obj/item/clothing/head/headchain/ruby
+ gear_tweaks += new/datum/gear_tweak/path(headchains)
+
+/datum/gear/head/goldencrests
+ display_name = "golden deep crests (Machine)"
+ path = /obj/item/clothing/head/crest
+ cost = 1
+ whitelisted = list("Baseline Frame", "Hephaestus G1 Industrial Frame", "Hephaestus G2 Industrial Frame", "Xion Industrial Frame", "Zeng-Hu Mobility Frame", "Bishop Accessory Frame", "Shell Frame")
+ sort_category = "Xenowear - IPC"
+
+/datum/gear/head/goldencrests/New()
+ ..()
+ var/crest = list()
+ crest["crest, cobalt"] = /obj/item/clothing/head/crest
+ crest["crest, emerald"] = /obj/item/clothing/head/crest/emerald
+ crest["crest, ruby"] = /obj/item/clothing/head/crest/ruby
+ gear_tweaks += new/datum/gear_tweak/path(crest)
+
+/datum/gear/gloves/armchains
+ display_name = "golden deep armchains (Machine)"
+ path = /obj/item/clothing/gloves/armchain
+ cost = 1
+ whitelisted = list("Baseline Frame", "Hephaestus G1 Industrial Frame", "Hephaestus G2 Industrial Frame", "Xion Industrial Frame", "Zeng-Hu Mobility Frame", "Bishop Accessory Frame", "Shell Frame")
+ sort_category = "Xenowear - IPC"
+
+/datum/gear/gloves/armchains/New()
+ ..()
+ var/armchains = list()
+ armchains["arm chains, cobalt"] = /obj/item/clothing/gloves/armchain
+ armchains["arm chains, emerald"] = /obj/item/clothing/gloves/armchain/emerald
+ armchains["arm chains, ruby"] = /obj/item/clothing/gloves/armchain/ruby
+ gear_tweaks += new/datum/gear_tweak/path(armchains)
+
+/datum/gear/gloves/bracers
+ display_name = "golden deep bracers (Machine)"
+ path = /obj/item/clothing/gloves/goldbracer
+ cost = 1
+ whitelisted = list("Baseline Frame", "Hephaestus G1 Industrial Frame", "Hephaestus G2 Industrial Frame", "Xion Industrial Frame", "Zeng-Hu Mobility Frame", "Bishop Accessory Frame", "Shell Frame")
+ sort_category = "Xenowear - IPC"
+
+/datum/gear/gloves/bracers/New()
+ ..()
+ var/bracers = list()
+ bracers["arm chains, cobalt"] = /obj/item/clothing/gloves/goldbracer
+ bracers["arm chains, emerald"] = /obj/item/clothing/gloves/goldbracer/emerald
+ bracers["arm chains, ruby"] = /obj/item/clothing/gloves/goldbracer/ruby
+ gear_tweaks += new/datum/gear_tweak/path(bracers)
+
+/datum/gear/ears/antennae
+ display_name = "antennae (Machine)"
+ path = /obj/item/clothing/head/antenna
+ cost = 1
+ whitelisted = list("Baseline Frame", "Hephaestus G1 Industrial Frame", "Hephaestus G2 Industrial Frame", "Xion Industrial Frame", "Zeng-Hu Mobility Frame", "Bishop Accessory Frame", "Shell Frame")
+ sort_category = "Xenowear - IPC"
+
+/datum/gear/ears/antennae/New()
+ ..()
+ var/antenna = list()
+ antenna["antenna, curved"] = /obj/item/clothing/head/antenna
+ antenna["antenna, straight"] = /obj/item/clothing/head/antenna/straight
+ antenna["antenna, spiked"] = /obj/item/clothing/head/antenna/spiked
+ antenna["antenna, side"] = /obj/item/clothing/head/antenna/side
+ antenna["antenna, dish"] = /obj/item/clothing/head/antenna/dish
+ gear_tweaks += new/datum/gear_tweak/path(antenna)
+
+/datum/gear/ears/headlights
+ display_name = "headlights (Machine)"
+ path = /obj/item/device/flashlight/headlights
+ cost = 2
+ whitelisted = list("Baseline Frame", "Hephaestus G1 Industrial Frame", "Hephaestus G2 Industrial Frame", "Xion Industrial Frame", "Zeng-Hu Mobility Frame", "Bishop Accessory Frame", "Shell Frame")
+ sort_category = "Xenowear - IPC"
\ No newline at end of file
diff --git a/code/modules/client/preference_setup/loadout/loadout_xeno/skrell.dm b/code/modules/client/preference_setup/loadout/loadout_xeno/skrell.dm
new file mode 100644
index 00000000000..589c190babe
--- /dev/null
+++ b/code/modules/client/preference_setup/loadout/loadout_xeno/skrell.dm
@@ -0,0 +1,70 @@
+/datum/gear/ears/skrell/chains //Chains
+ display_name = "headtail chain selection"
+ path = /obj/item/clothing/ears/skrell/chain
+ sort_category = "Xenowear - Skrell"
+ whitelisted = list("Skrell")
+
+/datum/gear/ears/skrell/chains/New()
+ ..()
+ var/list/chaintypes = list()
+ for(var/chain_style in typesof(/obj/item/clothing/ears/skrell/chain))
+ var/obj/item/clothing/ears/skrell/chain/chain = chain_style
+ chaintypes[initial(chain.name)] = chain
+ gear_tweaks += new/datum/gear_tweak/path(sortAssoc(chaintypes))
+
+/datum/gear/ears/skrell/bands
+ display_name = "headtail band selection"
+ path = /obj/item/clothing/ears/skrell/band
+ sort_category = "Xenowear - Skrell"
+ whitelisted = list("Skrell")
+
+/datum/gear/ears/skrell/bands/New()
+ ..()
+ var/list/bandtypes = list()
+ for(var/band_style in typesof(/obj/item/clothing/ears/skrell/band))
+ var/obj/item/clothing/ears/skrell/band/band = band_style
+ bandtypes[initial(band.name)] = band
+ gear_tweaks += new/datum/gear_tweak/path(sortAssoc(bandtypes))
+
+/datum/gear/ears/skrell/cloth/short
+ display_name = "short headtail cloth"
+ path = /obj/item/clothing/ears/skrell/cloth_short/black
+ sort_category = "Xenowear - Skrell"
+ whitelisted = list("Skrell")
+
+/datum/gear/ears/skrell/cloth/short/New()
+ ..()
+ var/list/shorttypes = list()
+ for(var/short_style in typesof(/obj/item/clothing/ears/skrell/cloth_short))
+ var/obj/item/clothing/ears/skrell/cloth_short/short = short_style
+ shorttypes[initial(short.name)] = short
+ gear_tweaks += new/datum/gear_tweak/path(sortAssoc(shorttypes))
+
+/datum/gear/ears/skrell/cloth/average
+ display_name = "average headtail cloth"
+ path = /obj/item/clothing/ears/skrell/cloth_average/black
+ sort_category = "Xenowear - Skrell"
+ whitelisted = list("Skrell")
+
+/datum/gear/ears/skrell/cloth/average/New()
+ ..()
+ var/list/averagetypes = list()
+ for(var/average_style in typesof(/obj/item/clothing/ears/skrell/cloth_average))
+ var/obj/item/clothing/ears/skrell/cloth_average/average = average_style
+ averagetypes[initial(average.name)] = average
+ gear_tweaks += new/datum/gear_tweak/path(sortAssoc(averagetypes))
+
+/datum/gear/accessory/capes
+ display_name = "shoulder capes"
+ path = /obj/item/clothing/accessory/poncho/shouldercape
+ whitelisted = list("Skrell")
+ sort_category = "Xenowear - Skrell"
+
+/datum/gear/accessory/capes/New()
+ ..()
+ var/capes = list()
+ capes["star cape"] = /obj/item/clothing/accessory/poncho/shouldercape/star
+ capes["nebula cape"] = /obj/item/clothing/accessory/poncho/shouldercape/nebula
+ capes["nova cape"] = /obj/item/clothing/accessory/poncho/shouldercape/nova
+ capes["galaxy cape"] = /obj/item/clothing/accessory/poncho/shouldercape/galaxy
+ gear_tweaks += new/datum/gear_tweak/path(capes)
diff --git a/code/modules/client/preference_setup/loadout/loadout_xeno/tajara.dm b/code/modules/client/preference_setup/loadout/loadout_xeno/tajara.dm
new file mode 100644
index 00000000000..67a9e2bd21e
--- /dev/null
+++ b/code/modules/client/preference_setup/loadout/loadout_xeno/tajara.dm
@@ -0,0 +1,151 @@
+/datum/gear/gloves/tajara
+ display_name = "gloves selection"
+ path = /obj/item/clothing/gloves/black/tajara
+ whitelisted = list("Tajara", "Zhan-Khazan Tajara", "M'sai Tajara")
+ sort_category = "Xenowear - Tajara"
+
+/datum/gear/gloves/tajara/New()
+ ..()
+ var/taj_gloves = list()
+ taj_gloves["black gloves"] = /obj/item/clothing/gloves/black/tajara
+ taj_gloves["red gloves"] = /obj/item/clothing/gloves/red/tajara
+ taj_gloves["blue gloves"] = /obj/item/clothing/gloves/blue/tajara
+ taj_gloves["orange gloves"] = /obj/item/clothing/gloves/orange/tajara
+ taj_gloves["purple gloves"] = /obj/item/clothing/gloves/purple/tajara
+ taj_gloves["brown gloves"] = /obj/item/clothing/gloves/brown/tajara
+ taj_gloves["green gloves"] = /obj/item/clothing/gloves/green/tajara
+ taj_gloves["white gloves"] = /obj/item/clothing/gloves/white/tajara
+ gear_tweaks += new/datum/gear_tweak/path(taj_gloves)
+
+/datum/gear/suit/tajara_coat
+ display_name = "tajara coat selection"
+ path = /obj/item/clothing/suit/storage/tajaran
+ whitelisted = list("Tajara", "Zhan-Khazan Tajara", "M'sai Tajara")
+ sort_category = "Xenowear - Tajara"
+
+/datum/gear/suit/tajara_coat/New()
+ ..()
+ var/coat = list()
+ coat["tajaran naval coat"] = /obj/item/clothing/suit/storage/tajaran
+ coat["commoner cloak"] = /obj/item/clothing/suit/storage/tajaran/cloak
+ coat["royal cloak"] = /obj/item/clothing/suit/storage/tajaran/cloak/fancy
+ coat["gruff cloak"] = /obj/item/clothing/suit/storage/hooded/tajaran
+ coat["adhomian wool coat"] = /obj/item/clothing/suit/storage/tajaran/nomad
+ gear_tweaks += new/datum/gear_tweak/path(coat)
+
+/datum/gear/suit/tajara_priest
+ display_name = "tajaran priest robe selection"
+ path = /obj/item/clothing/suit/storage/hooded/tajaran/priest
+ whitelisted = list("Tajara", "Zhan-Khazan Tajara", "M'sai Tajara")
+ sort_category = "Xenowear - Tajara"
+
+/datum/gear/suit/tajara_priest/New()
+ ..()
+ var/robes = list()
+ robes["sun priest robe"] = /obj/item/clothing/suit/storage/hooded/tajaran/priest
+ robes["sun sister robe"] = /obj/item/clothing/suit/storage/tajaran/messa
+ gear_tweaks += new/datum/gear_tweak/path(robes)
+
+/datum/gear/suit/tajaran_labcoat
+ display_name = "PRA medical coat)"
+ path = /obj/item/clothing/suit/storage/toggle/labcoat/tajaran
+ whitelisted = list("Tajara", "Zhan-Khazan Tajara", "M'sai Tajara")
+ allowed_roles = list("Chief Medical Officer", "Medical Doctor", "Chemist", "Geneticist", "Paramedic", "Medical Resident")
+ sort_category = "Xenowear - Tajara"
+
+/datum/gear/uniform/tajara
+ display_name = "tajaran uniform selection"
+ path = /obj/item/clothing/under/tajaran
+ whitelisted = list("Tajara", "Zhan-Khazan Tajara", "M'sai Tajara")
+ sort_category = "Xenowear - Tajara"
+
+/datum/gear/uniform/tajara/New()
+ ..()
+ var/uniform = list()
+ uniform["laborers clothes"] = /obj/item/clothing/under/tajaran
+ uniform["fancy uniform"] = /obj/item/clothing/under/tajaran/fancy
+ uniform["NanoTrasen overalls"] = /obj/item/clothing/under/tajaran/nt
+ gear_tweaks += new/datum/gear_tweak/path(uniform)
+
+/datum/gear/uniform/tajara_dress
+ display_name = "tajaran dress selection"
+ path = /obj/item/clothing/under/dress/tajaran
+ whitelisted = list("Tajara", "Zhan-Khazan Tajara", "M'sai Tajara")
+ sort_category = "Xenowear - Tajara"
+
+/datum/gear/uniform/tajara_dress/New()
+ ..()
+ var/dress = list()
+ dress["white fancy adhomian dress"] = /obj/item/clothing/under/dress/tajaran
+ dress["blue fancy adhomian dress"] = /obj/item/clothing/under/dress/tajaran/blue
+ dress["green fancy adhomian dress"] = /obj/item/clothing/under/dress/tajaran/green
+ dress["red fancy adhomian dress"] = /obj/item/clothing/under/dress/tajaran/red
+ dress["red noble adhomian dress"] = /obj/item/clothing/under/dress/tajaran/fancy
+ dress["black noble adhomian dress"] = /obj/item/clothing/under/dress/tajaran/fancy/black
+ gear_tweaks += new/datum/gear_tweak/path(dress)
+
+/datum/gear/accessory/tajara
+ display_name = "fur scarf"
+ path = /obj/item/clothing/accessory/tajaran
+ whitelisted = list("Tajara", "Zhan-Khazan Tajara", "M'sai Tajara")
+ sort_category = "Xenowear - Tajara"
+
+/datum/gear/accessory/tajara/New()
+ ..()
+ var/scarf = list()
+ scarf["brown fur scarf"] = /obj/item/clothing/accessory/tajaran
+ scarf["light brown fur scarf"] = /obj/item/clothing/accessory/tajaran/lbrown
+ scarf["cinnamon fur scarf"] = /obj/item/clothing/accessory/tajaran/cinnamon
+ scarf["blue fur scarf"] = /obj/item/clothing/accessory/tajaran/blue
+ scarf["silver fur scarf"] = /obj/item/clothing/accessory/tajaran/silver
+ scarf["black fur scarf"] = /obj/item/clothing/accessory/tajaran/black
+ scarf["ruddy fur scarf"] = /obj/item/clothing/accessory/tajaran/ruddy
+ scarf["orange fur scarf"] = /obj/item/clothing/accessory/tajaran/orange
+ scarf["cream fur scarf"] = /obj/item/clothing/accessory/tajaran/cream
+ gear_tweaks += new/datum/gear_tweak/path(scarf)
+
+/datum/gear/head/tajara
+ display_name = "adhomian headgear selection"
+ path = /obj/item/clothing/head/tajaran/circlet
+ whitelisted = list("Tajara", "Zhan-Khazan Tajara", "M'sai Tajara")
+ sort_category = "Xenowear - Tajara"
+
+/datum/gear/head/tajara/New()
+ ..()
+ var/circlet = list()
+ circlet["golden dress circlet"] = /obj/item/clothing/head/tajaran/circlet
+ circlet["silver dress circlet"] = /obj/item/clothing/head/tajaran/circlet/silver
+ circlet["fur hat"] = /obj/item/clothing/head/tajaran/fur
+ gear_tweaks += new/datum/gear_tweak/path(circlet)
+
+/datum/gear/accessory/tajara_wrap
+ display_name = "marriage wrap"
+ path = /obj/item/clothing/accessory/tajaran_wrap
+ whitelisted = list("Tajara", "Zhan-Khazan Tajara", "M'sai Tajara")
+ sort_category = "Xenowear - Tajara"
+
+/datum/gear/accessory/tajara_wrap/New()
+ ..()
+ var/wrap = list()
+ wrap["marriage wrap, male"] = /obj/item/clothing/accessory/tajaran_wrap
+ wrap["marriage wrap, female"] = /obj/item/clothing/accessory/tajaran_wrap/female
+ gear_tweaks += new/datum/gear_tweak/path(wrap)
+
+/datum/gear/accessory/tajara_pelt
+ display_name = "ceremonial pelt"
+ path = /obj/item/clothing/accessory/tajaran_pelt
+ whitelisted = list("Tajara", "Zhan-Khazan Tajara", "M'sai Tajara")
+ sort_category = "Xenowear - Tajara"
+
+/datum/gear/mask/tajara
+ display_name = "sun sister veil"
+ path = /obj/item/clothing/mask/tajara
+ cost = 1
+ whitelisted = list("Tajara", "Zhan-Khazan Tajara", "M'sai Tajara")
+ sort_category = "Xenowear - Tajara"
+
+/datum/gear/shoes/tajara
+ display_name = "native tajaran foot-wear"
+ path = /obj/item/clothing/shoes/tajara
+ sort_category = "Xenowear - Tajara"
+ whitelisted = list("Tajara", "Zhan-Khazan Tajara", "M'sai Tajara")
diff --git a/code/modules/client/preference_setup/loadout/loadout_xeno/unathi.dm b/code/modules/client/preference_setup/loadout/loadout_xeno/unathi.dm
new file mode 100644
index 00000000000..10ff863a791
--- /dev/null
+++ b/code/modules/client/preference_setup/loadout/loadout_xeno/unathi.dm
@@ -0,0 +1,85 @@
+/datum/gear/suit/unathi_mantle
+ display_name = "hide mantle"
+ path = /obj/item/clothing/suit/unathi/mantle
+ cost = 1
+ whitelisted = list("Unathi", "Aut'akh Unathi")
+ sort_category = "Xenowear - Unathi"
+
+/datum/gear/suit/unathi_robe
+ display_name = "roughspun robe"
+ path = /obj/item/clothing/suit/unathi/robe
+ cost = 1
+ whitelisted = list("Unathi", "Aut'akh Unathi")
+ sort_category = "Xenowear - Unathi"
+
+/datum/gear/suit/robe_coat
+ display_name = "tzirzi robe"
+ path = /obj/item/clothing/suit/unathi/robe/robe_coat
+ cost = 1
+ whitelisted = list("Unathi", "Aut'akh Unathi")
+ sort_category = "Xenowear - Unathi"
+
+/datum/gear/gloves/unathi
+ display_name = "gloves selection"
+ path = /obj/item/clothing/gloves/black/unathi
+ whitelisted = list("Unathi", "Aut'akh Unathi")
+ sort_category = "Xenowear - Unathi"
+
+/datum/gear/gloves/unathi/New()
+ ..()
+ var/un_gloves = list()
+ un_gloves["black gloves"] = /obj/item/clothing/gloves/black/unathi
+ un_gloves["red gloves"] = /obj/item/clothing/gloves/red/unathi
+ un_gloves["blue gloves"] = /obj/item/clothing/gloves/blue/unathi
+ un_gloves["orange gloves"] = /obj/item/clothing/gloves/orange/unathi
+ un_gloves["purple gloves"] = /obj/item/clothing/gloves/purple/unathi
+ un_gloves["brown gloves"] = /obj/item/clothing/gloves/brown/unathi
+ un_gloves["green gloves"] = /obj/item/clothing/gloves/green/unathi
+ un_gloves["white gloves"] = /obj/item/clothing/gloves/white/unathi
+ gear_tweaks += new/datum/gear_tweak/path(un_gloves)
+
+/datum/gear/uniform/unathi
+ display_name = "sinta tunic"
+ path = /obj/item/clothing/under/unathi
+ whitelisted = list("Unathi", "Aut'akh Unathi")
+ sort_category = "Xenowear - Unathi"
+
+/datum/gear/uniform/unathi/New()
+ ..()
+ gear_tweaks = list(gear_tweak_free_color_choice)
+
+/datum/gear/autakh_engineering
+ display_name = "engineering grasper"
+ description = "An Aut'akh augment limb, this one is outfitted with a limited toolkit."
+ path = /obj/item/organ/external/hand/right/autakh/tool
+ whitelisted = list("Aut'akh Unathi")
+ sort_category = "Xenowear - Unathi"
+ cost = 3
+ allowed_roles = list("Station Engineer", "Chief Engineer", "Atmospheric Technician", "Engineering Apprentice", "Roboticist")
+
+/datum/gear/autakh_mining
+ display_name = "mining grasper"
+ description = "An Aut'akh augment limb, this one is outfitted with a mining drill."
+ path = /obj/item/organ/external/hand/right/autakh/tool/mining
+ whitelisted = list("Aut'akh Unathi")
+ sort_category = "Xenowear - Unathi"
+ cost = 3
+ allowed_roles = list("Shaft Miner")
+
+/datum/gear/autakh_medical
+ display_name = "medical grasper"
+ description = "An Aut'akh augment limb, this one is outfitted with a health scanner."
+ path = /obj/item/organ/external/hand/right/autakh/medical
+ whitelisted = list("Aut'akh Unathi")
+ sort_category = "Xenowear - Unathi"
+ cost = 3
+ allowed_roles = list("Chief Medical Officer", "Medical Doctor", "Paramedic", "Medical Resident", "Psychiatrist", "Chemist")
+
+/datum/gear/autakh_security
+ display_name = "security grasper"
+ description = "An Aut'akh augment limb, this one is outfitted with an electroshock weapon."
+ path = /obj/item/organ/external/hand/right/autakh/security
+ whitelisted = list("Aut'akh Unathi")
+ sort_category = "Xenowear - Unathi"
+ cost = 3
+ allowed_roles = list("Security Officer", "Head of Security", "Warden")
\ No newline at end of file
diff --git a/code/modules/client/preference_setup/loadout/loadout_xeno/vaurca.dm b/code/modules/client/preference_setup/loadout/loadout_xeno/vaurca.dm
new file mode 100644
index 00000000000..2db8dd6348a
--- /dev/null
+++ b/code/modules/client/preference_setup/loadout/loadout_xeno/vaurca.dm
@@ -0,0 +1,51 @@
+/datum/gear/eyes/blindfold
+ display_name = "vaurca blindfold"
+ path = /obj/item/clothing/glasses/sunglasses/blinders
+ cost = 2
+ whitelisted = list("Vaurca Worker", "Vaurca Warrior")
+ sort_category = "Xenowear - Vaurca"
+
+/datum/gear/mask/vaurca
+ display_name = "mandible garment"
+ path = /obj/item/clothing/mask/breath/vaurca
+ cost = 1
+ whitelisted = list("Vaurca Worker", "Vaurca Warrior",)
+ sort_category = "Xenowear - Vaurca"
+
+/datum/gear/mask/vaurca_expression
+ display_name = "human expression mask"
+ path = /obj/item/clothing/mask/breath/vaurca/expression
+ cost = 1
+ whitelisted = list("Vaurca Worker", "Vaurca Warrior",)
+ sort_category = "Xenowear - Vaurca"
+
+/datum/gear/mask/vaurca_expression/New()
+ ..()
+ gear_tweaks = list(gear_tweak_free_color_choice)
+
+/datum/gear/mask/vaurca_expression/skrell
+ display_name = "skrell expression mask"
+ path = /obj/item/clothing/mask/breath/vaurca/expression/skrell
+
+/datum/gear/cape
+ display_name = "tunnel cloak"
+ path = /obj/item/weapon/storage/backpack/cloak
+ cost = 1
+ whitelisted = list("Vaurca Worker", "Vaurca Warrior",)
+ sort_category = "Xenowear - Vaurca"
+
+/datum/gear/vaurca_robe
+ display_name = "hive cloak"
+ path = /obj/item/clothing/suit/vaurca
+ cost = 1
+ whitelisted = list("Vaurca Worker", "Vaurca Warrior",)
+ sort_category = "Xenowear - Vaurca"
+
+/datum/gear/vaurca_robe/New()
+ ..()
+ var/cloaks = list()
+ cloaks["hive cloak, red and golden"] = /obj/item/clothing/suit/vaurca
+ cloaks["hive cloak, red and silver"] = /obj/item/clothing/suit/vaurca/silver
+ cloaks["hive cloak, brown and silver"] = /obj/item/clothing/suit/vaurca/brown
+ cloaks["hive cloak, blue and golden"] = /obj/item/clothing/suit/vaurca/blue
+ gear_tweaks += new/datum/gear_tweak/path(cloaks)
diff --git a/code/modules/clothing/glasses/glasses.dm b/code/modules/clothing/glasses/glasses.dm
index 38ade6555f3..ea1678a26e1 100644
--- a/code/modules/clothing/glasses/glasses.dm
+++ b/code/modules/clothing/glasses/glasses.dm
@@ -714,3 +714,19 @@ BLIND // can't see anything
to_chat(usr, "You push \the [src] up off your eyes.")
update_clothing_icon()
usr.update_action_buttons()
+
+/obj/item/clothing/glasses/spiffygogs/offworlder
+ name = "starshades"
+ desc = "Thick, durable eye protection meant to filter light to an acceptable degree in the long-term."
+ icon_state = "starshades"
+ item_state = "starshades"
+
+/obj/item/clothing/glasses/spiffygogs/offworlder/toggle()
+ ..()
+ if(!up)
+ flash_protection = FLASH_PROTECTION_MAJOR
+ tint = TINT_MODERATE
+
+ else
+ flash_protection = initial(flash_protection)
+ tint = initial(tint)
\ No newline at end of file
diff --git a/code/modules/clothing/gloves/miscellaneous.dm b/code/modules/clothing/gloves/miscellaneous.dm
index f0ef6e382a0..ae9f91f787e 100644
--- a/code/modules/clothing/gloves/miscellaneous.dm
+++ b/code/modules/clothing/gloves/miscellaneous.dm
@@ -285,4 +285,10 @@
punch_force = 10
clipped = 1
sharp = 1
- edge = 1
\ No newline at end of file
+ edge = 1
+
+/obj/item/clothing/gloves/offworlder
+ name = "starmitts"
+ desc = "Thick arm warmers and mittens that reach past the elbow."
+ icon_state = "starmittens"
+ item_state = "starmittens"
\ No newline at end of file
diff --git a/code/modules/clothing/masks/breath.dm b/code/modules/clothing/masks/breath.dm
index 6a1dbb2f593..98be93841a7 100644
--- a/code/modules/clothing/masks/breath.dm
+++ b/code/modules/clothing/masks/breath.dm
@@ -19,3 +19,15 @@
icon_state = "medical"
item_state = "medical"
permeability_coefficient = 0.01
+
+/obj/item/clothing/mask/breath/offworlder
+ name = "overmask"
+ desc = "A large breath mask with cushioning."
+ icon_state = "breathcover"
+ item_state = "breathcover"
+
+/obj/item/clothing/mask/breath/offworlder/jagmask
+ name = "jagmask"
+ desc = "A two-piece, jagged filtering mask meant to conform to one's face comfortably."
+ icon_state = "jagmask"
+ item_state = "jagmask"
\ No newline at end of file
diff --git a/code/modules/clothing/masks/miscellaneous.dm b/code/modules/clothing/masks/miscellaneous.dm
index 73cbd748046..179e6fc59a0 100644
--- a/code/modules/clothing/masks/miscellaneous.dm
+++ b/code/modules/clothing/masks/miscellaneous.dm
@@ -156,3 +156,13 @@
eye.owner.eyeobj = null
eye.owner = null
+
+/obj/item/clothing/mask/offworlder/veil
+ name = "starveil"
+ desc = "A thin holographic veil meant to cover the face, intended to block out light."
+ icon_state = "starveil"
+ item_state = "starveil"
+ w_class = 2
+ body_parts_covered = FACE
+ down_body_parts_covered = null
+ adjustable = TRUE
\ No newline at end of file
diff --git a/code/modules/clothing/spacesuits/rig/modules/utility.dm b/code/modules/clothing/spacesuits/rig/modules/utility.dm
index 61b389bb0ca..3eafc3a77b6 100644
--- a/code/modules/clothing/spacesuits/rig/modules/utility.dm
+++ b/code/modules/clothing/spacesuits/rig/modules/utility.dm
@@ -292,6 +292,19 @@
interface_name = "vaurca combat chem dispenser"
interface_desc = "Dispenses loaded chemicals directly into the bloodstream."
+/obj/item/rig_module/chem_dispenser/offworlder
+
+ name = "chemical injector"
+ desc = "A complex web of tubing and needles suitable for hardsuit use."
+
+ charges = list(
+ list("dexalin", "dexalin", 0, 5),
+ list("inaprovaline", "inaprovaline", 0, 5)
+ )
+
+ interface_name = "chem dispenser"
+ interface_desc = "Dispenses loaded chemicals directly into the bloodstream."
+
/obj/item/rig_module/chem_dispenser/injector
name = "mounted chemical injector"
@@ -741,3 +754,19 @@ var/global/list/lattice_users = list()
to_chat(H, "Neural lattice disengaged. Pain receptors restored.")
lattice_users.Remove(H)
+/obj/item/rig_module/vitalscanner
+ name = "integrated vitals tracker"
+ desc = "A hardsuit-mounted vitals tracker."
+ icon_state = "scanner"
+ interface_name = "vitals tracker"
+ interface_desc = "Shows an informative health readout of the user."
+ construction_cost = list("$glass" = 3250, DEFAULT_WALL_MATERIAL = 500)
+ construction_time = 100
+
+ usable = 1
+
+/obj/item/rig_module/healthscanner/engage()
+ if (!..())
+ return 0
+
+ health_scan_mob(holder.wearer, holder.wearer)
\ No newline at end of file
diff --git a/code/modules/clothing/spacesuits/rig/suits/light.dm b/code/modules/clothing/spacesuits/rig/suits/light.dm
index 54d0e498003..a85c27f0e85 100644
--- a/code/modules/clothing/spacesuits/rig/suits/light.dm
+++ b/code/modules/clothing/spacesuits/rig/suits/light.dm
@@ -140,3 +140,37 @@
/obj/item/rig_module/stealth_field,
/obj/item/rig_module/vision
)
+
+/obj/item/weapon/rig/light/offworlder
+ name = "exo-stellar skeleton module"
+ suit_type = "exo-stellar skeleton"
+ desc = "A compact exoskeleton that hugs the body tightly and has various inbuilt utilities for life support."
+ icon_state = "offworlder_rig"
+ allowed = list(/obj/item/weapon/tank, /obj/item/device/flashlight)
+ armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 5, rad = 5)
+ airtight = 0
+ seal_delay = 5
+
+ helm_type = /obj/item/clothing/head/lightrig/offworlder
+ chest_type = /obj/item/clothing/suit/lightrig/offworlder
+ glove_type = null
+ boot_type = null
+
+ initial_modules = list(
+ /obj/item/rig_module/vitalscanner,
+ /obj/item/rig_module/chem_dispenser/offworlder
+ )
+
+/obj/item/clothing/head/lightrig/offworlder
+ name = "helmet"
+ flags = 0
+ species_restricted = list("Human")
+
+/obj/item/clothing/suit/lightrig/offworlder
+ flags = 0
+ body_parts_covered = UPPER_TORSO
+ heat_protection = UPPER_TORSO
+ cold_protection = UPPER_TORSO
+ flags_inv = 0
+ species_restricted = list("Human")
+
diff --git a/code/modules/clothing/under/accessories/accessory.dm b/code/modules/clothing/under/accessories/accessory.dm
index cc726b881d4..2de5aac42a1 100644
--- a/code/modules/clothing/under/accessories/accessory.dm
+++ b/code/modules/clothing/under/accessories/accessory.dm
@@ -313,6 +313,12 @@
icon_state = "zebrascarf"
item_state = "zebrascarf"
+/obj/item/clothing/accessory/scarf/offworlder
+ name = "pioneer's scarf"
+ desc = "Usually a treasured item, these spider-silk scarves are seen passed down by generations of expeditionaries."
+ icon_state = "pioneer_scarf"
+ item_state = "pioneer_scarf"
+
/obj/item/clothing/accessory/chaps
name = "brown chaps"
desc = "A pair of loose, brown leather chaps."
@@ -545,3 +551,22 @@
desc = "Two small medallions, one worn on the shoulder and the other worn on the chest. Meant to display the rank of specialist troops in a Tau Ceti Foreign Legion."
icon_state = "specialist_medallion"
item_state = "specialist_medallion"
+
+/obj/item/clothing/accessory/offworlder
+ name = "venter assembly"
+ desc = "A series of complex tubing meant to dissipate heat from the skin passively."
+ icon_state = "venter"
+ item_state = "venter"
+ slot = "over"
+
+/obj/item/clothing/accessory/offworlder/bracer
+ name = "legbrace"
+ desc = "A lightweight polymer frame meant to brace and hold someone's legs upright comfortably."
+ icon_state = "legbrace"
+ item_state = "legbrace"
+
+/obj/item/clothing/accessory/offworlder/bracer/neckbrace
+ name = "neckbrace"
+ desc = "A lightweight polymer frame meant to brace and hold someone's neck upright comfortably."
+ icon_state = "neckbrace"
+ item_state = "neckbrace"
diff --git a/code/modules/clothing/under/accessories/armband.dm b/code/modules/clothing/under/accessories/armband.dm
index 2f8d14e29cc..e50f381d97d 100644
--- a/code/modules/clothing/under/accessories/armband.dm
+++ b/code/modules/clothing/under/accessories/armband.dm
@@ -48,3 +48,19 @@
name = "interstellar aid corps armband"
desc = "An armband denoting its wearer as a medical worker of the Interstellar Aid Corps. This one is white and blue."
icon_state = "iac"
+
+/obj/item/clothing/accessory/armband/offworlder
+ name = "science exo-stellar ribbon"
+ desc = "Durable cloth meant to be worn over or attached to the chest pieces of the ESS modules. This one is purple."
+ icon_state = "ribbon_sci"
+ slot = "over"
+
+/obj/item/clothing/accessory/armband/offworlder/engineering
+ name = "engineering exo-stellar ribbon"
+ desc = "Durable cloth meant to be worn over or attached to the chest pieces of the ESS modules. This one is orange with a reflective strip."
+ icon_state = "ribbon_engi"
+
+/obj/item/clothing/accessory/armband/offworlder/medical
+ name = "medical exo-stellar ribbon"
+ desc = "Durable cloth meant to be worn over or attached to the chest pieces of the ESS modules. This one is white and green."
+ icon_state = "ribbon_med"
\ No newline at end of file
diff --git a/code/modules/clothing/under/miscellaneous.dm b/code/modules/clothing/under/miscellaneous.dm
index e25d8e499f8..f993381a7f9 100644
--- a/code/modules/clothing/under/miscellaneous.dm
+++ b/code/modules/clothing/under/miscellaneous.dm
@@ -457,6 +457,12 @@
/obj/item/clothing/under/dress/blacktango/alt
icon_state = "black_tango_alt"
+/obj/item/clothing/under/dress/offworlder
+ name = "\improper CR dress"
+ desc = "A very tight form-fitting padded suit that looks extremely comfortable to wear. This variant seems to have a poofy skirt and longer sleeves than normal."
+ icon_state = "cr_dress"
+ item_state = "cr_dress"
+
/obj/item/clothing/under/captainformal
name = "captain's formal uniform"
desc = "A captain's formal-wear, for special occasions."
@@ -627,7 +633,7 @@
siemens_coefficient = 1
//swimsuit
-/obj/item/clothing/under/swimsuit/
+/obj/item/clothing/under/swimsuit
siemens_coefficient = 1
body_parts_covered = 0
@@ -704,4 +710,10 @@
icon_state = "taucetilegion"
item_state = "bl_suit"
worn_state = "taucetilegion"
- siemens_coefficient = 0.7
\ No newline at end of file
+ siemens_coefficient = 0.7
+
+/obj/item/clothing/under/offworlder
+ name = "\improper CR suit"
+ desc = "A very tight form-fitting padded suit that looks extremely comfortable to wear."
+ icon_state = "cr_suit"
+ item_state = "cr_suit"
\ No newline at end of file
diff --git a/code/modules/clothing/under/skirts.dm b/code/modules/clothing/under/skirts.dm
index 31812a9ef86..60df3319d32 100644
--- a/code/modules/clothing/under/skirts.dm
+++ b/code/modules/clothing/under/skirts.dm
@@ -1,6 +1,6 @@
//skirts
-/obj/item/clothing/under/skirt/
+/obj/item/clothing/under/skirt
name = "black skirt"
desc = "A black skirt, very fancy!"
icon_state = "blackskirt"
@@ -89,4 +89,10 @@
desc = "A piece of cloth wrapped around the waist."
icon_state = "loincloth"
item_state = "loincloth"
- worn_state = "loincloth"
\ No newline at end of file
+ worn_state = "loincloth"
+
+/obj/item/clothing/under/skirt/offworlder
+ name = "\improper CR skirt"
+ desc = "A very tight form-fitting padded suit that looks extremely comfortable to wear. This variant seems to have a poofy skirt and longer sleeves than normal."
+ icon_state = "cr_skirt"
+ item_state = "cr_skirt"
\ No newline at end of file
diff --git a/code/modules/mob/abstract/new_player/new_player.dm b/code/modules/mob/abstract/new_player/new_player.dm
index ce745d1ff23..2e66ce00c48 100644
--- a/code/modules/mob/abstract/new_player/new_player.dm
+++ b/code/modules/mob/abstract/new_player/new_player.dm
@@ -301,8 +301,6 @@ INITIALIZE_IMMEDIATE(/mob/abstract/new_player)
var/mob/living/character = create_character() //creates the human and transfers vars and mind
- character = SSjobs.EquipPersonal(character, rank, 1,spawning_at) //equips the human
-
UpdateFactionList(character)
// AIs don't need a spawnpoint, they must spawn at an empty core
@@ -326,6 +324,7 @@ INITIALIZE_IMMEDIATE(/mob/abstract/new_player)
//Find our spawning point.
var/join_message = SSjobs.LateSpawn(character, rank)
+ character = SSjobs.EquipPersonal(character, rank, 1,spawning_at) //equips the human
equip_custom_items(character)
character.lastarea = get_area(loc)
diff --git a/code/modules/mob/living/carbon/human/human_movement.dm b/code/modules/mob/living/carbon/human/human_movement.dm
index 610293325e5..a1bccadb758 100644
--- a/code/modules/mob/living/carbon/human/human_movement.dm
+++ b/code/modules/mob/living/carbon/human/human_movement.dm
@@ -22,6 +22,9 @@
if(wear_suit)
tally += wear_suit.slowdown
+ if(species)
+ tally += species.get_species_tally(src)
+
if(istype(buckled, /obj/structure/bed/chair/wheelchair))
for(var/organ_name in list("l_hand","r_hand","l_arm","r_arm"))
var/obj/item/organ/external/E = get_organ(organ_name)
diff --git a/code/modules/mob/living/carbon/human/species/species.dm b/code/modules/mob/living/carbon/human/species/species.dm
index 75fdc18554b..f8087f65601 100644
--- a/code/modules/mob/living/carbon/human/species/species.dm
+++ b/code/modules/mob/living/carbon/human/species/species.dm
@@ -73,6 +73,7 @@
var/fall_mod = 1 // Fall damage modifier, further modified by brute damage modifier
var/grab_mod = 1 // How easy it is to grab the species. Higher is harder to grab.
var/metabolism_mod = 1 // Reagent metabolism modifier
+ var/bleed_mod = 1 // How fast this species bleeds.
var/vision_flags = DEFAULT_SIGHT // Same flags as glasses.
var/inherent_eye_protection // If set, this species has this level of inherent eye protection.
@@ -538,3 +539,9 @@
H.h_style = H.species.default_h_style
H.f_style = H.species.default_f_style
H.update_hair()
+
+/datum/species/proc/get_species_tally(var/mob/living/carbon/human/H)
+ return 0
+
+/datum/species/proc/equip_later_gear(var/mob/living/carbon/human/H) //this handles anything not covered by survival gear, it is only called after everything else is equiped to the mob
+ return
\ No newline at end of file
diff --git a/code/modules/mob/living/carbon/human/species/station/human_subspecies.dm b/code/modules/mob/living/carbon/human/species/station/human_subspecies.dm
index c32a395e3cd..cb786daac3d 100644
--- a/code/modules/mob/living/carbon/human/species/station/human_subspecies.dm
+++ b/code/modules/mob/living/carbon/human/species/station/human_subspecies.dm
@@ -1,63 +1,79 @@
-/datum/species/human/gravworlder
- name = "Grav-Adapted Human"
- name_plural = "grav-adapted Humans"
- blurb = "Heavier and stronger than a baseline human, gravity-adapted people have \
- thick radiation-resistant skin with a high lead content, denser bones, and recessed \
- eyes beneath a prominent brow in order to shield them from the glare of a dangerously \
- bright, alien sun. This comes at the cost of mobility, flexibility, and increased \
- oxygen requirements to support their robust metabolism."
- icobase = 'icons/mob/human_races/subspecies/r_gravworlder.dmi'
+/datum/species/human/offworlder
+ name = "Off-Worlder Human"
+ name_plural = "off-worlders Humans"
+ blurb = "The Offworlders are humans that have adapted to zero-G conditions through a lifetime of conditioning, exposure, and physical modification. \
+ They thrive in thinner atmosphere and weightlessness, more often than not utilizing advanced life support and body-bracing equipment to sustain themselves in normal Human environments."
+ icobase = 'icons/mob/human_races/subspecies/r_offworlder.dmi'
+
+ flash_mod = 1.2
+ oxy_mod = 0.8
+ brute_mod = 1.2
+ toxins_mod = 1.2
+ bleed_mod = 0.5
+
+ warning_low_pressure = 30
+ hazard_low_pressure = 10
- flash_mod = 0.9
- oxy_mod = 1.1
- radiation_mod = 0.5
- brute_mod = 0.85
- slowdown = 1
-
spawn_flags = IS_RESTRICTED
-/datum/species/human/spacer
- name = "Space-Adapted Human"
- name_plural = "space-adapted Humans"
- blurb = "Lithe and frail, these sickly folk were engineered for work in environments that \
- lack both light and atmosphere. As such, they're quite resistant to asphyxiation as well as \
- toxins, but they suffer from weakened bone structure and a marked vulnerability to bright lights."
- icobase = 'icons/mob/human_races/subspecies/r_spacer.dmi'
+/datum/species/human/offworlder/equip_later_gear(var/mob/living/carbon/human/H)
+ if(H.back)
+ var/obj/item/I = H.back
+ H.unEquip(I)
+ H.put_in_hands(I)
- oxy_mod = 0.8
- toxins_mod = 0.9
- flash_mod = 1.2
- brute_mod = 1.1
- burn_mod = 1.1
-
- spawn_flags = IS_RESTRICTED
+ var/obj/item/weapon/rig/light/offworlder/skeleton = new(get_turf(H))
+ skeleton.autodrobe_no_remove = TRUE
+ H.equip_to_slot_or_del(skeleton,slot_back)
+ to_chat(H, "You have access to \the [skeleton], deploy it to allow you to walk properly.")
-/datum/species/human/vatgrown
- name = "Vat-Grown Human"
- name_plural = "vat-grown Humans"
- blurb = "With cloning on the forefront of human scientific advancement, cheap mass production \
- of bodies is a very real and rather ethically grey industry. Vat-grown humans tend to be paler than \
- baseline, with no appendix and fewer inherited genetic disabilities, but a weakened metabolism."
- icobase = 'icons/mob/human_races/subspecies/r_vatgrown.dmi'
+/datum/species/human/offworlder/get_species_tally(var/mob/living/carbon/human/H)
- toxins_mod = 1.1
- has_organ = list(
- "heart" = /obj/item/organ/heart,
- "lungs" = /obj/item/organ/lungs,
- "liver" = /obj/item/organ/liver,
- "kidneys" = /obj/item/organ/kidneys,
- "brain" = /obj/item/organ/brain,
- "eyes" = /obj/item/organ/eyes
- )
-
- spawn_flags = IS_RESTRICTED
+ if(istype(H.back, /obj/item/weapon/rig/light/offworlder))
+ var/obj/item/weapon/rig/light/offworlder/rig = H.back
+ if(!rig.offline)
+ return 0
+ else
+ return 3
-/*
-// These guys are going to need full resprites of all the suits/etc so I'm going to
-// define them and commit the sprites, but leave the clothing for another day.
-/datum/species/human/chimpanzee
- name = "Uplifted Chimpanzee"
- name_plural = "uplifted Chimpanzees"
- blurb = "Ook ook."
- icobase = 'icons/mob/human_races/subspecies/r_upliftedchimp.dmi'
-*/
+ if(H.w_uniform)
+ var/obj/item/clothing/under/suit = H.w_uniform
+ if(locate(/obj/item/clothing/accessory/offworlder/bracer) in suit.accessories)
+ return 0
+
+
+ if(H.reagents)
+ if(H.reagents.has_reagent("RMT", 1))
+ return 0
+
+ return 4
+
+/datum/species/human/offworlder/handle_environment_special(var/mob/living/carbon/human/H)
+ if(prob(5))
+ if(!H.can_feel_pain())
+ return
+
+ var/area/A = get_area(H)
+ if(A && !A.has_gravity())
+ return
+
+ if(istype(H.back, /obj/item/weapon/rig/light/offworlder))
+ var/obj/item/weapon/rig/light/offworlder/rig = H.back
+ if(!rig.offline)
+ return
+
+ if(H.w_uniform)
+ var/obj/item/clothing/under/uniform = H.w_uniform
+ if(locate(/obj/item/clothing/accessory/offworlder/bracer) in uniform.accessories)
+ return
+
+
+ if(H.reagents)
+ if(H.reagents.has_reagent("RMT", 1))
+ return
+
+ var/pain_message = pick("You feel sluggish as if something is weighing you down.",
+ "Your legs feel harder to move.",
+ "You begin to have trouble standing upright.")
+
+ to_chat(H, "[pain_message]")
\ No newline at end of file
diff --git a/code/modules/mob/living/carbon/human/species/station/station.dm b/code/modules/mob/living/carbon/human/species/station/station.dm
index ac4b3091243..f9d8dbcc44e 100644
--- a/code/modules/mob/living/carbon/human/species/station/station.dm
+++ b/code/modules/mob/living/carbon/human/species/station/station.dm
@@ -689,6 +689,7 @@ datum/species/machine/handle_post_spawn(var/mob/living/carbon/human/H)
toxins_mod = 2 //they're not used to all our weird human bacteria.
oxy_mod = 0.6
radiation_mod = 0.2 //almost total radiation protection
+ bleed_mod = 2.2
warning_low_pressure = 50
hazard_low_pressure = 0
ethanol_resistance = 2
diff --git a/code/modules/organs/blood.dm b/code/modules/organs/blood.dm
index 04d46229095..04dc3ba6e8e 100644
--- a/code/modules/organs/blood.dm
+++ b/code/modules/organs/blood.dm
@@ -128,16 +128,11 @@ var/const/BLOOD_VOLUME_SURVIVE = 122
for(var/obj/item/organ/external/temp in organs)
if(!(temp.status & ORGAN_BLEEDING) || temp.status & ORGAN_ROBOT)
continue
- if(isvaurca(src))
- for(var/datum/wound/W in temp.wounds) if(W.bleeding())
- blood_max += W.damage / 30
- if (temp.open)
- blood_max += 3 //Yer stomach is cut open
- else
- for(var/datum/wound/W in temp.wounds) if(W.bleeding())
- blood_max += W.damage / 40
- if (temp.open)
- blood_max += 2 //Yer stomach is cut open
+ for(var/datum/wound/W in temp.wounds)
+ if(W.bleeding())
+ blood_max += ((W.damage / 40) * species.bleed_mod)
+ if (temp.open)
+ blood_max += 2 * species.bleed_mod //Yer stomach is cut open
drip(blood_max)
//Makes a blood drop, leaking amt units of blood from the mob
diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Medicine.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Medicine.dm
index 7779f4dff02..9e130bddf74 100644
--- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Medicine.dm
+++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Medicine.dm
@@ -1387,3 +1387,12 @@
/datum/reagent/pacifier/affect_blood(var/mob/living/carbon/H, var/alien, var/removed)
H.add_chemical_effect(CE_PACIFIED, 1)
+/datum/reagent/rmt
+ name = "Regenerative-Muscular Tissue Supplements"
+ id = "RMT"
+ description = "A chemical rampantly used by those seeking to remedy the effects of prolonged zero-gravity adaptations."
+ reagent_state = LIQUID
+ color = "#AA8866"
+ metabolism = 0.5 * REM
+ taste_description = "sourness"
+ fallback_specific_heat = 1
\ No newline at end of file
diff --git a/code/modules/reagents/Chemistry-Recipes.dm b/code/modules/reagents/Chemistry-Recipes.dm
index 9f201a995c6..66302151e29 100644
--- a/code/modules/reagents/Chemistry-Recipes.dm
+++ b/code/modules/reagents/Chemistry-Recipes.dm
@@ -3147,3 +3147,10 @@
result = "venenum"
result_amount = 1
required_reagents = list("phoron_salt" = 1, "ryetalyn" = 1)
+
+/datum/chemical_reaction/rmt
+ name = "RMT"
+ id = "rmt"
+ result = "rmt"
+ result_amount = 1
+ required_reagents = list("potassium" = 1, "inaprovaline" = 1)
\ No newline at end of file
diff --git a/code/modules/reagents/reagent_containers/pill.dm b/code/modules/reagents/reagent_containers/pill.dm
index 364224f066f..cbc7794e588 100644
--- a/code/modules/reagents/reagent_containers/pill.dm
+++ b/code/modules/reagents/reagent_containers/pill.dm
@@ -261,3 +261,12 @@
reagents.add_reagent("nutriment", 20)
reagents.add_reagent(pick("banana","berryjuice","grapejuice","lemonjuice","limejuice","orangejuice","watermelonjuice"),1)
//Would be absolutely retarded to grind the biogenerator for juices.
+
+/obj/item/weapon/reagent_containers/pill/rmt
+ name = "RMT pill"
+ desc = "Contains chemical rampantly used by those seeking to remedy the effects of prolonged zero-gravity adaptations."
+ icon_state = "pill19"
+
+/obj/item/weapon/reagent_containers/pill/rmt/Initialize()
+ . = ..()
+ reagents.add_reagent("rmt", 15)
\ No newline at end of file
diff --git a/html/changelogs/alberyk-hoomans.yml b/html/changelogs/alberyk-hoomans.yml
new file mode 100644
index 00000000000..6e26d7f3b0f
--- /dev/null
+++ b/html/changelogs/alberyk-hoomans.yml
@@ -0,0 +1,6 @@
+author: Alberyk, Kyres1
+
+delete-after: True
+
+changes:
+ - rscadd: "Added Off-Worlder Humans."
diff --git a/icons/mob/eyes.dmi b/icons/mob/eyes.dmi
index 716007cc4e0..e09c4a5d1ec 100644
Binary files a/icons/mob/eyes.dmi and b/icons/mob/eyes.dmi differ
diff --git a/icons/mob/hands.dmi b/icons/mob/hands.dmi
index 865aba72f69..b6f7536993d 100644
Binary files a/icons/mob/hands.dmi and b/icons/mob/hands.dmi differ
diff --git a/icons/mob/head.dmi b/icons/mob/head.dmi
index d886f1c1d2a..d8810555141 100644
Binary files a/icons/mob/head.dmi and b/icons/mob/head.dmi differ
diff --git a/icons/mob/human_races/subspecies/r_offworlder.dmi b/icons/mob/human_races/subspecies/r_offworlder.dmi
new file mode 100644
index 00000000000..c01633c909e
Binary files /dev/null and b/icons/mob/human_races/subspecies/r_offworlder.dmi differ
diff --git a/icons/mob/mask.dmi b/icons/mob/mask.dmi
index 70bd0bc79f4..296f02cd302 100644
Binary files a/icons/mob/mask.dmi and b/icons/mob/mask.dmi differ
diff --git a/icons/mob/rig_back.dmi b/icons/mob/rig_back.dmi
index 7f642d652e7..1acf6115a5e 100644
Binary files a/icons/mob/rig_back.dmi and b/icons/mob/rig_back.dmi differ
diff --git a/icons/mob/suit.dmi b/icons/mob/suit.dmi
index b655e8b510c..b46815d3c59 100644
Binary files a/icons/mob/suit.dmi and b/icons/mob/suit.dmi differ
diff --git a/icons/mob/ties.dmi b/icons/mob/ties.dmi
index c1bb574b12c..afaa9432dd7 100644
Binary files a/icons/mob/ties.dmi and b/icons/mob/ties.dmi differ
diff --git a/icons/mob/uniform.dmi b/icons/mob/uniform.dmi
index 54d259f323d..88fa4b63e3a 100644
Binary files a/icons/mob/uniform.dmi and b/icons/mob/uniform.dmi differ
diff --git a/icons/obj/clothing/glasses.dmi b/icons/obj/clothing/glasses.dmi
index fa617df99bc..8066058f86a 100644
Binary files a/icons/obj/clothing/glasses.dmi and b/icons/obj/clothing/glasses.dmi differ
diff --git a/icons/obj/clothing/gloves.dmi b/icons/obj/clothing/gloves.dmi
index c76458f76e6..293247b7eab 100644
Binary files a/icons/obj/clothing/gloves.dmi and b/icons/obj/clothing/gloves.dmi differ
diff --git a/icons/obj/clothing/hats.dmi b/icons/obj/clothing/hats.dmi
index 1c425ff2a98..db3ee1be7d3 100644
Binary files a/icons/obj/clothing/hats.dmi and b/icons/obj/clothing/hats.dmi differ
diff --git a/icons/obj/clothing/masks.dmi b/icons/obj/clothing/masks.dmi
index 52af5fcb6b3..5303ae46808 100644
Binary files a/icons/obj/clothing/masks.dmi and b/icons/obj/clothing/masks.dmi differ
diff --git a/icons/obj/clothing/suits.dmi b/icons/obj/clothing/suits.dmi
index 80b1ef613fe..71010049f7f 100644
Binary files a/icons/obj/clothing/suits.dmi and b/icons/obj/clothing/suits.dmi differ
diff --git a/icons/obj/clothing/ties.dmi b/icons/obj/clothing/ties.dmi
index 4c03829d3d1..c9dc54672ea 100644
Binary files a/icons/obj/clothing/ties.dmi and b/icons/obj/clothing/ties.dmi differ
diff --git a/icons/obj/clothing/uniforms.dmi b/icons/obj/clothing/uniforms.dmi
index 02600d1e5f5..6487e8b4192 100644
Binary files a/icons/obj/clothing/uniforms.dmi and b/icons/obj/clothing/uniforms.dmi differ
diff --git a/icons/obj/rig_modules.dmi b/icons/obj/rig_modules.dmi
index 71d384a00b5..bd38a8a6b02 100644
Binary files a/icons/obj/rig_modules.dmi and b/icons/obj/rig_modules.dmi differ