$}ePoc-DRvp;+9
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
From 073684b7bc396cdd3f851fd0dcba930e49ad6738 Mon Sep 17 00:00:00 2001
From: Trilbyspaceclone <30435998+Trilbyspaceclone@users.noreply.github.com>
Date: Tue, 23 Apr 2019 02:30:55 -0400
Subject: [PATCH 067/247] As Kev requested
---
code/modules/antagonists/blob/blob/blobs/shield.dm | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/code/modules/antagonists/blob/blob/blobs/shield.dm b/code/modules/antagonists/blob/blob/blobs/shield.dm
index fef3c3ab85..570080aecc 100644
--- a/code/modules/antagonists/blob/blob/blobs/shield.dm
+++ b/code/modules/antagonists/blob/blob/blobs/shield.dm
@@ -8,7 +8,7 @@
explosion_block = 3
point_return = 4
atmosblock = TRUE
- armor = list("melee" = 15, "bullet" = 15, "laser" = 5, "energy" = 0, "bomb" = 20, "bio" = 0, "rad" = 0, "fire" = 90, "acid" = 90)
+ armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 20, "bio" = 0, "rad" = 0, "fire" = 90, "acid" = 90)
/obj/structure/blob/shield/scannerreport()
if(atmosblock)
From 415461d7360d717cb2a8815af4c6a32c9999b395 Mon Sep 17 00:00:00 2001
From: Trilbyspaceclone <30435998+Trilbyspaceclone@users.noreply.github.com>
Date: Tue, 23 Apr 2019 02:32:07 -0400
Subject: [PATCH 068/247] Forgot bomb armor
---
code/modules/antagonists/blob/blob/blobs/shield.dm | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/code/modules/antagonists/blob/blob/blobs/shield.dm b/code/modules/antagonists/blob/blob/blobs/shield.dm
index 570080aecc..a83f4294b2 100644
--- a/code/modules/antagonists/blob/blob/blobs/shield.dm
+++ b/code/modules/antagonists/blob/blob/blobs/shield.dm
@@ -8,7 +8,7 @@
explosion_block = 3
point_return = 4
atmosblock = TRUE
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 20, "bio" = 0, "rad" = 0, "fire" = 90, "acid" = 90)
+ armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 90, "acid" = 90)
/obj/structure/blob/shield/scannerreport()
if(atmosblock)
From 1aa312822a427ce5ea2bd607847232b6b341ac9c Mon Sep 17 00:00:00 2001
From: Trilbyspaceclone <30435998+Trilbyspaceclone@users.noreply.github.com>
Date: Tue, 23 Apr 2019 02:34:14 -0400
Subject: [PATCH 069/247] Sure
---
code/modules/cargo/exports/large_objects.dm | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/code/modules/cargo/exports/large_objects.dm b/code/modules/cargo/exports/large_objects.dm
index 339ce8998f..b5f0e7a240 100644
--- a/code/modules/cargo/exports/large_objects.dm
+++ b/code/modules/cargo/exports/large_objects.dm
@@ -198,7 +198,7 @@
include_subtypes = FALSE
/datum/export/large/reticence
- cost = 120000 //Still a "Combat class" mech - Has cloking and lethal weaponds. Admin spawn for admin credits!
+ cost = 12000 //Still a "Combat class" mech - Has cloking and lethal weaponds.
unit_name = "working reticence"
export_types = list(/obj/mecha/combat/reticence)
include_subtypes = FALSE
@@ -210,7 +210,7 @@
include_subtypes = FALSE
/datum/export/large/mauler
- cost = 120000 //Still a Combat class mech - CC lethal weaponds. Admin spawn for admin credits!
+ cost = 12000 //Still a Combat class mech - CC lethal weaponds.
unit_name = "working legally modified marauder"
export_types = list(/obj/mecha/combat/marauder/mauler)
include_subtypes = FALSE
From d05afafcd1d3424779dbff377a025bd57788e241 Mon Sep 17 00:00:00 2001
From: BurgerLua
Date: Mon, 22 Apr 2019 23:40:34 -0700
Subject: [PATCH 070/247] Unironically removes the race change event
---
tgstation.dme | 1 -
1 file changed, 1 deletion(-)
diff --git a/tgstation.dme b/tgstation.dme
index 5b4c4eabe5..de0ef8686f 100755
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -1596,7 +1596,6 @@
#include "code\modules\events\wizard\lava.dm"
#include "code\modules\events\wizard\magicarp.dm"
#include "code\modules\events\wizard\petsplosion.dm"
-#include "code\modules\events\wizard\race.dm"
#include "code\modules\events\wizard\rpgloot.dm"
#include "code\modules\events\wizard\shuffle.dm"
#include "code\modules\events\wizard\summons.dm"
From dbdd37430ab2a215eb25e439ff82f937ed0763b1 Mon Sep 17 00:00:00 2001
From: Trilbyspaceclone <30435998+Trilbyspaceclone@users.noreply.github.com>
Date: Tue, 23 Apr 2019 02:42:18 -0400
Subject: [PATCH 071/247] Kev requests...
---
code/modules/mining/machine_vending.dm | 26 ++++++++++++++++++++++++--
1 file changed, 24 insertions(+), 2 deletions(-)
diff --git a/code/modules/mining/machine_vending.dm b/code/modules/mining/machine_vending.dm
index 33be3c158d..01c749d24d 100644
--- a/code/modules/mining/machine_vending.dm
+++ b/code/modules/mining/machine_vending.dm
@@ -46,7 +46,6 @@
new /datum/data/mining_equipment("Mining Conscription Kit", /obj/item/storage/backpack/duffelbag/mining_conscript, 1000),
new /datum/data/mining_equipment("1000 Point Transfer Card", /obj/item/card/mining_point_card/mp1000, 1000),
new /datum/data/mining_equipment("1500 Point Transfer Card", /obj/item/card/mining_point_card/mp1500, 1500),
- new /datum/data/mining_equipment("Spare Suit Voucher", /obj/item/suit_voucher, 1500),
new /datum/data/mining_equipment("2000 Point Transfer Card", /obj/item/card/mining_point_card/mp2000, 2000),
new /datum/data/mining_equipment("Jetpack Upgrade", /obj/item/tank/jetpack/suit, 2000),
new /datum/data/mining_equipment("Space Cash", /obj/item/stack/spacecash/c1000, 2000),
@@ -69,7 +68,9 @@
new /datum/data/mining_equipment("KA Damage Increase", /obj/item/borg/upgrade/modkit/damage, 1000),
new /datum/data/mining_equipment("KA Cooldown Decrease", /obj/item/borg/upgrade/modkit/cooldown, 1000),
new /datum/data/mining_equipment("KA AoE Damage", /obj/item/borg/upgrade/modkit/aoe/mobs, 2000),
- new /datum/data/mining_equipment("Premium Accelerator", /obj/item/gun/energy/kinetic_accelerator/premiumka, 8000)
+ new /datum/data/mining_equipment("Spare Suit Voucher", /obj/item/suit_voucher, 6000),
+ new /datum/data/mining_equipment("Premium Accelerator", /obj/item/gun/energy/kinetic_accelerator/premiumka, 8000),
+ new /datum/data/mining_equipment("Miner Full Replacement", /obj/item/storage/backpack/duffelbag/mining_cloned, 10000),
)
@@ -326,6 +327,27 @@
//CITADEL ADDITIONS BELOW
+/obj/item/storage/backpack/duffelbag/mining_cloned
+ name = "mining replacement kit"
+ desc = "A large bag that has advance tools and a spare jumpsuit, boots, and gloves for a newly cloned miner to get back in the field. Even as a new Id!"
+
+/obj/item/storage/backpack/duffelbag/mining_cloned/PopulateContents()
+ new /obj/item/pickaxe/mini(src)
+ new /obj/item/clothing/under/rank/miner/lavaland(src)
+ new /obj/item/clothing/shoes/workboots/mining(src)
+ new /obj/item/clothing/gloves/color/black(src)
+ new /obj/item/implanter/tracking/gps(src)
+ new /obj/item/kitchen/knife/combat/survival(src)
+ new /obj/item/storage/firstaid/regular(src)
+ new /obj/item/reagent_containers/hypospray/medipen/survival(src)
+ new /obj/item/t_scanner/adv_mining_scanner(src)
+ new /obj/item/clothing/suit/hooded/explorer(src)
+ new /obj/item/encryptionkey/headset_cargo(src)
+ new /obj/item/clothing/mask/gas/explorer(src)
+ new /obj/item/card/id/mining(src)
+ new /obj/item/storage/bag/ore(src)
+ new /obj/item/clothing/glasses/meson/prescription(src)
+
/obj/machinery/mineral/equipment_vendor/proc/RedeemSVoucher(obj/item/suit_voucher/voucher, mob/redeemer)
var/items = list("Exo-suit", "SEVA suit")
From 31f3a167778ddf49056bd1431c038803e44c74a5 Mon Sep 17 00:00:00 2001
From: Trilbyspaceclone <30435998+Trilbyspaceclone@users.noreply.github.com>
Date: Tue, 23 Apr 2019 02:43:23 -0400
Subject: [PATCH 072/247] *No gps*
---
code/modules/mining/machine_vending.dm | 1 -
1 file changed, 1 deletion(-)
diff --git a/code/modules/mining/machine_vending.dm b/code/modules/mining/machine_vending.dm
index 01c749d24d..ab6d48fa2a 100644
--- a/code/modules/mining/machine_vending.dm
+++ b/code/modules/mining/machine_vending.dm
@@ -33,7 +33,6 @@
new /datum/data/mining_equipment("Jaunter", /obj/item/wormhole_jaunter, 750),
new /datum/data/mining_equipment("Kinetic Crusher", /obj/item/twohanded/required/kinetic_crusher, 750),
new /datum/data/mining_equipment("Kinetic Accelerator", /obj/item/gun/energy/kinetic_accelerator, 750),
- new /datum/data/mining_equipment("GPS implanter", /obj/item/implanter/tracking/gps, 750),
new /datum/data/mining_equipment("Brute First-Aid Kit", /obj/item/storage/firstaid/brute, 800),
new /datum/data/mining_equipment("Burn First-Aid Kit", /obj/item/storage/firstaid/fire, 800),
new /datum/data/mining_equipment("First-Aid Kit", /obj/item/storage/firstaid/regular, 800),
From 139024566fbaff21409e4223478abe3627ab0058 Mon Sep 17 00:00:00 2001
From: Trilbyspaceclone <30435998+Trilbyspaceclone@users.noreply.github.com>
Date: Tue, 23 Apr 2019 03:15:46 -0400
Subject: [PATCH 073/247] Update shield.dm
---
code/modules/antagonists/blob/blob/blobs/shield.dm | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/code/modules/antagonists/blob/blob/blobs/shield.dm b/code/modules/antagonists/blob/blob/blobs/shield.dm
index a83f4294b2..d52c208c71 100644
--- a/code/modules/antagonists/blob/blob/blobs/shield.dm
+++ b/code/modules/antagonists/blob/blob/blobs/shield.dm
@@ -8,7 +8,7 @@
explosion_block = 3
point_return = 4
atmosblock = TRUE
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 90, "acid" = 90)
+ armor = list("melee" = 25, "bullet" = 25, "laser" = 15, "energy" = 10, "bomb" = 20, "bio" = 0, "rad" = 0, "fire" = 90, "acid" = 90)
/obj/structure/blob/shield/scannerreport()
if(atmosblock)
@@ -20,11 +20,12 @@
/obj/structure/blob/shield/update_icon()
..()
- if(obj_integrity <= 75)
+ if(obj_integrity <= 70)
icon_state = "blob_shield_damaged"
name = "weakened strong blob"
desc = "A wall of twitching tendrils."
atmosblock = FALSE
+ armor = list("melee" = 15, "bullet" = 15, "laser" = 5, "energy" = 0, "bomb" = 10, "bio" = 0, "rad" = 0, "fire" = 90, "acid" = 90)
else
icon_state = initial(icon_state)
name = initial(name)
From 823dd1a98a00cba8137a407b6aea69576a45245f Mon Sep 17 00:00:00 2001
From: Trilbyspaceclone <30435998+Trilbyspaceclone@users.noreply.github.com>
Date: Tue, 23 Apr 2019 04:40:21 -0400
Subject: [PATCH 074/247] Update ripley.dm
---
code/game/mecha/working/ripley.dm | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/code/game/mecha/working/ripley.dm b/code/game/mecha/working/ripley.dm
index 4d2e113749..ef3ba969e9 100644
--- a/code/game/mecha/working/ripley.dm
+++ b/code/game/mecha/working/ripley.dm
@@ -80,6 +80,7 @@
desc = "OH SHIT IT'S THE DEATHSQUAD WE'RE ALL GONNA DIE"
name = "\improper DEATH-RIPLEY"
icon_state = "deathripley"
+ armor = list("melee" = 40, "bullet" = 30, "laser" = 20, "energy" = 20, "bomb" = 40, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100)
slow_pressure_step_in = 3
opacity=0
lights_power = 7
@@ -194,4 +195,4 @@
cargo -= O
else
if(user.loc == src) //so we don't get the message if we resisted multiple times and succeeded.
- to_chat(user, "You fail to push [O] out of [src]!")
\ No newline at end of file
+ to_chat(user, "You fail to push [O] out of [src]!")
From ff29ade943766c71cae41ef2303a868608add29d Mon Sep 17 00:00:00 2001
From: Trilbyspaceclone <30435998+Trilbyspaceclone@users.noreply.github.com>
Date: Tue, 23 Apr 2019 12:09:58 -0400
Subject: [PATCH 075/247] Hairly request
---
code/modules/mining/machine_vending.dm | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/code/modules/mining/machine_vending.dm b/code/modules/mining/machine_vending.dm
index ab6d48fa2a..cd75c3b55b 100644
--- a/code/modules/mining/machine_vending.dm
+++ b/code/modules/mining/machine_vending.dm
@@ -50,9 +50,11 @@
new /datum/data/mining_equipment("Space Cash", /obj/item/stack/spacecash/c1000, 2000),
new /datum/data/mining_equipment("Mining Hardsuit", /obj/item/clothing/suit/space/hardsuit/mining, 2000),
new /datum/data/mining_equipment("Diamond Pickaxe", /obj/item/pickaxe/diamond, 2000),
+ new /datum/data/mining_equipment("Spare Suit Voucher", /obj/item/suit_voucher, 2000),
new /datum/data/mining_equipment("Super Resonator", /obj/item/resonator/upgraded, 2500),
new /datum/data/mining_equipment("Jump Boots", /obj/item/clothing/shoes/bhop, 2500),
new /datum/data/mining_equipment("Luxury Shelter Capsule", /obj/item/survivalcapsule/luxury, 3000),
+ new /datum/data/mining_equipment("Miner Full Replacement", /obj/item/storage/backpack/duffelbag/mining_cloned, 3000),
new /datum/data/mining_equipment("Nanotrasen Minebot", /mob/living/simple_animal/hostile/mining_drone, 800),
new /datum/data/mining_equipment("Minebot Melee Upgrade", /obj/item/mine_bot_upgrade, 400),
new /datum/data/mining_equipment("Minebot Armor Upgrade", /obj/item/mine_bot_upgrade/health, 400),
@@ -67,9 +69,7 @@
new /datum/data/mining_equipment("KA Damage Increase", /obj/item/borg/upgrade/modkit/damage, 1000),
new /datum/data/mining_equipment("KA Cooldown Decrease", /obj/item/borg/upgrade/modkit/cooldown, 1000),
new /datum/data/mining_equipment("KA AoE Damage", /obj/item/borg/upgrade/modkit/aoe/mobs, 2000),
- new /datum/data/mining_equipment("Spare Suit Voucher", /obj/item/suit_voucher, 6000),
- new /datum/data/mining_equipment("Premium Accelerator", /obj/item/gun/energy/kinetic_accelerator/premiumka, 8000),
- new /datum/data/mining_equipment("Miner Full Replacement", /obj/item/storage/backpack/duffelbag/mining_cloned, 10000),
+ new /datum/data/mining_equipment("Premium Accelerator", /obj/item/gun/energy/kinetic_accelerator/premiumka, 8000)
)
From b0a93cf790501e8800372db3a330ab8f06d9d031 Mon Sep 17 00:00:00 2001
From: BurgerLua
Date: Tue, 23 Apr 2019 11:51:00 -0700
Subject: [PATCH 076/247] retweaked the event instead of removing it
---
code/modules/events/wizard/race.dm | 35 +++++++++++++++++++++++++++---
tgstation.dme | 1 +
2 files changed, 33 insertions(+), 3 deletions(-)
diff --git a/code/modules/events/wizard/race.dm b/code/modules/events/wizard/race.dm
index 32b45e46f8..7ea875f152 100644
--- a/code/modules/events/wizard/race.dm
+++ b/code/modules/events/wizard/race.dm
@@ -5,6 +5,18 @@
max_occurrences = 5
earliest_start = 0 MINUTES
+/datum/round_event/wizard/race
+ var/list/stored_name
+ var/list/stored_species
+ var/list/stored_dna
+
+/datum/round_event/wizard/race/setup()
+ stored_name = list()
+ stored_species = list()
+ stored_dna = list()
+ endWhen = rand(600,1200) //10 to 20 minutes
+ ..()
+
/datum/round_event/wizard/race/start()
var/all_the_same = 0
@@ -12,18 +24,35 @@
for(var/speciestype in subtypesof(/datum/species))
var/datum/species/S = new speciestype()
- if(!S.dangerous_existence && !S.blacklisted)
+ if(!S.dangerous_existence && !S.blacklisted && !S.nojumpsuit) //Dangerous Species, Blacklisted Species, and Species who can't wear jumpsuits are blacklisted.
all_species += speciestype
var/datum/species/new_species = pick(all_species)
- if(prob(50))
+ if(prob(75))
all_the_same = 1
- for(var/mob/living/carbon/human/H in GLOB.carbon_list) //yes, even the dead
+ for(var/mob/living/carbon/human/H in GLOB.carbon_list)
+ var/turf/T = get_turf(H)
+ if(!T)
+ continue
+ if(!is_station_level(T.z))
+ continue
+ stored_name[H] = H.real_name
+ stored_species[H] = H.dna.species
+ stored_dna[H] = H.dna.unique_enzymes
H.set_species(new_species)
H.real_name = H.dna.species.random_name(H.gender,1)
H.dna.unique_enzymes = H.dna.generate_unique_enzymes()
to_chat(H, "You feel somehow... different?")
if(!all_the_same)
new_species = pick(all_species)
+
+/datum/round_event/wizard/race/end()
+ for(var/mob/living/carbon/human/H in GLOB.carbon_list)
+ if(!(stored_name[H] && stored_species[H] && stored_dna[H]))
+ continue
+ H.set_species(stored_species[H])
+ H.real_name = stored_name[H]
+ H.dna.unique_enzymes = stored_dna[H]
+ to_chat(H, "You feel back to your normal self again.")
\ No newline at end of file
diff --git a/tgstation.dme b/tgstation.dme
index de0ef8686f..5b4c4eabe5 100755
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -1596,6 +1596,7 @@
#include "code\modules\events\wizard\lava.dm"
#include "code\modules\events\wizard\magicarp.dm"
#include "code\modules\events\wizard\petsplosion.dm"
+#include "code\modules\events\wizard\race.dm"
#include "code\modules\events\wizard\rpgloot.dm"
#include "code\modules\events\wizard\shuffle.dm"
#include "code\modules\events\wizard\summons.dm"
From 776b0fad4bf636ef13909891ced5734a9e00fe04 Mon Sep 17 00:00:00 2001
From: kevinz000 <2003111+kevinz000@users.noreply.github.com>
Date: Tue, 23 Apr 2019 15:59:29 -0700
Subject: [PATCH 077/247] Update AI_modules.dm
---
code/game/objects/items/AI_modules.dm | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/code/game/objects/items/AI_modules.dm b/code/game/objects/items/AI_modules.dm
index d818191055..57d3d6b6ff 100644
--- a/code/game/objects/items/AI_modules.dm
+++ b/code/game/objects/items/AI_modules.dm
@@ -362,7 +362,7 @@ AI MODULES
/obj/item/aiModule/core/full/asimov
name = "'Asimov' Core AI Module"
law_id = "asimov"
- var/subject = "human being"
+ var/subject = "person of a NT approved crew species" //CITADEL CHANGED FROM HUMANS!
/obj/item/aiModule/core/full/asimov/attack_self(var/mob/user as mob)
var/targName = stripped_input(user, "Please enter a new subject that asimov is concerned with.", "Asimov to whom?", subject)
From 5c54bacddb9179f23256fdf59462008851eb49d3 Mon Sep 17 00:00:00 2001
From: kevinz000 <2003111+kevinz000@users.noreply.github.com>
Date: Tue, 23 Apr 2019 16:02:47 -0700
Subject: [PATCH 078/247] Update AI_modules.dm
---
code/game/objects/items/AI_modules.dm | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/code/game/objects/items/AI_modules.dm b/code/game/objects/items/AI_modules.dm
index 57d3d6b6ff..a8d0bed2aa 100644
--- a/code/game/objects/items/AI_modules.dm
+++ b/code/game/objects/items/AI_modules.dm
@@ -362,7 +362,7 @@ AI MODULES
/obj/item/aiModule/core/full/asimov
name = "'Asimov' Core AI Module"
law_id = "asimov"
- var/subject = "person of a NT approved crew species" //CITADEL CHANGED FROM HUMANS!
+ var/subject = "person of an NT approved crew species" //CITADEL CHANGED FROM HUMANS!
/obj/item/aiModule/core/full/asimov/attack_self(var/mob/user as mob)
var/targName = stripped_input(user, "Please enter a new subject that asimov is concerned with.", "Asimov to whom?", subject)
From a5e750e20fec6c3a67a05bda6ac029299c30b761 Mon Sep 17 00:00:00 2001
From: kevinz000 <2003111+kevinz000@users.noreply.github.com>
Date: Tue, 23 Apr 2019 19:06:00 -0700
Subject: [PATCH 079/247] skintone
---
code/__DEFINES/citadel_defines.dm | 1 +
code/modules/mob/living/carbon/human/species.dm | 2 ++
.../code/modules/mob/dead/new_player/sprite_accessories.dm | 2 +-
3 files changed, 4 insertions(+), 1 deletion(-)
diff --git a/code/__DEFINES/citadel_defines.dm b/code/__DEFINES/citadel_defines.dm
index ef14dbcaa3..b150067717 100644
--- a/code/__DEFINES/citadel_defines.dm
+++ b/code/__DEFINES/citadel_defines.dm
@@ -95,6 +95,7 @@
#define NOAROUSAL 37 //Stops all arousal effects
#define NOGENITALS 38 //Cannot create, use, or otherwise have genitals
#define MATRIXED 39 //if icon is color matrix'd
+#define SKINTONE 40 //uses skin tones
//Citadel istypes
#define isborer(A) (istype(A, /mob/living/simple_animal/borer))
diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm
index ba1ad9e0da..e2e9e5149f 100644
--- a/code/modules/mob/living/carbon/human/species.dm
+++ b/code/modules/mob/living/carbon/human/species.dm
@@ -755,6 +755,8 @@ GLOBAL_LIST_EMPTY(roundstart_races)
if(!(H.has_trait(TRAIT_HUSK)))
if(!forced_colour)
switch(S.color_src)
+ if(SKINTONE)
+ accessory_overlay.color = skintone2hex(H.skin_tone)
if(MUTCOLORS)
if(fixed_mut_color)
accessory_overlay.color = "#[fixed_mut_color]"
diff --git a/modular_citadel/code/modules/mob/dead/new_player/sprite_accessories.dm b/modular_citadel/code/modules/mob/dead/new_player/sprite_accessories.dm
index 739f787d44..b6cfce0b24 100644
--- a/modular_citadel/code/modules/mob/dead/new_player/sprite_accessories.dm
+++ b/modular_citadel/code/modules/mob/dead/new_player/sprite_accessories.dm
@@ -201,7 +201,7 @@
name = "Elf"
icon_state = "elf"
icon = 'modular_citadel/icons/mob/mam_ears.dmi'
- color_src = MATRIXED
+ color_src = SKINTONE
/datum/sprite_accessory/ears/fennec
name = "Fennec"
From 1f78520b68c605d7f45a9fca581303059191ff69 Mon Sep 17 00:00:00 2001
From: BurgerLua
Date: Wed, 24 Apr 2019 20:13:21 -0700
Subject: [PATCH 080/247] Adds a new trait that makes you immune from the
"positive" effects of hexacrocin and crocin.
---
code/__DEFINES/traits.dm | 1 +
code/datums/traits/neutral.dm | 9 +++++++++
.../code/modules/reagents/reagents/cit_reagents.dm | 6 +++---
3 files changed, 13 insertions(+), 3 deletions(-)
diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm
index a5617e6148..99f1813f3c 100644
--- a/code/__DEFINES/traits.dm
+++ b/code/__DEFINES/traits.dm
@@ -69,6 +69,7 @@
#define TRAIT_TAGGER "tagger"
#define TRAIT_PHOTOGRAPHER "photographer"
#define TRAIT_MUSICIAN "musician"
+#define TRAIT_CROCRIN_IMMUNE "crocin_immune"
// common trait sources
#define TRAIT_GENERIC "generic"
diff --git a/code/datums/traits/neutral.dm b/code/datums/traits/neutral.dm
index 4fc30de473..f299e9904a 100644
--- a/code/datums/traits/neutral.dm
+++ b/code/datums/traits/neutral.dm
@@ -84,3 +84,12 @@
/datum/quirk/monochromatic/remove()
if(quirk_holder)
quirk_holder.remove_client_colour(/datum/client_colour/monochrome)
+
+/datum/quirk/crocrin_immunity
+ name = "Crocin Immunity"
+ desc = "You're one of the few people in the galaxy who are genetically immune to Crocin and Hexacrocin products and their addictive properties! However, you can still get brain damage from Hexacrocin addiction."
+ mob_trait = TRAIT_CROCRIN_IMMUNE
+ value = 0
+ gain_text = "You feel more prudish."
+ lose_text = "You don't feel as prudish as before."
+ medical_record_text = "Patient exhibits a special gene that makes them immune to Crocin and Hexacrocin."
diff --git a/modular_citadel/code/modules/reagents/reagents/cit_reagents.dm b/modular_citadel/code/modules/reagents/reagents/cit_reagents.dm
index e46174b5a9..061f941043 100644
--- a/modular_citadel/code/modules/reagents/reagents/cit_reagents.dm
+++ b/modular_citadel/code/modules/reagents/reagents/cit_reagents.dm
@@ -97,7 +97,7 @@
color = "#FFADFF"//PINK, rgb(255, 173, 255)
/datum/reagent/drug/aphrodisiac/on_mob_life(mob/living/M)
- if(M && M.canbearoused)
+ if(M && M.canbearoused && !M.has_trait(TRAIT_CROCRIN_IMMUNE))
if(prob(33))
M.adjustArousalLoss(2)
if(prob(5))
@@ -119,7 +119,7 @@
overdose_threshold = 20
/datum/reagent/drug/aphrodisiacplus/on_mob_life(mob/living/M)
- if(M && M.canbearoused)
+ if(M && M.canbearoused && !M.has_trait(TRAIT_CROCRIN_IMMUNE))
if(prob(33))
M.adjustArousalLoss(6)//not quite six times as powerful, but still considerably more powerful.
if(prob(5))
@@ -151,7 +151,7 @@
..()
/datum/reagent/drug/aphrodisiacplus/overdose_process(mob/living/M)
- if(M && M.canbearoused && prob(33))
+ if(M && M.canbearoused && !M.has_trait(TRAIT_CROCRIN_IMMUNE) && prob(33))
if(M.getArousalLoss() >= 100 && ishuman(M) && M.has_dna())
var/mob/living/carbon/human/H = M
if(prob(50)) //Less spam
From cb79f62ff9d27bb31a3e4e80eee7f38cd08847fb Mon Sep 17 00:00:00 2001
From: kevinz000 <2003111+kevinz000@users.noreply.github.com>
Date: Thu, 25 Apr 2019 01:06:28 -0700
Subject: [PATCH 081/247] Update SDQL_2_wrappers.dm
---
code/modules/admin/verbs/SDQL2/SDQL_2_wrappers.dm | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/code/modules/admin/verbs/SDQL2/SDQL_2_wrappers.dm b/code/modules/admin/verbs/SDQL2/SDQL_2_wrappers.dm
index 3056b459d8..97a799824b 100644
--- a/code/modules/admin/verbs/SDQL2/SDQL_2_wrappers.dm
+++ b/code/modules/admin/verbs/SDQL2/SDQL_2_wrappers.dm
@@ -217,3 +217,7 @@
/proc/_step_away(ref, trg, max)
step_away(ref, trg, max)
+/proc/_instantiate_at(thing, location)
+ new thing(location)
+
+
From 766a1196960467bed5411b0670d843f69233343a Mon Sep 17 00:00:00 2001
From: kevinz000 <2003111+kevinz000@users.noreply.github.com>
Date: Thu, 25 Apr 2019 04:14:35 -0700
Subject: [PATCH 082/247] Update vent_clog.dm
---
code/modules/events/vent_clog.dm | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/code/modules/events/vent_clog.dm b/code/modules/events/vent_clog.dm
index 75833fc086..72fef4335d 100644
--- a/code/modules/events/vent_clog.dm
+++ b/code/modules/events/vent_clog.dm
@@ -73,7 +73,7 @@
var/obj/machinery/atmospherics/components/unary/vent = pick(vents)
vents -= vent
- if(!vent)
+ if(!vent || vent.welded)
return
var/turf/T = get_turf(vent)
@@ -150,7 +150,7 @@
/datum/round_event/vent_clog/beer/start()
for(var/obj/machinery/atmospherics/components/unary/vent in vents)
- if(vent && vent.loc)
+ if(vent && vent.loc && !vent.welded)
var/datum/reagents/R = new/datum/reagents(1000)
R.my_atom = vent
R.add_reagent("beer", reagentsAmount)
@@ -165,7 +165,7 @@
/datum/round_event/vent_clog/male/start()
for(var/obj/machinery/atmospherics/components/unary/vent in vents)
- if(vent && vent.loc)
+ if(vent && vent.loc && !vent.welded)
var/datum/reagents/R = new/datum/reagents(1000)
R.my_atom = vent
R.add_reagent("semen", reagentsAmount)
@@ -180,7 +180,7 @@
/datum/round_event/vent_clog/female/start()
for(var/obj/machinery/atmospherics/components/unary/vent in vents)
- if(vent && vent.loc)
+ if(vent && vent.loc && !vent.welded)
var/datum/reagents/R = new/datum/reagents(1000)
R.my_atom = vent
R.add_reagent("femcum", reagentsAmount)
@@ -195,7 +195,7 @@
/datum/round_event/vent_clog/plasma_decon/start()
for(var/obj/machinery/atmospherics/components/unary/vent in vents)
- if(vent && vent.loc)
+ if(vent && vent.loc && !vent.welded)
var/datum/effect_system/smoke_spread/freezing/decon/smoke = new
smoke.set_up(7, get_turf(vent), 7)
smoke.start()
From 11ba5ee3fd904d56a6eda9c03158a57e0f582b24 Mon Sep 17 00:00:00 2001
From: CitadelStationBot
Date: Thu, 25 Apr 2019 06:19:38 -0500
Subject: [PATCH 083/247] Automatic changelog generation for PR #8264 [ci skip]
---
html/changelogs/AutoChangeLog-pr-8264.yml | 7 +++++++
1 file changed, 7 insertions(+)
create mode 100644 html/changelogs/AutoChangeLog-pr-8264.yml
diff --git a/html/changelogs/AutoChangeLog-pr-8264.yml b/html/changelogs/AutoChangeLog-pr-8264.yml
new file mode 100644
index 0000000000..15e525c581
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-8264.yml
@@ -0,0 +1,7 @@
+author: "Trilbyspaceclone"
+delete-after: True
+changes:
+ - rscdel: "Fun"
+ - tweak: "costs of suit voucher"
+ - balance: "Unblances miner vender"
+ - bugfix: "spare cheaper brute kit"
From bb47bc7cf942a805e6222a79afe11aa0b7a65713 Mon Sep 17 00:00:00 2001
From: CitadelStationBot
Date: Thu, 25 Apr 2019 06:20:05 -0500
Subject: [PATCH 084/247] Automatic changelog generation for PR #8261 [ci skip]
---
html/changelogs/AutoChangeLog-pr-8261.yml | 7 +++++++
1 file changed, 7 insertions(+)
create mode 100644 html/changelogs/AutoChangeLog-pr-8261.yml
diff --git a/html/changelogs/AutoChangeLog-pr-8261.yml b/html/changelogs/AutoChangeLog-pr-8261.yml
new file mode 100644
index 0000000000..e7624aec73
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-8261.yml
@@ -0,0 +1,7 @@
+author: "Trilbyspaceclone"
+delete-after: True
+changes:
+ - rscadd: "new economics"
+ - tweak: "cargo and robotics relationships"
+ - balance: "unbalanced something"
+ - bugfix: "fixed a maybe oversight"
From 7b94b5df5117853cd518541b363816cab8e536db Mon Sep 17 00:00:00 2001
From: CitadelStationBot
Date: Thu, 25 Apr 2019 06:34:12 -0500
Subject: [PATCH 085/247] Automatic changelog generation for PR #8279 [ci skip]
---
html/changelogs/AutoChangeLog-pr-8279.yml | 4 ++++
1 file changed, 4 insertions(+)
create mode 100644 html/changelogs/AutoChangeLog-pr-8279.yml
diff --git a/html/changelogs/AutoChangeLog-pr-8279.yml b/html/changelogs/AutoChangeLog-pr-8279.yml
new file mode 100644
index 0000000000..7ed141640a
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-8279.yml
@@ -0,0 +1,4 @@
+author: "Trilbyspaceclone"
+delete-after: True
+changes:
+ - bugfix: "restores the deathriplys missing armor"
From ae2b3797a677bbf17cb8019a44af8fec523e8ddc Mon Sep 17 00:00:00 2001
From: CitadelStationBot
Date: Thu, 25 Apr 2019 06:35:01 -0500
Subject: [PATCH 086/247] Automatic changelog generation for PR #8277 [ci skip]
---
html/changelogs/AutoChangeLog-pr-8277.yml | 4 ++++
1 file changed, 4 insertions(+)
create mode 100644 html/changelogs/AutoChangeLog-pr-8277.yml
diff --git a/html/changelogs/AutoChangeLog-pr-8277.yml b/html/changelogs/AutoChangeLog-pr-8277.yml
new file mode 100644
index 0000000000..2a663ea2a4
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-8277.yml
@@ -0,0 +1,4 @@
+author: "BurgerBB"
+delete-after: True
+changes:
+ - balance: "Significantly tweaks the Wizard race transformation event to be less unreasonably troublesome."
From fd19d67cc282f10fcc098631e6186c148fe0206f Mon Sep 17 00:00:00 2001
From: BurgerLua
Date: Thu, 25 Apr 2019 11:57:02 -0700
Subject: [PATCH 087/247] "Improves" how slurring works, and adjusts how fast
you recover from slurring.
---
code/modules/mob/living/carbon/human/say.dm | 13 +++++++++----
code/modules/mob/living/carbon/life.dm | 2 +-
code/modules/mob/living/say.dm | 2 +-
code/modules/mob/mob_helpers.dm | 14 +++++++-------
.../chemistry/reagents/alcohol_reagents.dm | 12 ++++--------
.../reagents/chemistry/reagents/food_reagents.dm | 3 +--
6 files changed, 23 insertions(+), 23 deletions(-)
diff --git a/code/modules/mob/living/carbon/human/say.dm b/code/modules/mob/living/carbon/human/say.dm
index 3cdaf71e68..dc35e65c47 100644
--- a/code/modules/mob/living/carbon/human/say.dm
+++ b/code/modules/mob/living/carbon/human/say.dm
@@ -1,9 +1,14 @@
/mob/living/carbon/human/say_mod(input, message_mode)
verb_say = dna.species.say_mod
- if(slurring)
- return "slurs"
- else
- . = ..()
+ switch(slurring)
+ if(25 to 50)
+ return "jumbles"
+ if(50 to 75)
+ return "slurs"
+ if(75 to INFINITY)
+ return "garbles"
+ else
+ . = ..()
/mob/living/carbon/human/treat_message(message)
message = dna.species.handle_speech(message,src)
diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm
index 48a401802b..2492ece97f 100644
--- a/code/modules/mob/living/carbon/life.dm
+++ b/code/modules/mob/living/carbon/life.dm
@@ -532,7 +532,7 @@ GLOBAL_LIST_INIT(ballmer_windows_me_msg, list("Yo man, what if, we like, uh, put
stuttering = max(stuttering-1, 0)
if(slurring)
- slurring = max(slurring-1,0)
+ slurring = max(slurring-0.15,0)
if(cultslurring)
cultslurring = max(cultslurring-1, 0)
diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm
index a0f619a7d6..871e33349a 100644
--- a/code/modules/mob/living/say.dm
+++ b/code/modules/mob/living/say.dm
@@ -334,7 +334,7 @@ GLOBAL_LIST_INIT(department_radio_keys, list(
message = stutter(message)
if(slurring)
- message = slur(message)
+ message = slur(message,slurring)
if(cultslurring)
message = cultslur(message)
diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm
index 35b48afa28..3d4e356464 100644
--- a/code/modules/mob/mob_helpers.dm
+++ b/code/modules/mob/mob_helpers.dm
@@ -64,7 +64,7 @@
p++
return sanitize(t)
-/proc/slur(n)
+/proc/slur(n,var/strength=50)
var/phrase = html_decode(n)
var/leng = lentext(phrase)
var/counter=lentext(phrase)
@@ -72,7 +72,7 @@
var/newletter=""
while(counter>=1)
newletter=copytext(phrase,(leng-counter)+1,(leng-counter)+2)
- if(rand(1,3)==3)
+ if(rand(1,100)<=strength)
if(lowertext(newletter)=="o")
newletter="u"
if(lowertext(newletter)=="s")
@@ -83,17 +83,17 @@
newletter="oo"
if(lowertext(newletter)=="c")
newletter="k"
- if(rand(1,20)==20)
+ if(rand(1,100) <= strength*0.5)
if(newletter==" ")
newletter="...huuuhhh..."
if(newletter==".")
newletter=" *BURP*."
- switch(rand(1,20))
- if(1)
+ if(rand(1,100) <= strength)
+ if(rand(1,5) == 1)
newletter+="'"
- if(10)
+ if(rand(1,5) == 1)
newletter+="[newletter]"
- if(20)
+ if(rand(1,5) == 1)
newletter+="[newletter][newletter]"
newphrase+="[newletter]";counter-=1
return newphrase
diff --git a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm
index 6e4d5e5a7d..92d9da401b 100644
--- a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm
@@ -1277,8 +1277,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
if(!M.has_trait(TRAIT_ALCOHOL_TOLERANCE))
M.confused = max(M.confused+2,0)
M.Dizzy(10)
- if (!M.slurring)
- M.slurring = 1
+ M.slurring = max(M.slurring,50)
M.slurring += 3
switch(current_cycle)
if(51 to 200)
@@ -1306,8 +1305,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
M.dizziness +=1.5
switch(current_cycle)
if(15 to 45)
- if(!M.slurring)
- M.slurring = 1
+ M.slurring = max(M.slurring,50)
M.slurring += 3
if(45 to 55)
if(prob(50))
@@ -1336,8 +1334,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
M.dizziness +=2
switch(current_cycle)
if(15 to 45)
- if(!M.slurring)
- M.slurring = 1
+ M.slurring = max(M.slurring,50)
M.slurring += 3
if(45 to 55)
if(prob(50))
@@ -1364,8 +1361,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_desc = "A drink enjoyed by people during the 1960's."
/datum/reagent/consumable/ethanol/hippies_delight/on_mob_life(mob/living/carbon/M)
- if (!M.slurring)
- M.slurring = 1
+ M.slurring = max(M.slurring,50)
switch(current_cycle)
if(1 to 5)
M.Dizzy(10)
diff --git a/code/modules/reagents/chemistry/reagents/food_reagents.dm b/code/modules/reagents/chemistry/reagents/food_reagents.dm
index 52b212f8c5..5071150e24 100644
--- a/code/modules/reagents/chemistry/reagents/food_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/food_reagents.dm
@@ -402,8 +402,7 @@
taste_description = "mushroom"
/datum/reagent/mushroomhallucinogen/on_mob_life(mob/living/carbon/M)
- if(!M.slurring)
- M.slurring = 1
+ M.slurring = max(M.slurring,50)
switch(current_cycle)
if(1 to 5)
M.Dizzy(5)
From 75816477a54f6c98093ce506ab1e97dff0719f98 Mon Sep 17 00:00:00 2001
From: BurgerLua
Date: Thu, 25 Apr 2019 12:09:10 -0700
Subject: [PATCH 088/247] Slurring now related to your drunkenness level.
---
code/modules/mob/living/carbon/life.dm | 7 +------
1 file changed, 1 insertion(+), 6 deletions(-)
diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm
index 2492ece97f..3fbb167736 100644
--- a/code/modules/mob/living/carbon/life.dm
+++ b/code/modules/mob/living/carbon/life.dm
@@ -532,7 +532,7 @@ GLOBAL_LIST_INIT(ballmer_windows_me_msg, list("Yo man, what if, we like, uh, put
stuttering = max(stuttering-1, 0)
if(slurring)
- slurring = max(slurring-0.15,0)
+ slurring = max(slurring-0.15,0,drunkenness)
if(cultslurring)
cultslurring = max(cultslurring-1, 0)
@@ -550,16 +550,11 @@ GLOBAL_LIST_INIT(ballmer_windows_me_msg, list("Yo man, what if, we like, uh, put
drunkenness = max(drunkenness - (drunkenness * 0.04), 0)
if(drunkenness >= 6)
SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "drunk", /datum/mood_event/drunk)
- if(prob(25))
- slurring += 2
jitteriness = max(jitteriness - 3, 0)
if(has_trait(TRAIT_DRUNK_HEALING))
adjustBruteLoss(-0.12, FALSE)
adjustFireLoss(-0.06, FALSE)
- if(drunkenness >= 11 && slurring < 5)
- slurring += 1.2
-
if(mind && (mind.assigned_role == "Scientist" || mind.assigned_role == "Research Director"))
if(SSresearch.science_tech)
if(drunkenness >= 12.9 && drunkenness <= 13.8)
From 569a92485f137220cee4979860053288354cd1e6 Mon Sep 17 00:00:00 2001
From: BurgerLua
Date: Thu, 25 Apr 2019 12:09:45 -0700
Subject: [PATCH 089/247] Removed slurring being 0.15 as it was a little
extreme.
---
code/modules/mob/living/carbon/life.dm | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm
index 3fbb167736..6111a92e99 100644
--- a/code/modules/mob/living/carbon/life.dm
+++ b/code/modules/mob/living/carbon/life.dm
@@ -532,7 +532,7 @@ GLOBAL_LIST_INIT(ballmer_windows_me_msg, list("Yo man, what if, we like, uh, put
stuttering = max(stuttering-1, 0)
if(slurring)
- slurring = max(slurring-0.15,0,drunkenness)
+ slurring = max(slurring-1,0,drunkenness)
if(cultslurring)
cultslurring = max(cultslurring-1, 0)
From fcda4c0fbb15d908b481ebdc155ba89d90e0d5b2 Mon Sep 17 00:00:00 2001
From: Trilbyspaceclone <30435998+Trilbyspaceclone@users.noreply.github.com>
Date: Thu, 25 Apr 2019 20:40:48 -0400
Subject: [PATCH 090/247] Update _neck.dm
---
code/modules/clothing/neck/_neck.dm | 44 +++++++++++++++++++++++++++--
1 file changed, 42 insertions(+), 2 deletions(-)
diff --git a/code/modules/clothing/neck/_neck.dm b/code/modules/clothing/neck/_neck.dm
index 8245148096..d4cfbd1a84 100644
--- a/code/modules/clothing/neck/_neck.dm
+++ b/code/modules/clothing/neck/_neck.dm
@@ -171,17 +171,57 @@
icon_state = "stripedbluescarf"
item_color = "stripedbluescarf"
-/obj/item/clothing/neck/petcollar //don't really wear this though please c'mon seriously guys
+///////////
+//COLLARS//
+///////////
+
+/obj/item/clothing/neck/petcollar
name = "pet collar"
desc = "It's for pets. Though you probably could wear it yourself, you'd doubtless be the subject of ridicule."
icon_state = "petcollar"
item_color = "petcollar"
+ pocket_storage_component_path = /datum/component/storage/concrete/pockets/small/collar
var/tagname = null
/obj/item/clothing/neck/petcollar/attack_self(mob/user)
tagname = copytext(sanitize(input(user, "Would you like to change the name on the tag?", "Name your new pet", "Spot") as null|text),1,MAX_NAME_LEN)
name = "[initial(name)] - [tagname]"
+/obj/item/clothing/neck/petcollar/locked
+ name = "locked collar"
+ desc = "A collar that has a small lock on it to keep it from being removed."
+ pocket_storage_component_path = /datum/component/storage/concrete/pockets/small/collar/locked
+ var/lock = FALSE
+
+/obj/item/clothing/neck/petcollar/locked/attackby(obj/item/key/collar, mob/user, params)
+ if(lock != FALSE)
+ to_chat(user, "With a click the collar unlocks!")
+ lock = FALSE
+ item_flags = NONE
+ else
+ to_chat(user, "With a click the collar locks!")
+ lock = TRUE
+ item_flags = NODROP
+ return
+
+/obj/item/clothing/neck/petcollar/locked/attack_hand(mob/user)
+ if(loc == user && user.get_item_by_slot(SLOT_NECK) && lock != FALSE)
+ to_chat(user, "The collar is locked! You'll need unlock the collar before you can take it off!")
+ return
+ ..()
+
+/obj/item/key/collar
+ name = "Collar Key"
+ desc = "A key for a tiny lock on a collar or bag."
+
+/obj/item/clothing/neck/petcollar/Initialize()
+ . = ..()
+ new /obj/item/reagent_containers/food/snacks/cookie(src)
+
+/obj/item/clothing/neck/petcollar/locked/Initialize()
+ . = ..()
+ new /obj/item/key/collar(src)
+
//////////////
//DOPE BLING//
//////////////
@@ -191,4 +231,4 @@
desc = "Damn, it feels good to be a gangster."
icon = 'icons/obj/clothing/neck.dmi'
icon_state = "bling"
- item_color = "bling"
\ No newline at end of file
+ item_color = "bling"
From a69b845509b8f0fc8ab294823f4d7ce1c1e23d6b Mon Sep 17 00:00:00 2001
From: Trilbyspaceclone <30435998+Trilbyspaceclone@users.noreply.github.com>
Date: Thu, 25 Apr 2019 20:41:34 -0400
Subject: [PATCH 091/247] Update pockets.dm
---
.../components/storage/concrete/pockets.dm | 117 +++++++-----------
1 file changed, 48 insertions(+), 69 deletions(-)
diff --git a/code/datums/components/storage/concrete/pockets.dm b/code/datums/components/storage/concrete/pockets.dm
index 3d03c2adbd..f049a12ffb 100644
--- a/code/datums/components/storage/concrete/pockets.dm
+++ b/code/datums/components/storage/concrete/pockets.dm
@@ -1,73 +1,52 @@
-/datum/component/storage/concrete/pockets
- max_items = 2
- max_w_class = WEIGHT_CLASS_SMALL
- max_combined_w_class = 50
- rustle_sound = FALSE
-/datum/component/storage/concrete/pockets/handle_item_insertion(obj/item/I, prevent_warning, mob/user)
+///////////
+//COLLARS//
+///////////
+
+/obj/item/clothing/neck/petcollar
+ name = "pet collar"
+ desc = "It's for pets. Though you probably could wear it yourself, you'd doubtless be the subject of ridicule."
+ icon_state = "petcollar"
+ item_color = "petcollar"
+ pocket_storage_component_path = /datum/component/storage/concrete/pockets/small/collar
+ var/tagname = null
+
+/obj/item/clothing/neck/petcollar/attack_self(mob/user)
+ tagname = copytext(sanitize(input(user, "Would you like to change the name on the tag?", "Name your new pet", "Spot") as null|text),1,MAX_NAME_LEN)
+ name = "[initial(name)] - [tagname]"
+
+
+/obj/item/clothing/neck/petcollar/locked
+ name = "locked collar"
+ desc = "A collar that has a small lock on it to keep it from being removed."
+ pocket_storage_component_path = /datum/component/storage/concrete/pockets/small/collar/locked
+ var/lock = FALSE
+
+/obj/item/clothing/neck/petcollar/locked/attackby(obj/item/key/collar, mob/user, params)
+ if(lock != FALSE)
+ to_chat(user, "With a click the collar unlocks!")
+ lock = FALSE
+ item_flags = NONE
+ else
+ to_chat(user, "With a click the collar locks!")
+ lock = TRUE
+ item_flags = NODROP
+ return
+
+/obj/item/clothing/neck/petcollar/locked/attack_hand(mob/user)
+ if(loc == user && user.get_item_by_slot(SLOT_NECK) && lock != FALSE)
+ to_chat(user, "The collar is locked! You'll need unlock the collar before you can take it off!")
+ return
+ ..()
+
+/obj/item/key/collar
+ name = "Collar Key"
+ desc = "A key for a tiny lock on a collar or bag."
+
+/obj/item/clothing/neck/petcollar/Initialize()
. = ..()
- if(. && silent && !prevent_warning)
- if(quickdraw)
- to_chat(user, "You discreetly slip [I] into [parent]. Alt-click [parent] to remove it.")
- else
- to_chat(user, "You discreetly slip [I] into [parent].")
+ new /obj/item/reagent_containers/food/snacks/cookie(src)
-/datum/component/storage/concrete/pockets
- max_w_class = WEIGHT_CLASS_NORMAL
-
-/datum/component/storage/concrete/pockets/small
- max_items = 1
- attack_hand_interact = FALSE
-
-/datum/component/storage/concrete/pockets/tiny
- max_items = 1
- max_w_class = WEIGHT_CLASS_TINY
- attack_hand_interact = FALSE
-
-/datum/component/storage/concrete/pockets/small/detective
- attack_hand_interact = TRUE // so the detectives would discover pockets in their hats
-
-/datum/component/storage/concrete/pockets/shoes
- attack_hand_interact = FALSE
- quickdraw = TRUE
- silent = TRUE
-
-/datum/component/storage/concrete/pockets/shoes/Initialize()
+/obj/item/clothing/neck/petcollar/locked/Initialize()
. = ..()
- cant_hold = typecacheof(list(/obj/item/screwdriver/power))
- can_hold = typecacheof(list(
- /obj/item/kitchen/knife, /obj/item/switchblade, /obj/item/pen,
- /obj/item/scalpel, /obj/item/reagent_containers/syringe, /obj/item/dnainjector,
- /obj/item/reagent_containers/hypospray/medipen, /obj/item/reagent_containers/dropper,
- /obj/item/implanter, /obj/item/screwdriver, /obj/item/weldingtool/mini,
- /obj/item/firing_pin
- ))
-
-/datum/component/storage/concrete/pockets/shoes/clown/Initialize()
- . = ..()
- cant_hold = typecacheof(list(/obj/item/screwdriver/power))
- can_hold = typecacheof(list(
- /obj/item/kitchen/knife, /obj/item/switchblade, /obj/item/pen,
- /obj/item/scalpel, /obj/item/reagent_containers/syringe, /obj/item/dnainjector,
- /obj/item/reagent_containers/hypospray/medipen, /obj/item/reagent_containers/dropper,
- /obj/item/implanter, /obj/item/screwdriver, /obj/item/weldingtool/mini,
- /obj/item/firing_pin, /obj/item/bikehorn))
-
-/datum/component/storage/concrete/pockets/pocketprotector
- max_items = 3
- max_w_class = WEIGHT_CLASS_TINY
- var/atom/original_parent
-
-/datum/component/storage/concrete/pockets/pocketprotector/Initialize()
- original_parent = parent
- . = ..()
- can_hold = typecacheof(list( //Same items as a PDA
- /obj/item/pen,
- /obj/item/toy/crayon,
- /obj/item/lipstick,
- /obj/item/flashlight/pen,
- /obj/item/clothing/mask/cigarette))
-
-/datum/component/storage/concrete/pockets/pocketprotector/real_location()
- // if the component is reparented to a jumpsuit, the items still go in the protector
- return original_parent
+ new /obj/item/key/collar(src)
From 59cc2b5a9c7f26eabd40d08653b597e7c422f4d8 Mon Sep 17 00:00:00 2001
From: Trilbyspaceclone <30435998+Trilbyspaceclone@users.noreply.github.com>
Date: Thu, 25 Apr 2019 20:42:38 -0400
Subject: [PATCH 092/247] Update vending.dm
---
modular_citadel/code/game/machinery/vending.dm | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/modular_citadel/code/game/machinery/vending.dm b/modular_citadel/code/game/machinery/vending.dm
index 213dd8a17a..bdca91b0e6 100755
--- a/modular_citadel/code/game/machinery/vending.dm
+++ b/modular_citadel/code/game/machinery/vending.dm
@@ -54,8 +54,11 @@
/obj/item/clothing/neck/petcollar = 5,
/obj/item/clothing/under/mankini = 1,
/obj/item/dildo/flared/huge = 1
- )
- premium = list(/obj/item/electropack/shockcollar = 3)
+ )
+ premium = list(
+ /obj/item/electropack/shockcollar = 3,
+ /obj/item/clothing/neck/petcollar/locked = 1
+ )
refill_canister = /obj/item/vending_refill/kink
/*
/obj/machinery/vending/nazivend
From 33e3df815717df367edde60f6cce230f4dc5c464 Mon Sep 17 00:00:00 2001
From: Trilbyspaceclone <30435998+Trilbyspaceclone@users.noreply.github.com>
Date: Thu, 25 Apr 2019 20:46:39 -0400
Subject: [PATCH 093/247] What in the hell?
---
.../components/storage/concrete/pockets.dm | 133 +++++++++++-------
1 file changed, 85 insertions(+), 48 deletions(-)
diff --git a/code/datums/components/storage/concrete/pockets.dm b/code/datums/components/storage/concrete/pockets.dm
index f049a12ffb..e0a23b0209 100644
--- a/code/datums/components/storage/concrete/pockets.dm
+++ b/code/datums/components/storage/concrete/pockets.dm
@@ -1,52 +1,89 @@
+/datum/component/storage/concrete/pockets
+ max_items = 2
+ max_w_class = WEIGHT_CLASS_SMALL
+ max_combined_w_class = 50
+ rustle_sound = FALSE
-///////////
-//COLLARS//
-///////////
-
-/obj/item/clothing/neck/petcollar
- name = "pet collar"
- desc = "It's for pets. Though you probably could wear it yourself, you'd doubtless be the subject of ridicule."
- icon_state = "petcollar"
- item_color = "petcollar"
- pocket_storage_component_path = /datum/component/storage/concrete/pockets/small/collar
- var/tagname = null
-
-/obj/item/clothing/neck/petcollar/attack_self(mob/user)
- tagname = copytext(sanitize(input(user, "Would you like to change the name on the tag?", "Name your new pet", "Spot") as null|text),1,MAX_NAME_LEN)
- name = "[initial(name)] - [tagname]"
-
-
-/obj/item/clothing/neck/petcollar/locked
- name = "locked collar"
- desc = "A collar that has a small lock on it to keep it from being removed."
- pocket_storage_component_path = /datum/component/storage/concrete/pockets/small/collar/locked
- var/lock = FALSE
-
-/obj/item/clothing/neck/petcollar/locked/attackby(obj/item/key/collar, mob/user, params)
- if(lock != FALSE)
- to_chat(user, "With a click the collar unlocks!")
- lock = FALSE
- item_flags = NONE
- else
- to_chat(user, "With a click the collar locks!")
- lock = TRUE
- item_flags = NODROP
- return
-
-/obj/item/clothing/neck/petcollar/locked/attack_hand(mob/user)
- if(loc == user && user.get_item_by_slot(SLOT_NECK) && lock != FALSE)
- to_chat(user, "The collar is locked! You'll need unlock the collar before you can take it off!")
- return
- ..()
-
-/obj/item/key/collar
- name = "Collar Key"
- desc = "A key for a tiny lock on a collar or bag."
-
-/obj/item/clothing/neck/petcollar/Initialize()
+/datum/component/storage/concrete/pockets/handle_item_insertion(obj/item/I, prevent_warning, mob/user)
. = ..()
- new /obj/item/reagent_containers/food/snacks/cookie(src)
+ if(. && silent && !prevent_warning)
+ if(quickdraw)
+ to_chat(user, "You discreetly slip [I] into [parent]. Alt-click [parent] to remove it.")
+ else
+ to_chat(user, "You discreetly slip [I] into [parent].")
-/obj/item/clothing/neck/petcollar/locked/Initialize()
+/datum/component/storage/concrete/pockets
+ max_w_class = WEIGHT_CLASS_NORMAL
+
+/datum/component/storage/concrete/pockets/small
+ max_items = 1
+ attack_hand_interact = FALSE
+
+/datum/component/storage/concrete/pockets/small/collar
+ max_items = 1
+
+/datum/component/storage/concrete/pockets/small/collar/Initialize()
. = ..()
- new /obj/item/key/collar(src)
+ can_hold = typecacheof(list(
+ /obj/item/reagent_containers/food/snacks/cookie,
+ /obj/item/reagent_containers/food/snacks/sugarcookie))
+
+/datum/component/storage/concrete/pockets/small/collar/locked/Initialize()
+ . = ..()
+ can_hold = typecacheof(list(
+ /obj/item/reagent_containers/food/snacks/cookie,
+ /obj/item/reagent_containers/food/snacks/sugarcookie,
+ /obj/item/key/collar))
+
+/datum/component/storage/concrete/pockets/tiny
+ max_items = 1
+ max_w_class = WEIGHT_CLASS_TINY
+ attack_hand_interact = FALSE
+
+/datum/component/storage/concrete/pockets/small/detective
+ attack_hand_interact = TRUE // so the detectives would discover pockets in their hats
+
+/datum/component/storage/concrete/pockets/shoes
+ attack_hand_interact = FALSE
+ quickdraw = TRUE
+ silent = TRUE
+
+/datum/component/storage/concrete/pockets/shoes/Initialize()
+ . = ..()
+ cant_hold = typecacheof(list(/obj/item/screwdriver/power))
+ can_hold = typecacheof(list(
+ /obj/item/kitchen/knife, /obj/item/switchblade, /obj/item/pen,
+ /obj/item/scalpel, /obj/item/reagent_containers/syringe, /obj/item/dnainjector,
+ /obj/item/reagent_containers/hypospray/medipen, /obj/item/reagent_containers/dropper,
+ /obj/item/implanter, /obj/item/screwdriver, /obj/item/weldingtool/mini,
+ /obj/item/firing_pin
+ ))
+
+/datum/component/storage/concrete/pockets/shoes/clown/Initialize()
+ . = ..()
+ cant_hold = typecacheof(list(/obj/item/screwdriver/power))
+ can_hold = typecacheof(list(
+ /obj/item/kitchen/knife, /obj/item/switchblade, /obj/item/pen,
+ /obj/item/scalpel, /obj/item/reagent_containers/syringe, /obj/item/dnainjector,
+ /obj/item/reagent_containers/hypospray/medipen, /obj/item/reagent_containers/dropper,
+ /obj/item/implanter, /obj/item/screwdriver, /obj/item/weldingtool/mini,
+ /obj/item/firing_pin, /obj/item/bikehorn))
+
+/datum/component/storage/concrete/pockets/pocketprotector
+ max_items = 3
+ max_w_class = WEIGHT_CLASS_TINY
+ var/atom/original_parent
+
+/datum/component/storage/concrete/pockets/pocketprotector/Initialize()
+ original_parent = parent
+ . = ..()
+ can_hold = typecacheof(list( //Same items as a PDA
+ /obj/item/pen,
+ /obj/item/toy/crayon,
+ /obj/item/lipstick,
+ /obj/item/flashlight/pen,
+ /obj/item/clothing/mask/cigarette))
+
+/datum/component/storage/concrete/pockets/pocketprotector/real_location()
+ // if the component is reparented to a jumpsuit, the items still go in the protector
+ return original_parent
From b44ac0dd7493e3b3ef4efba68a95938e022cd0a0 Mon Sep 17 00:00:00 2001
From: BurgerLua
Date: Thu, 25 Apr 2019 18:11:12 -0700
Subject: [PATCH 094/247] Reorganizes accessory files, seperates underwear tops
from bottoms, and removes gendered clothing.
---
.../mob/dead/new_player/sprite_accessories.dm | 1524 -----------------
.../sprite_accessories/_sprite_accessories.dm | 62 +
.../sprite_accessories/body_markings.dm | 25 +
.../new_player/sprite_accessories/caps.dm | 7 +
.../new_player/sprite_accessories/ears.dm | 12 +
.../new_player/sprite_accessories/frills.dm | 18 +
.../sprite_accessories/hair_face.dm | 89 +
.../sprite_accessories/hair_head.dm | 460 +++++
.../new_player/sprite_accessories/horns.dm | 26 +
.../new_player/sprite_accessories/legs.dm | 8 +
.../sprite_accessories/moth_wings.dm | 68 +
.../new_player/sprite_accessories/pines.dm | 53 +
.../new_player/sprite_accessories/snouts.dm | 18 +
.../new_player/sprite_accessories/socks.dm | 96 ++
.../new_player/sprite_accessories/tails.dm | 55 +
.../sprite_accessories/undershirt.dm | 308 ++++
.../sprite_accessories/underwear.dm | 171 ++
.../new_player/sprite_accessories/wings.dm | 26 +
icons/mob/underwear.dmi | Bin 52322 -> 54625 bytes
icons/mob/underwear_old.dmi | Bin 0 -> 52536 bytes
tgstation.dme | 18 +-
21 files changed, 1519 insertions(+), 1525 deletions(-)
delete mode 100644 code/modules/mob/dead/new_player/sprite_accessories.dm
create mode 100644 code/modules/mob/dead/new_player/sprite_accessories/_sprite_accessories.dm
create mode 100644 code/modules/mob/dead/new_player/sprite_accessories/body_markings.dm
create mode 100644 code/modules/mob/dead/new_player/sprite_accessories/caps.dm
create mode 100644 code/modules/mob/dead/new_player/sprite_accessories/ears.dm
create mode 100644 code/modules/mob/dead/new_player/sprite_accessories/frills.dm
create mode 100644 code/modules/mob/dead/new_player/sprite_accessories/hair_face.dm
create mode 100644 code/modules/mob/dead/new_player/sprite_accessories/hair_head.dm
create mode 100644 code/modules/mob/dead/new_player/sprite_accessories/horns.dm
create mode 100644 code/modules/mob/dead/new_player/sprite_accessories/legs.dm
create mode 100644 code/modules/mob/dead/new_player/sprite_accessories/moth_wings.dm
create mode 100644 code/modules/mob/dead/new_player/sprite_accessories/pines.dm
create mode 100644 code/modules/mob/dead/new_player/sprite_accessories/snouts.dm
create mode 100644 code/modules/mob/dead/new_player/sprite_accessories/socks.dm
create mode 100644 code/modules/mob/dead/new_player/sprite_accessories/tails.dm
create mode 100644 code/modules/mob/dead/new_player/sprite_accessories/undershirt.dm
create mode 100644 code/modules/mob/dead/new_player/sprite_accessories/underwear.dm
create mode 100644 code/modules/mob/dead/new_player/sprite_accessories/wings.dm
create mode 100644 icons/mob/underwear_old.dmi
diff --git a/code/modules/mob/dead/new_player/sprite_accessories.dm b/code/modules/mob/dead/new_player/sprite_accessories.dm
deleted file mode 100644
index 44c1f7601d..0000000000
--- a/code/modules/mob/dead/new_player/sprite_accessories.dm
+++ /dev/null
@@ -1,1524 +0,0 @@
-/*
-
- Hello and welcome to sprite_accessories: For sprite accessories, such as hair,
- facial hair, and possibly tattoos and stuff somewhere along the line. This file is
- intended to be friendly for people with little to no actual coding experience.
- The process of adding in new hairstyles has been made pain-free and easy to do.
- Enjoy! - Doohl
-
-
- Notice: This all gets automatically compiled in a list in dna.dm, so you do not
- have to define any UI values for sprite accessories manually for hair and facial
- hair. Just add in new hair types and the game will naturally adapt.
-
- !!WARNING!!: changing existing hair information can be VERY hazardous to savefiles,
- to the point where you may completely corrupt a server's savefiles. Please refrain
- from doing this unless you absolutely know what you are doing, and have defined a
- conversion in savefile.dm
-*/
-/proc/init_sprite_accessory_subtypes(prototype, list/L, list/male, list/female,var/roundstart = FALSE)//Roundstart argument builds a specific list for roundstart parts where some parts may be locked
- if(!istype(L))
- L = list()
- if(!istype(male))
- male = list()
- if(!istype(female))
- female = list()
-
- for(var/path in typesof(prototype))
- if(path == prototype)
- continue
- if(roundstart)
- var/datum/sprite_accessory/P = path
- if(initial(P.locked))
- continue
- var/datum/sprite_accessory/D = new path()
-
- if(D.icon_state)
- L[D.name] = D
- else
- L += D.name
-
- switch(D.gender)
- if(MALE)
- male += D.name
- if(FEMALE)
- female += D.name
- else
- male += D.name
- female += D.name
- return L
-
-/datum/sprite_accessory
- var/icon //the icon file the accessory is located in
- var/icon_state //the icon_state of the accessory
- var/name //the preview name of the accessory
- var/gender = NEUTER //Determines if the accessory will be skipped or included in random hair generations
- var/gender_specific //Something that can be worn by either gender, but looks different on each
- var/color_src = MUTCOLORS //Currently only used by mutantparts so don't worry about hair and stuff. This is the source that this accessory will get its color from. Default is MUTCOLOR, but can also be HAIR, FACEHAIR, EYECOLOR and 0 if none.
- var/hasinner //Decides if this sprite has an "inner" part, such as the fleshy parts on ears.
- var/locked = FALSE //Is this part locked from roundstart selection? Used for parts that apply effects
- var/dimension_x = 32
- var/dimension_y = 32
- var/center = FALSE //Should we center the sprite?
-
-//////////////////////
-// Hair Definitions //
-//////////////////////
-/datum/sprite_accessory/hair
- icon = 'icons/mob/human_face.dmi' // default icon for all hairs
-
- // please make sure they're sorted alphabetically and, where needed, categorized
- // try to capitalize the names please~
- // try to spell
- // you do not need to define _s or _l sub-states, game automatically does this for you
-
-/datum/sprite_accessory/hair/afro
- name = "Afro"
- icon_state = "hair_afro"
-
-/datum/sprite_accessory/hair/afro2
- name = "Afro 2"
- icon_state = "hair_afro2"
-
-/datum/sprite_accessory/hair/afro_large
- name = "Afro (Large)"
- icon_state = "hair_bigafro"
-
-/datum/sprite_accessory/hair/antenna
- name = "Ahoge"
- icon_state = "hair_antenna"
-
-/datum/sprite_accessory/hair/bald
- name = "Bald"
- icon_state = null
-
-/datum/sprite_accessory/hair/balding
- name = "Balding Hair"
- icon_state = "hair_e"
-
-/datum/sprite_accessory/hair/bedhead
- name = "Bedhead"
- icon_state = "hair_bedhead"
-
-/datum/sprite_accessory/hair/bedhead2
- name = "Bedhead 2"
- icon_state = "hair_bedheadv2"
-
-/datum/sprite_accessory/hair/bedhead3
- name = "Bedhead 3"
- icon_state = "hair_bedheadv3"
-
-/datum/sprite_accessory/hair/beehive
- name = "Beehive"
- icon_state = "hair_beehive"
-
-/datum/sprite_accessory/hair/beehive2
- name = "Beehive 2"
- icon_state = "hair_beehivev2"
-
-/datum/sprite_accessory/hair/bob
- name = "Bob Hair"
- icon_state = "hair_bob"
-
-/datum/sprite_accessory/hair/bob2
- name = "Bob Hair 2"
- icon_state = "hair_bob2"
-
-/datum/sprite_accessory/hair/bob3
- name = "Bob Hair 3"
- icon_state = "hair_bobcut"
-
-/datum/sprite_accessory/hair/bobcurl
- name = "Bobcurl"
- icon_state = "hair_bobcurl"
-
-/datum/sprite_accessory/hair/boddicker
- name = "Boddicker"
- icon_state = "hair_boddicker"
-
-/datum/sprite_accessory/hair/bowl
- name = "Bowl"
- icon_state = "hair_bowlcut"
-
-/datum/sprite_accessory/hair/braid
- name = "Braid (Floorlength)"
- icon_state = "hair_braid"
-
-/datum/sprite_accessory/hair/braided
- name = "Braided"
- icon_state = "hair_braided"
-
-/datum/sprite_accessory/hair/front_braid
- name = "Braided Front"
- icon_state = "hair_braidfront"
-
-/datum/sprite_accessory/hair/not_floorlength_braid
- name = "Braid (High)"
- icon_state = "hair_braid2"
-
-/datum/sprite_accessory/hair/lowbraid
- name = "Braid (Low)"
- icon_state = "hair_hbraid"
-
-/datum/sprite_accessory/hair/shortbraid
- name = "Braid (Short)"
- icon_state = "hair_shortbraid"
-
-/datum/sprite_accessory/hair/braidtail
- name = "Braided Tail"
- icon_state = "hair_braidtail"
-
-/datum/sprite_accessory/hair/bun
- name = "Bun Head"
- icon_state = "hair_bun"
-
-/datum/sprite_accessory/hair/bun2
- name = "Bun Head 2"
- icon_state = "hair_bunhead2"
-
-/datum/sprite_accessory/hair/largebun
- name = "Bun (Large)"
- icon_state = "hair_largebun"
-
-/datum/sprite_accessory/hair/business
- name = "Business Hair"
- icon_state = "hair_business"
-
-/datum/sprite_accessory/hair/business2
- name = "Business Hair 2"
- icon_state = "hair_business2"
-
-/datum/sprite_accessory/hair/business3
- name = "Business Hair 3"
- icon_state = "hair_business3"
-
-/datum/sprite_accessory/hair/business4
- name = "Business Hair 4"
- icon_state = "hair_business4"
-
-/datum/sprite_accessory/hair/buzz
- name = "Buzzcut"
- icon_state = "hair_buzzcut"
-
-/datum/sprite_accessory/hair/combover
- name = "Combover"
- icon_state = "hair_combover"
-
-/datum/sprite_accessory/hair/crew
- name = "Crewcut"
- icon_state = "hair_crewcut"
-
-/datum/sprite_accessory/hair/curls
- name = "Curls"
- icon_state = "hair_curls"
-
-/datum/sprite_accessory/hair/cut
- name = "Cut Hair"
- icon_state = "hair_c"
-
-/datum/sprite_accessory/hair/devillock
- name = "Devil Lock"
- icon_state = "hair_devilock"
-
-/datum/sprite_accessory/hair/dreadlocks
- name = "Dreadlocks"
- icon_state = "hair_dreads"
-
-/datum/sprite_accessory/hair/drillhair
- name = "Drill Hair"
- icon_state = "hair_drillhair"
-
-/datum/sprite_accessory/hair/drillhairextended
- name = "Drill Hair (Extended)"
- icon_state = "hair_drillhairextended"
-
-/datum/sprite_accessory/hair/emo
- name = "Emo"
- icon_state = "hair_emo"
-
-/datum/sprite_accessory/hair/feather
- name = "Feather"
- icon_state = "hair_feather"
-
-/datum/sprite_accessory/hair/sargeant
- name = "Flat Top"
- icon_state = "hair_sargeant"
-
-/datum/sprite_accessory/hair/bigflattop
- name = "Flat Top (Big)"
- icon_state = "hair_bigflattop"
-
-/datum/sprite_accessory/hair/fag
- name = "Flow Hair"
- icon_state = "hair_f"
-
-/datum/sprite_accessory/hair/gelled
- name = "Gelled Back"
- icon_state = "hair_gelled"
-
-/datum/sprite_accessory/hair/gentle
- name = "Gentle"
- icon_state = "hair_gentle"
-
-/datum/sprite_accessory/hair/halfbang
- name = "Half-banged Hair"
- icon_state = "hair_halfbang"
-
-/datum/sprite_accessory/hair/halfbang2
- name = "Half-banged Hair 2"
- icon_state = "hair_halfbang2"
-
-/datum/sprite_accessory/hair/hedgehog
- name = "Hedgehog Hair"
- icon_state = "hair_hedgehog"
-
-/datum/sprite_accessory/hair/himecut
- name = "Hime Cut"
- icon_state = "hair_himecut"
-
-/datum/sprite_accessory/hair/himecut2
- name = "Hime Cut 2"
- icon_state = "hair_himecut2"
-
-/datum/sprite_accessory/hair/himeup
- name = "Hime Updo"
- icon_state = "hair_himeup"
-
-/datum/sprite_accessory/hair/hitop
- name = "Hitop"
- icon_state = "hair_hitop"
-
-/datum/sprite_accessory/hair/jensen
- name = "Jensen Hair"
- icon_state = "hair_jensen"
-
-/datum/sprite_accessory/hair/keanu
- name = "Keanu Hair"
- icon_state = "hair_keanu"
-
-/datum/sprite_accessory/hair/kusangi
- name = "Kusanagi Hair"
- icon_state = "hair_kusanagi"
-
-/datum/sprite_accessory/hair/long
- name = "Long Hair 1"
- icon_state = "hair_long"
-
-/datum/sprite_accessory/hair/long2
- name = "Long Hair 2"
- icon_state = "hair_long2"
-
-/datum/sprite_accessory/hair/long3
- name = "Long Hair 3"
- icon_state = "hair_long3"
-
-/datum/sprite_accessory/hair/long_over_eye
- name = "Long Over Eye"
- icon_state = "hair_longovereye"
-
-/datum/sprite_accessory/hair/longbangs
- name = "Long Bangs"
- icon_state = "hair_lbangs"
-
-/datum/sprite_accessory/hair/longemo
- name = "Long Emo"
- icon_state = "hair_longemo"
-
-/datum/sprite_accessory/hair/longfringe
- name = "Long Fringe"
- icon_state = "hair_longfringe"
-
-/datum/sprite_accessory/hair/sidepartlongalt
- name = "Long Side Part"
- icon_state = "hair_longsidepart"
-
-/datum/sprite_accessory/hair/megaeyebrows
- name = "Mega Eyebrows"
- icon_state = "hair_megaeyebrows"
-
-/datum/sprite_accessory/hair/messy
- name = "Messy"
- icon_state = "hair_messy"
-
-/datum/sprite_accessory/hair/mohawk
- name = "Mohawk"
- icon_state = "hair_d"
-
-/datum/sprite_accessory/hair/reversemohawk
- name = "Mohawk (Reverse)"
- icon_state = "hair_reversemohawk"
-
-/datum/sprite_accessory/hair/odango
- name = "Odango"
- icon_state = "hair_odango"
-
-/datum/sprite_accessory/hair/ombre
- name = "Ombre"
- icon_state = "hair_ombre"
-
-/datum/sprite_accessory/hair/oneshoulder
- name = "One Shoulder"
- icon_state = "hair_oneshoulder"
-
-/datum/sprite_accessory/hair/over_eye
- name = "Over Eye"
- icon_state = "hair_shortovereye"
-
-//Donator item - fractious
-/datum/sprite_accessory/hair/over_eye_fr
- name = "Over Eye (fract)"
- icon_state = "hair_shortovereye_1f"
- ckeys_allowed = list("fractious")
-
-/datum/sprite_accessory/hair/parted
- name = "Parted"
- icon_state = "hair_parted"
-
-/datum/sprite_accessory/hair/partedside
- name = "Parted (Side)"
- icon_state = "hair_part"
-
-/datum/sprite_accessory/hair/kagami
- name = "Pigtails"
- icon_state = "hair_kagami"
-
-/datum/sprite_accessory/hair/pigtail
- name = "Pigtails 2"
- icon_state = "hair_pigtails"
-
-/datum/sprite_accessory/hair/pigtail2
- name = "Pigtails 3"
- icon_state = "hair_pigtails2"
-
-/datum/sprite_accessory/hair/pixie
- name = "Pixie Cut"
- icon_state = "hair_pixie"
-
-/datum/sprite_accessory/hair/pompadour
- name = "Pompadour"
- icon_state = "hair_pompadour"
-
-/datum/sprite_accessory/hair/bigpompadour
- name = "Pompadour (Big)"
- icon_state = "hair_bigpompadour"
-
-/datum/sprite_accessory/hair/ponytail1
- name = "Ponytail"
- icon_state = "hair_ponytail"
-
-/datum/sprite_accessory/hair/ponytail2
- name = "Ponytail 2"
- icon_state = "hair_ponytail2"
-
-/datum/sprite_accessory/hair/ponytail3
- name = "Ponytail 3"
- icon_state = "hair_ponytail3"
-
-/datum/sprite_accessory/hair/ponytail4
- name = "Ponytail 4"
- icon_state = "hair_ponytail4"
-
-/datum/sprite_accessory/hair/ponytail5
- name = "Ponytail 5"
- icon_state = "hair_ponytail5"
-
-/datum/sprite_accessory/hair/highponytail
- name = "Ponytail (High)"
- icon_state = "hair_highponytail"
-
-/datum/sprite_accessory/hair/longponytail
- name = "Ponytail (Long)"
- icon_state = "hair_longstraightponytail"
-
-/datum/sprite_accessory/hair/sidetail
- name = "Ponytail (Side)"
- icon_state = "hair_sidetail"
-
-/datum/sprite_accessory/hair/sidetail2
- name = "Ponytail (Side) 2"
- icon_state = "hair_sidetail2"
-
-/datum/sprite_accessory/hair/sidetail3
- name = "Ponytail (Side) 3"
- icon_state = "hair_sidetail3"
-
-/datum/sprite_accessory/hair/sidetail4
- name = "Ponytail (Side) 4"
- icon_state = "hair_sidetail4"
-
-/datum/sprite_accessory/hair/quiff
- name = "Quiff"
- icon_state = "hair_quiff"
-
-/datum/sprite_accessory/hair/short
- name = "Short Hair"
- icon_state = "hair_a"
-
-/datum/sprite_accessory/hair/shorthair2
- name = "Short Hair 2"
- icon_state = "hair_shorthair2"
-
-/datum/sprite_accessory/hair/shorthair3
- name = "Short Hair 3"
- icon_state = "hair_shorthair3"
-
-/datum/sprite_accessory/hair/shoulderlength
- name = "Shoulder-length Hair"
- icon_state = "hair_b"
-
-/datum/sprite_accessory/hair/sidecut
- name = "Sidecut"
- icon_state = "hair_sidecut"
-
-/datum/sprite_accessory/hair/skinhead
- name = "Skinhead"
- icon_state = "hair_skinhead"
-
-/datum/sprite_accessory/hair/protagonist
- name = "Slightly Long Hair"
- icon_state = "hair_protagonist"
-
-/datum/sprite_accessory/hair/spiky
- name = "Spiky"
- icon_state = "hair_spikey"
-
-/datum/sprite_accessory/hair/spiky2
- name = "Spiky 2"
- icon_state = "hair_spiky"
-
-/datum/sprite_accessory/hair/spiky3
- name = "Spiky 3"
- icon_state = "hair_spiky2"
-
-/datum/sprite_accessory/hair/swept
- name = "Swept Back Hair"
- icon_state = "hair_swept"
-
-/datum/sprite_accessory/hair/swept2
- name = "Swept Back Hair 2"
- icon_state = "hair_swept2"
-
-/datum/sprite_accessory/hair/tressshoulder
- name = "Tress Shoulder"
- icon_state = "hair_tressshoulder"
-
-/datum/sprite_accessory/hair/updo
- name = "Updo"
- icon_state = "hair_updo"
-
-/datum/sprite_accessory/hair/longer
- name = "Very Long Hair"
- icon_state = "hair_vlong"
-
-/datum/sprite_accessory/hair/longest
- name = "Very Long Hair 2"
- icon_state = "hair_longest"
-
-/datum/sprite_accessory/hair/longest2
- name = "Very Long Over Eye"
- icon_state = "hair_longest2"
-
-/datum/sprite_accessory/hair/longestalt
- name = "Very Long with Fringe"
- icon_state = "hair_vlongfringe"
-
-/////////////////////////////
-// Facial Hair Definitions //
-/////////////////////////////
-
-/datum/sprite_accessory/facial_hair
- icon = 'icons/mob/human_face.dmi'
- gender = MALE // barf (unless you're a dorf, dorfs dig chix w/ beards :P)
-
-// please make sure they're sorted alphabetically and categorized
-
-/datum/sprite_accessory/facial_hair/abe
- name = "Beard (Abraham Lincoln)"
- icon_state = "facial_abe"
-
-/datum/sprite_accessory/facial_hair/brokenman
- name = "Beard (Broken Man)"
- icon_state = "facial_brokenman"
-
-/datum/sprite_accessory/facial_hair/chinstrap
- name = "Beard (Chinstrap)"
- icon_state = "facial_chin"
-
-/datum/sprite_accessory/facial_hair/dwarf
- name = "Beard (Dwarf)"
- icon_state = "facial_dwarf"
-
-/datum/sprite_accessory/facial_hair/fiveoclock
- name = "Beard (Five o Clock Shadow)"
- icon_state = "facial_fiveoclock"
-
-/datum/sprite_accessory/facial_hair/fullbeard
- name = "Beard (Full)"
- icon_state = "facial_fullbeard"
-
-/datum/sprite_accessory/facial_hair/gt
- name = "Beard (Goatee)"
- icon_state = "facial_gt"
-
-/datum/sprite_accessory/facial_hair/hip
- name = "Beard (Hipster)"
- icon_state = "facial_hip"
-
-/datum/sprite_accessory/facial_hair/jensen
- name = "Beard (Jensen)"
- icon_state = "facial_jensen"
-
-/datum/sprite_accessory/facial_hair/neckbeard
- name = "Beard (Neckbeard)"
- icon_state = "facial_neckbeard"
-
-/datum/sprite_accessory/facial_hair/vlongbeard
- name = "Beard (Very Long)"
- icon_state = "facial_wise"
-
-/datum/sprite_accessory/facial_hair/longbeard
- name = "Beard (Long)"
- icon_state = "facial_longbeard"
-
-/datum/sprite_accessory/facial_hair/fu
- name = "Moustache (Fu Manchu)"
- icon_state = "facial_fumanchu"
-
-/datum/sprite_accessory/facial_hair/hogan
- name = "Moustache (Hulk Hogan)"
- icon_state = "facial_hogan" //-Neek
-
-/datum/sprite_accessory/facial_hair/selleck
- name = "Moustache (Selleck)"
- icon_state = "facial_selleck"
-
-/datum/sprite_accessory/facial_hair/chaplin
- name = "Moustache (Square)"
- icon_state = "facial_chaplin"
-
-/datum/sprite_accessory/facial_hair/vandyke
- name = "Moustache (Van Dyke)"
- icon_state = "facial_vandyke"
-
-/datum/sprite_accessory/facial_hair/watson
- name = "Moustache (Watson)"
- icon_state = "facial_watson"
-
-/datum/sprite_accessory/facial_hair/shaved
- name = "Shaved"
- icon_state = null
- gender = NEUTER
-
-/datum/sprite_accessory/facial_hair/elvis
- name = "Sideburns (Elvis)"
- icon_state = "facial_elvis"
-
-
-///////////////////////////
-// Underwear Definitions //
-///////////////////////////
-/datum/sprite_accessory/underwear
- icon = 'icons/mob/underwear.dmi'
-
-/datum/sprite_accessory/underwear/nude
- name = "Nude"
- icon_state = null
- gender = NEUTER
-
-/datum/sprite_accessory/underwear/male_mankini
- name = "Mankini"
- icon_state = "male_mankini"
- gender = MALE
-
-/datum/sprite_accessory/underwear/male_black
- name = "Men's Black"
- icon_state = "male_black"
- gender = MALE
-
-/datum/sprite_accessory/underwear/male_blackalt
- name = "Men's Black Boxer"
- icon_state = "male_blackalt"
- gender = MALE
-
-/datum/sprite_accessory/underwear/male_blue
- name = "Men's Blue"
- icon_state = "male_blue"
- gender = MALE
-
-/datum/sprite_accessory/underwear/male_green
- name = "Men's Green"
- icon_state = "male_green"
- gender = MALE
-
-/datum/sprite_accessory/underwear/male_grey
- name = "Men's Grey"
- icon_state = "male_grey"
- gender = MALE
-
-/datum/sprite_accessory/underwear/male_greyalt
- name = "Men's Grey Boxer"
- icon_state = "male_greyalt"
- gender = MALE
-
-/datum/sprite_accessory/underwear/male_hearts
- name = "Men's Hearts Boxer"
- icon_state = "male_hearts"
- gender = MALE
-
-/datum/sprite_accessory/underwear/male_kinky
- name = "Men's Kinky"
- icon_state = "male_kinky"
- gender = MALE
-
-/datum/sprite_accessory/underwear/male_red
- name = "Men's Red"
- icon_state = "male_red"
- gender = MALE
-
-/datum/sprite_accessory/underwear/male_stripe
- name = "Men's Striped Boxer"
- icon_state = "male_stripe"
- gender = MALE
-
-/datum/sprite_accessory/underwear/male_commie
- name = "Men's Striped Commie Boxer"
- icon_state = "male_commie"
- gender = MALE
-
-/datum/sprite_accessory/underwear/male_usastripe
- name = "Men's Striped Freedom Boxer"
- icon_state = "male_assblastusa"
- gender = MALE
-
-/datum/sprite_accessory/underwear/male_uk
- name = "Men's Striped UK Boxer"
- icon_state = "male_uk"
- gender = MALE
-
-/datum/sprite_accessory/underwear/male_white
- name = "Men's White"
- icon_state = "male_white"
- gender = MALE
-
-/datum/sprite_accessory/underwear/female_babydoll
- name = "Babydoll"
- icon_state = "female_babydoll"
- gender = FEMALE
-
-/datum/sprite_accessory/underwear/female_babyblue
- name = "Ladies' Baby-Blue"
- icon_state = "female_babyblue"
- gender = FEMALE
-
-/datum/sprite_accessory/underwear/female_black
- name = "Ladies' Black"
- icon_state = "female_black"
- gender = FEMALE
-
-/datum/sprite_accessory/underwear/female_black_neko
- name = "Ladies' Black Neko"
- icon_state = "female_neko_black"
- gender = FEMALE
-
-/datum/sprite_accessory/underwear/female_blackalt
- name = "Ladies' Black Sport"
- icon_state = "female_blackalt"
- gender = FEMALE
-
-/datum/sprite_accessory/underwear/female_blue
- name = "Ladies' Blue"
- icon_state = "female_blue"
- gender = FEMALE
-
-/datum/sprite_accessory/underwear/female_commie
- name = "Ladies' Commie"
- icon_state = "female_commie"
- gender = FEMALE
-
-/datum/sprite_accessory/underwear/female_usastripe
- name = "Ladies' Freedom"
- icon_state = "female_assblastusa"
- gender = FEMALE
-
-/datum/sprite_accessory/underwear/female_green
- name = "Ladies' Green"
- icon_state = "female_green"
- gender = FEMALE
-
-/datum/sprite_accessory/underwear/female_kinky
- name = "Ladies' Kinky"
- icon_state = "female_kinky"
- gender = FEMALE
-
-/datum/sprite_accessory/underwear/female_pink
- name = "Ladies' Pink"
- icon_state = "female_pink"
- gender = FEMALE
-
-/datum/sprite_accessory/underwear/female_red
- name = "Ladies' Red"
- icon_state = "female_red"
- gender = FEMALE
-
-/datum/sprite_accessory/underwear/swimsuit
- name = "Ladies' Swimsuit (Black)"
- icon_state = "swim_black"
- gender = FEMALE
-
-/datum/sprite_accessory/underwear/swimsuit_blue
- name = "Ladies' Swimsuit (Blue)"
- icon_state = "swim_blue"
- gender = FEMALE
-
-/datum/sprite_accessory/underwear/swimsuit_green
- name = "Ladies' Swimsuit (Green)"
- icon_state = "swim_green"
- gender = FEMALE
-
-/datum/sprite_accessory/underwear/swimsuit_purple
- name = "Ladies' Swimsuit (Purple)"
- icon_state = "swim_purple"
- gender = FEMALE
-
-/datum/sprite_accessory/underwear/swimsuit_red
- name = "Ladies' Swimsuit (Red)"
- icon_state = "swim_red"
- gender = FEMALE
-
-/datum/sprite_accessory/underwear/female_thong
- name = "Ladies' Thong"
- icon_state = "female_thong"
- gender = FEMALE
-
-/datum/sprite_accessory/underwear/female_uk
- name = "Ladies' UK"
- icon_state = "female_uk"
- gender = FEMALE
-
-/datum/sprite_accessory/underwear/female_white
- name = "Ladies' White"
- icon_state = "female_white"
- gender = FEMALE
-
-/datum/sprite_accessory/underwear/female_white_neko
- name = "Ladies' White Neko"
- icon_state = "female_neko_white"
- gender = FEMALE
-
-/datum/sprite_accessory/underwear/female_whitealt
- name = "Ladies' White Sport"
- icon_state = "female_whitealt"
- gender = FEMALE
-
-/datum/sprite_accessory/underwear/female_yellow
- name = "Ladies' Yellow"
- icon_state = "female_yellow"
- gender = FEMALE
-
-////////////////////////////
-// Undershirt Definitions //
-////////////////////////////
-
-/datum/sprite_accessory/undershirt
- icon = 'icons/mob/underwear.dmi'
-
-/datum/sprite_accessory/undershirt/nude
- name = "Nude"
- icon_state = null
- gender = NEUTER
-
-// please make sure they're sorted alphabetically and categorized
-
-/datum/sprite_accessory/undershirt/bluejersey
- name = "Jersey (Blue)"
- icon_state = "shirt_bluejersey"
- gender = NEUTER
-
-/datum/sprite_accessory/undershirt/redjersey
- name = "Jersey (Red)"
- icon_state = "shirt_redjersey"
- gender = NEUTER
-
-/datum/sprite_accessory/undershirt/bluepolo
- name = "Polo Shirt (Blue)"
- icon_state = "bluepolo"
- gender = NEUTER
-
-/datum/sprite_accessory/undershirt/grayyellowpolo
- name = "Polo Shirt (Gray-Yellow)"
- icon_state = "grayyellowpolo"
- gender = NEUTER
-
-/datum/sprite_accessory/undershirt/redpolo
- name = "Polo Shirt (Red)"
- icon_state = "redpolo"
- gender = NEUTER
-
-/datum/sprite_accessory/undershirt/whitepolo
- name = "Polo Shirt (White)"
- icon_state = "whitepolo"
- gender = NEUTER
-
-/datum/sprite_accessory/undershirt/alienshirt
- name = "Shirt (Alien)"
- icon_state = "shirt_alien"
- gender = NEUTER
-
-/datum/sprite_accessory/undershirt/mondmondjaja
- name = "Shirt (Band)"
- icon_state = "band"
- gender = NEUTER
-
-/datum/sprite_accessory/undershirt/shirt_black
- name = "Shirt (Black)"
- icon_state = "shirt_black"
- gender = NEUTER
-
-/datum/sprite_accessory/undershirt/blueshirt
- name = "Shirt (Blue)"
- icon_state = "shirt_blue"
- gender = NEUTER
-
-/datum/sprite_accessory/undershirt/clownshirt
- name = "Shirt (Clown)"
- icon_state = "shirt_clown"
- gender = NEUTER
-
-/datum/sprite_accessory/undershirt/commie
- name = "Shirt (Commie)"
- icon_state = "shirt_commie"
- gender = NEUTER
-
-/datum/sprite_accessory/undershirt/greenshirt
- name = "Shirt (Green)"
- icon_state = "shirt_green"
- gender = NEUTER
-
-/datum/sprite_accessory/undershirt/shirt_grey
- name = "Shirt (Grey)"
- icon_state = "shirt_grey"
- gender = NEUTER
-
-/datum/sprite_accessory/undershirt/ian
- name = "Shirt (Ian)"
- icon_state = "ian"
- gender = NEUTER
-
-/datum/sprite_accessory/undershirt/ilovent
- name = "Shirt (I Love NT)"
- icon_state = "ilovent"
- gender = NEUTER
-
-/datum/sprite_accessory/undershirt/lover
- name = "Shirt (Lover)"
- icon_state = "lover"
- gender = NEUTER
-
-/datum/sprite_accessory/undershirt/matroska
- name = "Shirt (Matroska)"
- icon_state = "matroska"
- gender = NEUTER
-
-/datum/sprite_accessory/undershirt/meat
- name = "Shirt (Meat)"
- icon_state = "shirt_meat"
- gender = NEUTER
-
-/datum/sprite_accessory/undershirt/nano
- name = "Shirt (Nanotrasen)"
- icon_state = "shirt_nano"
- gender = NEUTER
-
-/datum/sprite_accessory/undershirt/peace
- name = "Shirt (Peace)"
- icon_state = "peace"
- gender = NEUTER
-
-/datum/sprite_accessory/undershirt/pacman
- name = "Shirt (Pogoman)"
- icon_state = "pogoman"
- gender = NEUTER
-
-/datum/sprite_accessory/undershirt/question
- name = "Shirt (Question)"
- icon_state = "shirt_question"
- gender = NEUTER
-
-/datum/sprite_accessory/undershirt/redshirt
- name = "Shirt (Red)"
- icon_state = "shirt_red"
- gender = NEUTER
-
-/datum/sprite_accessory/undershirt/skull
- name = "Shirt (Skull)"
- icon_state = "shirt_skull"
- gender = NEUTER
-
-/datum/sprite_accessory/undershirt/ss13
- name = "Shirt (SS13)"
- icon_state = "shirt_ss13"
- gender = NEUTER
-
-/datum/sprite_accessory/undershirt/stripe
- name = "Shirt (Striped)"
- icon_state = "shirt_stripes"
- gender = NEUTER
-
-/datum/sprite_accessory/undershirt/tiedye
- name = "Shirt (Tie-dye)"
- icon_state = "shirt_tiedye"
- gender = NEUTER
-
-/datum/sprite_accessory/undershirt/uk
- name = "Shirt (UK)"
- icon_state = "uk"
- gender = NEUTER
-
-/datum/sprite_accessory/undershirt/usa
- name = "Shirt (USA)"
- icon_state = "shirt_assblastusa"
- gender = NEUTER
-
-/datum/sprite_accessory/undershirt/shirt_white
- name = "Shirt (White)"
- icon_state = "shirt_white"
- gender = NEUTER
-
-/datum/sprite_accessory/undershirt/blackshortsleeve
- name = "Short-sleeved Shirt (Black)"
- icon_state = "blackshortsleeve"
- gender = NEUTER
-
-/datum/sprite_accessory/undershirt/blueshortsleeve
- name = "Short-sleeved Shirt (Blue)"
- icon_state = "blueshortsleeve"
- gender = NEUTER
-
-/datum/sprite_accessory/undershirt/greenshortsleeve
- name = "Short-sleeved Shirt (Green)"
- icon_state = "greenshortsleeve"
- gender = NEUTER
-
-/datum/sprite_accessory/undershirt/purpleshortsleeve
- name = "Short-sleeved Shirt (Purple)"
- icon_state = "purpleshortsleeve"
- gender = NEUTER
-
-/datum/sprite_accessory/undershirt/whiteshortsleeve
- name = "Short-sleeved Shirt (White)"
- icon_state = "whiteshortsleeve"
- gender = NEUTER
-
-/datum/sprite_accessory/undershirt/sports_bra
- name = "Sports Bra"
- icon_state = "sports_bra"
- gender = NEUTER
-
-/datum/sprite_accessory/undershirt/sports_bra2
- name = "Sports Bra (Alt)"
- icon_state = "sports_bra_alt"
- gender = NEUTER
-
-/datum/sprite_accessory/undershirt/blueshirtsport
- name = "Sports Shirt (Blue)"
- icon_state = "blueshirtsport"
- gender = NEUTER
-
-/datum/sprite_accessory/undershirt/greenshirtsport
- name = "Sports Shirt (Green)"
- icon_state = "greenshirtsport"
- gender = NEUTER
-
-/datum/sprite_accessory/undershirt/redshirtsport
- name = "Sports Shirt (Red)"
- icon_state = "redshirtsport"
- gender = NEUTER
-
-/datum/sprite_accessory/undershirt/tank_black
- name = "Tank Top (Black)"
- icon_state = "tank_black"
- gender = NEUTER
-
-/datum/sprite_accessory/undershirt/tankfire
- name = "Tank Top (Fire)"
- icon_state = "tank_fire"
- gender = NEUTER
-
-/datum/sprite_accessory/undershirt/tank_grey
- name = "Tank Top (Grey)"
- icon_state = "tank_grey"
- gender = NEUTER
-
-/datum/sprite_accessory/undershirt/female_midriff
- name = "Tank Top (Midriff)"
- icon_state = "tank_midriff"
- gender = FEMALE
-
-/datum/sprite_accessory/undershirt/tank_red
- name = "Tank Top (Red)"
- icon_state = "tank_red"
- gender = NEUTER
-
-/datum/sprite_accessory/undershirt/tankstripe
- name = "Tank Top (Striped)"
- icon_state = "tank_stripes"
- gender = NEUTER
-
-/datum/sprite_accessory/undershirt/tank_white
- name = "Tank Top (White)"
- icon_state = "tank_white"
- gender = NEUTER
-
-/datum/sprite_accessory/undershirt/redtop
- name = "Top (Red)"
- icon_state = "redtop"
- gender = FEMALE
-
-/datum/sprite_accessory/undershirt/whitetop
- name = "Top (White)"
- icon_state = "whitetop"
- gender = FEMALE
-
-/datum/sprite_accessory/undershirt/tshirt_blue
- name = "T-Shirt (Blue)"
- icon_state = "blueshirt"
- gender = NEUTER
-
-/datum/sprite_accessory/undershirt/tshirt_green
- name = "T-Shirt (Green)"
- icon_state = "greenshirt"
- gender = NEUTER
-
-/datum/sprite_accessory/undershirt/tshirt_red
- name = "T-Shirt (Red)"
- icon_state = "redshirt"
- gender = NEUTER
-
-/datum/sprite_accessory/undershirt/yellowshirt
- name = "T-Shirt (Yellow)"
- icon_state = "yellowshirt"
- gender = NEUTER
-
-///////////////////////
-// Socks Definitions //
-///////////////////////
-
-/datum/sprite_accessory/socks
- icon = 'icons/mob/underwear.dmi'
-
-/datum/sprite_accessory/socks/nude
- name = "Nude"
- icon_state = null
-
-// please make sure they're sorted alphabetically and categorized
-
-/datum/sprite_accessory/socks/black_knee
- name = "Knee-high (Black)"
- icon_state = "black_knee"
-
-/datum/sprite_accessory/socks/commie_knee
- name = "Knee-High (Commie)"
- icon_state = "commie_knee"
-
-/datum/sprite_accessory/socks/usa_knee
- name = "Knee-High (Freedom)"
- icon_state = "assblastusa_knee"
-
-/datum/sprite_accessory/socks/rainbow_knee
- name = "Knee-high (Rainbow)"
- icon_state = "rainbow_knee"
-
-/datum/sprite_accessory/socks/striped_knee
- name = "Knee-high (Striped)"
- icon_state = "striped_knee"
-
-/datum/sprite_accessory/socks/thin_knee
- name = "Knee-high (Thin)"
- icon_state = "thin_knee"
-
-/datum/sprite_accessory/socks/uk_knee
- name = "Knee-High (UK)"
- icon_state = "uk_knee"
-
-/datum/sprite_accessory/socks/white_knee
- name = "Knee-high (White)"
- icon_state = "white_knee"
-
-/datum/sprite_accessory/socks/black_norm
- name = "Normal (Black)"
- icon_state = "black_norm"
-
-/datum/sprite_accessory/socks/white_norm
- name = "Normal (White)"
- icon_state = "white_norm"
-
-/datum/sprite_accessory/socks/pantyhose
- name = "Pantyhose"
- icon_state = "pantyhose"
-
-/datum/sprite_accessory/socks/black_short
- name = "Short (Black)"
- icon_state = "black_short"
-
-/datum/sprite_accessory/socks/white_short
- name = "Short (White)"
- icon_state = "white_short"
-
-/datum/sprite_accessory/socks/black_thigh
- name = "Thigh-high (Black)"
- icon_state = "black_thigh"
-
-/datum/sprite_accessory/socks/commie_thigh
- name = "Thigh-high (Commie)"
- icon_state = "commie_thigh"
-
-/datum/sprite_accessory/socks/usa_thigh
- name = "Thigh-high (Freedom)"
- icon_state = "assblastusa_thigh"
-
-/datum/sprite_accessory/socks/rainbow_thigh
- name = "Thigh-high (Rainbow)"
- icon_state = "rainbow_thigh"
-
-/datum/sprite_accessory/socks/striped_thigh
- name = "Thigh-high (Striped)"
- icon_state = "striped_thigh"
-
-/datum/sprite_accessory/socks/thin_thigh
- name = "Thigh-high (Thin)"
- icon_state = "thin_thigh"
-
-/datum/sprite_accessory/socks/uk_thigh
- name = "Thigh-high (UK)"
- icon_state = "uk_thigh"
-
-/datum/sprite_accessory/socks/white_thigh
- name = "Thigh-high (White)"
- icon_state = "white_thigh"
-
-//////////.//////////////////
-// MutantParts Definitions //
-/////////////////////////////
-
-/datum/sprite_accessory/body_markings
- icon = 'icons/mob/mutant_bodyparts.dmi'
-
-/datum/sprite_accessory/body_markings/none
- name = "None"
- icon_state = "none"
-
-/datum/sprite_accessory/body_markings/dtiger
- name = "Dark Tiger Body"
- icon_state = "dtiger"
- gender_specific = 1
-
-/datum/sprite_accessory/body_markings/ltiger
- name = "Light Tiger Body"
- icon_state = "ltiger"
- gender_specific = 1
-
-/datum/sprite_accessory/body_markings/lbelly
- name = "Light Belly"
- icon_state = "lbelly"
- gender_specific = 1
-
-/datum/sprite_accessory/tails
- icon = 'icons/mob/mutant_bodyparts.dmi'
-
-/datum/sprite_accessory/tails_animated
- icon = 'icons/mob/mutant_bodyparts.dmi'
-
-/datum/sprite_accessory/tails/lizard/smooth
- name = "Smooth"
- icon_state = "smooth"
-
-/datum/sprite_accessory/tails_animated/lizard/smooth
- name = "Smooth"
- icon_state = "smooth"
-
-/datum/sprite_accessory/tails/lizard/dtiger
- name = "Dark Tiger"
- icon_state = "dtiger"
-
-/datum/sprite_accessory/tails_animated/lizard/dtiger
- name = "Dark Tiger"
- icon_state = "dtiger"
-
-/datum/sprite_accessory/tails/lizard/ltiger
- name = "Light Tiger"
- icon_state = "ltiger"
-
-/datum/sprite_accessory/tails_animated/lizard/ltiger
- name = "Light Tiger"
- icon_state = "ltiger"
-
-/datum/sprite_accessory/tails/lizard/spikes
- name = "Spikes"
- icon_state = "spikes"
-
-/datum/sprite_accessory/tails_animated/lizard/spikes
- name = "Spikes"
- icon_state = "spikes"
-
-/datum/sprite_accessory/tails/human/none
- name = "None"
- icon_state = "none"
-
-/datum/sprite_accessory/tails_animated/human/none
- name = "None"
- icon_state = "none"
-/*
-/datum/sprite_accessory/tails/human/cat
- name = "Cat"
- icon_state = "cat"
- color_src = HAIR
-
-/datum/sprite_accessory/tails_animated/human/cat
- name = "Cat"
- icon_state = "cat"
- color_src = HAIR*/
-
-/datum/sprite_accessory/snouts
- icon = 'icons/mob/mutant_bodyparts.dmi'
-
-/datum/sprite_accessory/snouts/sharp
- name = "Sharp"
- icon_state = "sharp"
-
-/datum/sprite_accessory/snouts/round
- name = "Round"
- icon_state = "round"
-
-/datum/sprite_accessory/snouts/sharplight
- name = "Sharp + Light"
- icon_state = "sharplight"
-
-/datum/sprite_accessory/snouts/roundlight
- name = "Round + Light"
- icon_state = "roundlight"
-
-/datum/sprite_accessory/horns
- icon = 'icons/mob/mutant_bodyparts.dmi'
-
-/datum/sprite_accessory/horns/none
- name = "None"
- icon_state = "none"
-
-/datum/sprite_accessory/horns/simple
- name = "Simple"
- icon_state = "simple"
-
-/datum/sprite_accessory/horns/short
- name = "Short"
- icon_state = "short"
-
-/datum/sprite_accessory/horns/curled
- name = "Curled"
- icon_state = "curled"
-
-/datum/sprite_accessory/horns/ram
- name = "Ram"
- icon_state = "ram"
-
-/datum/sprite_accessory/horns/angler
- name = "Angeler"
- icon_state = "angler"
-
-/datum/sprite_accessory/ears
- icon = 'icons/mob/mutant_bodyparts.dmi'
-
-/datum/sprite_accessory/ears/none
- name = "None"
- icon_state = "none"
-
-/datum/sprite_accessory/ears/cat
- name = "Cat"
- icon_state = "cat"
- hasinner = 1
- color_src = HAIR
-
-/datum/sprite_accessory/wings/none
- name = "None"
- icon_state = "none"
-
-/datum/sprite_accessory/wings_open
- icon = 'icons/mob/wings.dmi'
-
-/datum/sprite_accessory/wings_open/angel
- name = "Angel"
- icon_state = "angel"
- color_src = 0
- dimension_x = 46
- center = TRUE
- dimension_y = 34
-
-/datum/sprite_accessory/wings
- icon = 'icons/mob/wings.dmi'
-
-/datum/sprite_accessory/wings/angel
- name = "Angel"
- icon_state = "angel"
- color_src = 0
- dimension_x = 46
- center = TRUE
- dimension_y = 34
- locked = TRUE
-
-/datum/sprite_accessory/frills
- icon = 'icons/mob/mutant_bodyparts.dmi'
-
-/datum/sprite_accessory/frills/none
- name = "None"
- icon_state = "none"
-
-/datum/sprite_accessory/frills/simple
- name = "Simple"
- icon_state = "simple"
-
-/datum/sprite_accessory/frills/short
- name = "Short"
- icon_state = "short"
-
-/datum/sprite_accessory/frills/aquatic
- name = "Aquatic"
- icon_state = "aqua"
-
-/datum/sprite_accessory/spines
- icon = 'icons/mob/mutant_bodyparts.dmi'
-
-/datum/sprite_accessory/spines_animated
- icon = 'icons/mob/mutant_bodyparts.dmi'
-
-/datum/sprite_accessory/spines/none
- name = "None"
- icon_state = "none"
-
-/datum/sprite_accessory/spines_animated/none
- name = "None"
- icon_state = "none"
-
-/datum/sprite_accessory/spines/short
- name = "Short"
- icon_state = "short"
-
-/datum/sprite_accessory/spines_animated/short
- name = "Short"
- icon_state = "short"
-
-/datum/sprite_accessory/spines/shortmeme
- name = "Short + Membrane"
- icon_state = "shortmeme"
-
-/datum/sprite_accessory/spines_animated/shortmeme
- name = "Short + Membrane"
- icon_state = "shortmeme"
-
-/datum/sprite_accessory/spines/long
- name = "Long"
- icon_state = "long"
-
-/datum/sprite_accessory/spines_animated/long
- name = "Long"
- icon_state = "long"
-
-/datum/sprite_accessory/spines/longmeme
- name = "Long + Membrane"
- icon_state = "longmeme"
-
-/datum/sprite_accessory/spines_animated/longmeme
- name = "Long + Membrane"
- icon_state = "longmeme"
-
-/datum/sprite_accessory/spines/aqautic
- name = "Aquatic"
- icon_state = "aqua"
-
-/datum/sprite_accessory/spines_animated/aqautic
- name = "Aquatic"
- icon_state = "aqua"
-
-/datum/sprite_accessory/legs //legs are a special case, they aren't actually sprite_accessories but are updated with them.
- icon = null //These datums exist for selecting legs on preference, and little else
-
-/datum/sprite_accessory/legs/none
- name = "Normal Legs"
-
-/datum/sprite_accessory/legs/digitigrade_lizard
- name = "Digitigrade Legs"
-
-/datum/sprite_accessory/caps
- icon = 'icons/mob/mutant_bodyparts.dmi'
- color_src = HAIR
-
-/datum/sprite_accessory/caps/round
- name = "Round"
- icon_state = "round"
-
-/datum/sprite_accessory/moth_wings
- icon = 'icons/mob/wings.dmi'
- color_src = null
-
-/datum/sprite_accessory/moth_wings/plain
- name = "Plain"
- icon_state = "plain"
-
-/datum/sprite_accessory/moth_wings/monarch
- name = "Monarch"
- icon_state = "monarch"
-
-/datum/sprite_accessory/moth_wings/luna
- name = "Luna"
- icon_state = "luna"
-
-/datum/sprite_accessory/moth_wings/atlas
- name = "Atlas"
- icon_state = "atlas"
-
-/datum/sprite_accessory/moth_wings/reddish
- name = "Reddish"
- icon_state = "redish"
-
-/datum/sprite_accessory/moth_wings/royal
- name = "Royal"
- icon_state = "royal"
-
-/datum/sprite_accessory/moth_wings/gothic
- name = "Gothic"
- icon_state = "gothic"
-
-/datum/sprite_accessory/moth_wings/lovers
- name = "Lovers"
- icon_state = "lovers"
-
-/datum/sprite_accessory/moth_wings/whitefly
- name = "White Fly"
- icon_state = "whitefly"
-
-/datum/sprite_accessory/moth_wings/punished
- name = "Burnt Off"
- icon_state = "punished"
- locked = TRUE
-
-/datum/sprite_accessory/moth_wings/firewatch
- name = "Firewatch"
- icon_state = "firewatch"
-
-/datum/sprite_accessory/moth_wings/deathhead
- name = "Deathshead"
- icon_state = "deathhead"
-
-/datum/sprite_accessory/moth_wings/poison
- name = "Poison"
- icon_state = "poison"
-
-/datum/sprite_accessory/moth_wings/ragged
- name = "Ragged"
- icon_state = "ragged"
-
-/datum/sprite_accessory/moth_wings/moonfly
- name = "Moon Fly"
- icon_state = "moonfly"
-
-/datum/sprite_accessory/moth_wings/snow
- name = "Snow"
- icon_state = "snow"
diff --git a/code/modules/mob/dead/new_player/sprite_accessories/_sprite_accessories.dm b/code/modules/mob/dead/new_player/sprite_accessories/_sprite_accessories.dm
new file mode 100644
index 0000000000..699c3c97e4
--- /dev/null
+++ b/code/modules/mob/dead/new_player/sprite_accessories/_sprite_accessories.dm
@@ -0,0 +1,62 @@
+/*
+
+ Hello and welcome to sprite_accessories: For sprite accessories, such as hair,
+ facial hair, and possibly tattoos and stuff somewhere along the line. This file is
+ intended to be friendly for people with little to no actual coding experience.
+ The process of adding in new hairstyles has been made pain-free and easy to do.
+ Enjoy! - Doohl
+
+
+ Notice: This all gets automatically compiled in a list in dna.dm, so you do not
+ have to define any UI values for sprite accessories manually for hair and facial
+ hair. Just add in new hair types and the game will naturally adapt.
+
+ !!WARNING!!: changing existing hair information can be VERY hazardous to savefiles,
+ to the point where you may completely corrupt a server's savefiles. Please refrain
+ from doing this unless you absolutely know what you are doing, and have defined a
+ conversion in savefile.dm
+*/
+/proc/init_sprite_accessory_subtypes(prototype, list/L, list/male, list/female,var/roundstart = FALSE)//Roundstart argument builds a specific list for roundstart parts where some parts may be locked
+ if(!istype(L))
+ L = list()
+ if(!istype(male))
+ male = list()
+ if(!istype(female))
+ female = list()
+
+ for(var/path in typesof(prototype))
+ if(path == prototype)
+ continue
+ if(roundstart)
+ var/datum/sprite_accessory/P = path
+ if(initial(P.locked))
+ continue
+ var/datum/sprite_accessory/D = new path()
+
+ if(D.icon_state)
+ L[D.name] = D
+ else
+ L += D.name
+
+ switch(D.gender)
+ if(MALE)
+ male += D.name
+ if(FEMALE)
+ female += D.name
+ else
+ male += D.name
+ female += D.name
+ return L
+
+/datum/sprite_accessory
+ var/icon //the icon file the accessory is located in
+ var/icon_state //the icon_state of the accessory
+ var/name //the preview name of the accessory
+ var/gender = NEUTER //Determines if the accessory will be skipped or included in random hair generations
+ var/gender_specific //Something that can be worn by either gender, but looks different on each
+ var/color_src = MUTCOLORS //Currently only used by mutantparts so don't worry about hair and stuff. This is the source that this accessory will get its color from. Default is MUTCOLOR, but can also be HAIR, FACEHAIR, EYECOLOR and 0 if none.
+ var/hasinner //Decides if this sprite has an "inner" part, such as the fleshy parts on ears.
+ var/locked = FALSE //Is this part locked from roundstart selection? Used for parts that apply effects
+ var/dimension_x = 32
+ var/dimension_y = 32
+ var/center = FALSE //Should we center the sprite?
\ No newline at end of file
diff --git a/code/modules/mob/dead/new_player/sprite_accessories/body_markings.dm b/code/modules/mob/dead/new_player/sprite_accessories/body_markings.dm
new file mode 100644
index 0000000000..6bce18d7ce
--- /dev/null
+++ b/code/modules/mob/dead/new_player/sprite_accessories/body_markings.dm
@@ -0,0 +1,25 @@
+//////////.//////////////////
+// MutantParts Definitions //
+/////////////////////////////
+
+/datum/sprite_accessory/body_markings
+ icon = 'icons/mob/mutant_bodyparts.dmi'
+
+/datum/sprite_accessory/body_markings/none
+ name = "None"
+ icon_state = "none"
+
+/datum/sprite_accessory/body_markings/dtiger
+ name = "Dark Tiger Body"
+ icon_state = "dtiger"
+ gender_specific = 1
+
+/datum/sprite_accessory/body_markings/ltiger
+ name = "Light Tiger Body"
+ icon_state = "ltiger"
+ gender_specific = 1
+
+/datum/sprite_accessory/body_markings/lbelly
+ name = "Light Belly"
+ icon_state = "lbelly"
+ gender_specific = 1
\ No newline at end of file
diff --git a/code/modules/mob/dead/new_player/sprite_accessories/caps.dm b/code/modules/mob/dead/new_player/sprite_accessories/caps.dm
new file mode 100644
index 0000000000..debb4865ba
--- /dev/null
+++ b/code/modules/mob/dead/new_player/sprite_accessories/caps.dm
@@ -0,0 +1,7 @@
+datum/sprite_accessory/caps
+ icon = 'icons/mob/mutant_bodyparts.dmi'
+ color_src = HAIR
+
+/datum/sprite_accessory/caps/round
+ name = "Round"
+ icon_state = "round"
\ No newline at end of file
diff --git a/code/modules/mob/dead/new_player/sprite_accessories/ears.dm b/code/modules/mob/dead/new_player/sprite_accessories/ears.dm
new file mode 100644
index 0000000000..163f8370a2
--- /dev/null
+++ b/code/modules/mob/dead/new_player/sprite_accessories/ears.dm
@@ -0,0 +1,12 @@
+/datum/sprite_accessory/ears
+ icon = 'icons/mob/mutant_bodyparts.dmi'
+
+/datum/sprite_accessory/ears/none
+ name = "None"
+ icon_state = "none"
+
+/datum/sprite_accessory/ears/cat
+ name = "Cat"
+ icon_state = "cat"
+ hasinner = 1
+ color_src = HAIR
\ No newline at end of file
diff --git a/code/modules/mob/dead/new_player/sprite_accessories/frills.dm b/code/modules/mob/dead/new_player/sprite_accessories/frills.dm
new file mode 100644
index 0000000000..93c4af6df0
--- /dev/null
+++ b/code/modules/mob/dead/new_player/sprite_accessories/frills.dm
@@ -0,0 +1,18 @@
+/datum/sprite_accessory/frills
+ icon = 'icons/mob/mutant_bodyparts.dmi'
+
+/datum/sprite_accessory/frills/none
+ name = "None"
+ icon_state = "none"
+
+/datum/sprite_accessory/frills/simple
+ name = "Simple"
+ icon_state = "simple"
+
+/datum/sprite_accessory/frills/short
+ name = "Short"
+ icon_state = "short"
+
+/datum/sprite_accessory/frills/aquatic
+ name = "Aquatic"
+ icon_state = "aqua"
\ No newline at end of file
diff --git a/code/modules/mob/dead/new_player/sprite_accessories/hair_face.dm b/code/modules/mob/dead/new_player/sprite_accessories/hair_face.dm
new file mode 100644
index 0000000000..3566f3dea5
--- /dev/null
+++ b/code/modules/mob/dead/new_player/sprite_accessories/hair_face.dm
@@ -0,0 +1,89 @@
+/////////////////////////////
+// Facial Hair Definitions //
+/////////////////////////////
+/datum/sprite_accessory/facial_hair
+ icon = 'icons/mob/human_face.dmi'
+ gender = MALE // barf (unless you're a dorf, dorfs dig chix w/ beards :P)
+
+// please make sure they're sorted alphabetically and categorized
+
+/datum/sprite_accessory/facial_hair/abe
+ name = "Beard (Abraham Lincoln)"
+ icon_state = "facial_abe"
+
+/datum/sprite_accessory/facial_hair/brokenman
+ name = "Beard (Broken Man)"
+ icon_state = "facial_brokenman"
+
+/datum/sprite_accessory/facial_hair/chinstrap
+ name = "Beard (Chinstrap)"
+ icon_state = "facial_chin"
+
+/datum/sprite_accessory/facial_hair/dwarf
+ name = "Beard (Dwarf)"
+ icon_state = "facial_dwarf"
+
+/datum/sprite_accessory/facial_hair/fiveoclock
+ name = "Beard (Five o Clock Shadow)"
+ icon_state = "facial_fiveoclock"
+
+/datum/sprite_accessory/facial_hair/fullbeard
+ name = "Beard (Full)"
+ icon_state = "facial_fullbeard"
+
+/datum/sprite_accessory/facial_hair/gt
+ name = "Beard (Goatee)"
+ icon_state = "facial_gt"
+
+/datum/sprite_accessory/facial_hair/hip
+ name = "Beard (Hipster)"
+ icon_state = "facial_hip"
+
+/datum/sprite_accessory/facial_hair/jensen
+ name = "Beard (Jensen)"
+ icon_state = "facial_jensen"
+
+/datum/sprite_accessory/facial_hair/neckbeard
+ name = "Beard (Neckbeard)"
+ icon_state = "facial_neckbeard"
+
+/datum/sprite_accessory/facial_hair/vlongbeard
+ name = "Beard (Very Long)"
+ icon_state = "facial_wise"
+
+/datum/sprite_accessory/facial_hair/longbeard
+ name = "Beard (Long)"
+ icon_state = "facial_longbeard"
+
+/datum/sprite_accessory/facial_hair/fu
+ name = "Moustache (Fu Manchu)"
+ icon_state = "facial_fumanchu"
+
+/datum/sprite_accessory/facial_hair/hogan
+ name = "Moustache (Hulk Hogan)"
+ icon_state = "facial_hogan" //-Neek
+
+/datum/sprite_accessory/facial_hair/selleck
+ name = "Moustache (Selleck)"
+ icon_state = "facial_selleck"
+
+/datum/sprite_accessory/facial_hair/chaplin
+ name = "Moustache (Square)"
+ icon_state = "facial_chaplin"
+
+/datum/sprite_accessory/facial_hair/vandyke
+ name = "Moustache (Van Dyke)"
+ icon_state = "facial_vandyke"
+
+/datum/sprite_accessory/facial_hair/watson
+ name = "Moustache (Watson)"
+ icon_state = "facial_watson"
+
+/datum/sprite_accessory/facial_hair/shaved
+ name = "Shaved"
+ icon_state = null
+ gender = NEUTER
+
+/datum/sprite_accessory/facial_hair/elvis
+ name = "Sideburns (Elvis)"
+ icon_state = "facial_elvis"
\ No newline at end of file
diff --git a/code/modules/mob/dead/new_player/sprite_accessories/hair_head.dm b/code/modules/mob/dead/new_player/sprite_accessories/hair_head.dm
new file mode 100644
index 0000000000..66c79ea0f0
--- /dev/null
+++ b/code/modules/mob/dead/new_player/sprite_accessories/hair_head.dm
@@ -0,0 +1,460 @@
+//////////////////////
+// Hair Definitions //
+//////////////////////
+/datum/sprite_accessory/hair
+ icon = 'icons/mob/human_face.dmi' // default icon for all hairs
+
+ // please make sure they're sorted alphabetically and, where needed, categorized
+ // try to capitalize the names please~
+ // try to spell
+ // you do not need to define _s or _l sub-states, game automatically does this for you
+
+/datum/sprite_accessory/hair/afro
+ name = "Afro"
+ icon_state = "hair_afro"
+
+/datum/sprite_accessory/hair/afro2
+ name = "Afro 2"
+ icon_state = "hair_afro2"
+
+/datum/sprite_accessory/hair/afro_large
+ name = "Afro (Large)"
+ icon_state = "hair_bigafro"
+
+/datum/sprite_accessory/hair/antenna
+ name = "Ahoge"
+ icon_state = "hair_antenna"
+
+/datum/sprite_accessory/hair/bald
+ name = "Bald"
+ icon_state = null
+
+/datum/sprite_accessory/hair/balding
+ name = "Balding Hair"
+ icon_state = "hair_e"
+
+/datum/sprite_accessory/hair/bedhead
+ name = "Bedhead"
+ icon_state = "hair_bedhead"
+
+/datum/sprite_accessory/hair/bedhead2
+ name = "Bedhead 2"
+ icon_state = "hair_bedheadv2"
+
+/datum/sprite_accessory/hair/bedhead3
+ name = "Bedhead 3"
+ icon_state = "hair_bedheadv3"
+
+/datum/sprite_accessory/hair/beehive
+ name = "Beehive"
+ icon_state = "hair_beehive"
+
+/datum/sprite_accessory/hair/beehive2
+ name = "Beehive 2"
+ icon_state = "hair_beehivev2"
+
+/datum/sprite_accessory/hair/bob
+ name = "Bob Hair"
+ icon_state = "hair_bob"
+
+/datum/sprite_accessory/hair/bob2
+ name = "Bob Hair 2"
+ icon_state = "hair_bob2"
+
+/datum/sprite_accessory/hair/bob3
+ name = "Bob Hair 3"
+ icon_state = "hair_bobcut"
+
+/datum/sprite_accessory/hair/bobcurl
+ name = "Bobcurl"
+ icon_state = "hair_bobcurl"
+
+/datum/sprite_accessory/hair/boddicker
+ name = "Boddicker"
+ icon_state = "hair_boddicker"
+
+/datum/sprite_accessory/hair/bowl
+ name = "Bowl"
+ icon_state = "hair_bowlcut"
+
+/datum/sprite_accessory/hair/braid
+ name = "Braid (Floorlength)"
+ icon_state = "hair_braid"
+
+/datum/sprite_accessory/hair/braided
+ name = "Braided"
+ icon_state = "hair_braided"
+
+/datum/sprite_accessory/hair/front_braid
+ name = "Braided Front"
+ icon_state = "hair_braidfront"
+
+/datum/sprite_accessory/hair/not_floorlength_braid
+ name = "Braid (High)"
+ icon_state = "hair_braid2"
+
+/datum/sprite_accessory/hair/lowbraid
+ name = "Braid (Low)"
+ icon_state = "hair_hbraid"
+
+/datum/sprite_accessory/hair/shortbraid
+ name = "Braid (Short)"
+ icon_state = "hair_shortbraid"
+
+/datum/sprite_accessory/hair/braidtail
+ name = "Braided Tail"
+ icon_state = "hair_braidtail"
+
+/datum/sprite_accessory/hair/bun
+ name = "Bun Head"
+ icon_state = "hair_bun"
+
+/datum/sprite_accessory/hair/bun2
+ name = "Bun Head 2"
+ icon_state = "hair_bunhead2"
+
+/datum/sprite_accessory/hair/largebun
+ name = "Bun (Large)"
+ icon_state = "hair_largebun"
+
+/datum/sprite_accessory/hair/business
+ name = "Business Hair"
+ icon_state = "hair_business"
+
+/datum/sprite_accessory/hair/business2
+ name = "Business Hair 2"
+ icon_state = "hair_business2"
+
+/datum/sprite_accessory/hair/business3
+ name = "Business Hair 3"
+ icon_state = "hair_business3"
+
+/datum/sprite_accessory/hair/business4
+ name = "Business Hair 4"
+ icon_state = "hair_business4"
+
+/datum/sprite_accessory/hair/buzz
+ name = "Buzzcut"
+ icon_state = "hair_buzzcut"
+
+/datum/sprite_accessory/hair/combover
+ name = "Combover"
+ icon_state = "hair_combover"
+
+/datum/sprite_accessory/hair/crew
+ name = "Crewcut"
+ icon_state = "hair_crewcut"
+
+/datum/sprite_accessory/hair/curls
+ name = "Curls"
+ icon_state = "hair_curls"
+
+/datum/sprite_accessory/hair/cut
+ name = "Cut Hair"
+ icon_state = "hair_c"
+
+/datum/sprite_accessory/hair/devillock
+ name = "Devil Lock"
+ icon_state = "hair_devilock"
+
+/datum/sprite_accessory/hair/dreadlocks
+ name = "Dreadlocks"
+ icon_state = "hair_dreads"
+
+/datum/sprite_accessory/hair/drillhair
+ name = "Drill Hair"
+ icon_state = "hair_drillhair"
+
+/datum/sprite_accessory/hair/drillhairextended
+ name = "Drill Hair (Extended)"
+ icon_state = "hair_drillhairextended"
+
+/datum/sprite_accessory/hair/emo
+ name = "Emo"
+ icon_state = "hair_emo"
+
+/datum/sprite_accessory/hair/feather
+ name = "Feather"
+ icon_state = "hair_feather"
+
+/datum/sprite_accessory/hair/sargeant
+ name = "Flat Top"
+ icon_state = "hair_sargeant"
+
+/datum/sprite_accessory/hair/bigflattop
+ name = "Flat Top (Big)"
+ icon_state = "hair_bigflattop"
+
+/datum/sprite_accessory/hair/fag
+ name = "Flow Hair"
+ icon_state = "hair_f"
+
+/datum/sprite_accessory/hair/gelled
+ name = "Gelled Back"
+ icon_state = "hair_gelled"
+
+/datum/sprite_accessory/hair/gentle
+ name = "Gentle"
+ icon_state = "hair_gentle"
+
+/datum/sprite_accessory/hair/halfbang
+ name = "Half-banged Hair"
+ icon_state = "hair_halfbang"
+
+/datum/sprite_accessory/hair/halfbang2
+ name = "Half-banged Hair 2"
+ icon_state = "hair_halfbang2"
+
+/datum/sprite_accessory/hair/hedgehog
+ name = "Hedgehog Hair"
+ icon_state = "hair_hedgehog"
+
+/datum/sprite_accessory/hair/himecut
+ name = "Hime Cut"
+ icon_state = "hair_himecut"
+
+/datum/sprite_accessory/hair/himecut2
+ name = "Hime Cut 2"
+ icon_state = "hair_himecut2"
+
+/datum/sprite_accessory/hair/himeup
+ name = "Hime Updo"
+ icon_state = "hair_himeup"
+
+/datum/sprite_accessory/hair/hitop
+ name = "Hitop"
+ icon_state = "hair_hitop"
+
+/datum/sprite_accessory/hair/jensen
+ name = "Jensen Hair"
+ icon_state = "hair_jensen"
+
+/datum/sprite_accessory/hair/keanu
+ name = "Keanu Hair"
+ icon_state = "hair_keanu"
+
+/datum/sprite_accessory/hair/kusangi
+ name = "Kusanagi Hair"
+ icon_state = "hair_kusanagi"
+
+/datum/sprite_accessory/hair/long
+ name = "Long Hair 1"
+ icon_state = "hair_long"
+
+/datum/sprite_accessory/hair/long2
+ name = "Long Hair 2"
+ icon_state = "hair_long2"
+
+/datum/sprite_accessory/hair/long3
+ name = "Long Hair 3"
+ icon_state = "hair_long3"
+
+/datum/sprite_accessory/hair/long_over_eye
+ name = "Long Over Eye"
+ icon_state = "hair_longovereye"
+
+/datum/sprite_accessory/hair/longbangs
+ name = "Long Bangs"
+ icon_state = "hair_lbangs"
+
+/datum/sprite_accessory/hair/longemo
+ name = "Long Emo"
+ icon_state = "hair_longemo"
+
+/datum/sprite_accessory/hair/longfringe
+ name = "Long Fringe"
+ icon_state = "hair_longfringe"
+
+/datum/sprite_accessory/hair/sidepartlongalt
+ name = "Long Side Part"
+ icon_state = "hair_longsidepart"
+
+/datum/sprite_accessory/hair/megaeyebrows
+ name = "Mega Eyebrows"
+ icon_state = "hair_megaeyebrows"
+
+/datum/sprite_accessory/hair/messy
+ name = "Messy"
+ icon_state = "hair_messy"
+
+/datum/sprite_accessory/hair/mohawk
+ name = "Mohawk"
+ icon_state = "hair_d"
+
+/datum/sprite_accessory/hair/reversemohawk
+ name = "Mohawk (Reverse)"
+ icon_state = "hair_reversemohawk"
+
+/datum/sprite_accessory/hair/odango
+ name = "Odango"
+ icon_state = "hair_odango"
+
+/datum/sprite_accessory/hair/ombre
+ name = "Ombre"
+ icon_state = "hair_ombre"
+
+/datum/sprite_accessory/hair/oneshoulder
+ name = "One Shoulder"
+ icon_state = "hair_oneshoulder"
+
+/datum/sprite_accessory/hair/over_eye
+ name = "Over Eye"
+ icon_state = "hair_shortovereye"
+
+//Donator item - fractious
+/datum/sprite_accessory/hair/over_eye_fr
+ name = "Over Eye (fract)"
+ icon_state = "hair_shortovereye_1f"
+ ckeys_allowed = list("fractious")
+
+/datum/sprite_accessory/hair/parted
+ name = "Parted"
+ icon_state = "hair_parted"
+
+/datum/sprite_accessory/hair/partedside
+ name = "Parted (Side)"
+ icon_state = "hair_part"
+
+/datum/sprite_accessory/hair/kagami
+ name = "Pigtails"
+ icon_state = "hair_kagami"
+
+/datum/sprite_accessory/hair/pigtail
+ name = "Pigtails 2"
+ icon_state = "hair_pigtails"
+
+/datum/sprite_accessory/hair/pigtail2
+ name = "Pigtails 3"
+ icon_state = "hair_pigtails2"
+
+/datum/sprite_accessory/hair/pixie
+ name = "Pixie Cut"
+ icon_state = "hair_pixie"
+
+/datum/sprite_accessory/hair/pompadour
+ name = "Pompadour"
+ icon_state = "hair_pompadour"
+
+/datum/sprite_accessory/hair/bigpompadour
+ name = "Pompadour (Big)"
+ icon_state = "hair_bigpompadour"
+
+/datum/sprite_accessory/hair/ponytail1
+ name = "Ponytail"
+ icon_state = "hair_ponytail"
+
+/datum/sprite_accessory/hair/ponytail2
+ name = "Ponytail 2"
+ icon_state = "hair_ponytail2"
+
+/datum/sprite_accessory/hair/ponytail3
+ name = "Ponytail 3"
+ icon_state = "hair_ponytail3"
+
+/datum/sprite_accessory/hair/ponytail4
+ name = "Ponytail 4"
+ icon_state = "hair_ponytail4"
+
+/datum/sprite_accessory/hair/ponytail5
+ name = "Ponytail 5"
+ icon_state = "hair_ponytail5"
+
+/datum/sprite_accessory/hair/highponytail
+ name = "Ponytail (High)"
+ icon_state = "hair_highponytail"
+
+/datum/sprite_accessory/hair/longponytail
+ name = "Ponytail (Long)"
+ icon_state = "hair_longstraightponytail"
+
+/datum/sprite_accessory/hair/sidetail
+ name = "Ponytail (Side)"
+ icon_state = "hair_sidetail"
+
+/datum/sprite_accessory/hair/sidetail2
+ name = "Ponytail (Side) 2"
+ icon_state = "hair_sidetail2"
+
+/datum/sprite_accessory/hair/sidetail3
+ name = "Ponytail (Side) 3"
+ icon_state = "hair_sidetail3"
+
+/datum/sprite_accessory/hair/sidetail4
+ name = "Ponytail (Side) 4"
+ icon_state = "hair_sidetail4"
+
+/datum/sprite_accessory/hair/quiff
+ name = "Quiff"
+ icon_state = "hair_quiff"
+
+/datum/sprite_accessory/hair/short
+ name = "Short Hair"
+ icon_state = "hair_a"
+
+/datum/sprite_accessory/hair/shorthair2
+ name = "Short Hair 2"
+ icon_state = "hair_shorthair2"
+
+/datum/sprite_accessory/hair/shorthair3
+ name = "Short Hair 3"
+ icon_state = "hair_shorthair3"
+
+/datum/sprite_accessory/hair/shoulderlength
+ name = "Shoulder-length Hair"
+ icon_state = "hair_b"
+
+/datum/sprite_accessory/hair/sidecut
+ name = "Sidecut"
+ icon_state = "hair_sidecut"
+
+/datum/sprite_accessory/hair/skinhead
+ name = "Skinhead"
+ icon_state = "hair_skinhead"
+
+/datum/sprite_accessory/hair/protagonist
+ name = "Slightly Long Hair"
+ icon_state = "hair_protagonist"
+
+/datum/sprite_accessory/hair/spiky
+ name = "Spiky"
+ icon_state = "hair_spikey"
+
+/datum/sprite_accessory/hair/spiky2
+ name = "Spiky 2"
+ icon_state = "hair_spiky"
+
+/datum/sprite_accessory/hair/spiky3
+ name = "Spiky 3"
+ icon_state = "hair_spiky2"
+
+/datum/sprite_accessory/hair/swept
+ name = "Swept Back Hair"
+ icon_state = "hair_swept"
+
+/datum/sprite_accessory/hair/swept2
+ name = "Swept Back Hair 2"
+ icon_state = "hair_swept2"
+
+/datum/sprite_accessory/hair/tressshoulder
+ name = "Tress Shoulder"
+ icon_state = "hair_tressshoulder"
+
+/datum/sprite_accessory/hair/updo
+ name = "Updo"
+ icon_state = "hair_updo"
+
+/datum/sprite_accessory/hair/longer
+ name = "Very Long Hair"
+ icon_state = "hair_vlong"
+
+/datum/sprite_accessory/hair/longest
+ name = "Very Long Hair 2"
+ icon_state = "hair_longest"
+
+/datum/sprite_accessory/hair/longest2
+ name = "Very Long Over Eye"
+ icon_state = "hair_longest2"
+
+/datum/sprite_accessory/hair/longestalt
+ name = "Very Long with Fringe"
+ icon_state = "hair_vlongfringe"
\ No newline at end of file
diff --git a/code/modules/mob/dead/new_player/sprite_accessories/horns.dm b/code/modules/mob/dead/new_player/sprite_accessories/horns.dm
new file mode 100644
index 0000000000..607ad650e3
--- /dev/null
+++ b/code/modules/mob/dead/new_player/sprite_accessories/horns.dm
@@ -0,0 +1,26 @@
+/datum/sprite_accessory/horns
+ icon = 'icons/mob/mutant_bodyparts.dmi'
+
+/datum/sprite_accessory/horns/none
+ name = "None"
+ icon_state = "none"
+
+/datum/sprite_accessory/horns/simple
+ name = "Simple"
+ icon_state = "simple"
+
+/datum/sprite_accessory/horns/short
+ name = "Short"
+ icon_state = "short"
+
+/datum/sprite_accessory/horns/curled
+ name = "Curled"
+ icon_state = "curled"
+
+/datum/sprite_accessory/horns/ram
+ name = "Ram"
+ icon_state = "ram"
+
+/datum/sprite_accessory/horns/angler
+ name = "Angeler"
+ icon_state = "angler"
\ No newline at end of file
diff --git a/code/modules/mob/dead/new_player/sprite_accessories/legs.dm b/code/modules/mob/dead/new_player/sprite_accessories/legs.dm
new file mode 100644
index 0000000000..7663100822
--- /dev/null
+++ b/code/modules/mob/dead/new_player/sprite_accessories/legs.dm
@@ -0,0 +1,8 @@
+/datum/sprite_accessory/legs //legs are a special case, they aren't actually sprite_accessories but are updated with them.
+ icon = null //These datums exist for selecting legs on preference, and little else
+
+/datum/sprite_accessory/legs/none
+ name = "Normal Legs"
+
+/datum/sprite_accessory/legs/digitigrade_lizard
+ name = "Digitigrade Legs"
\ No newline at end of file
diff --git a/code/modules/mob/dead/new_player/sprite_accessories/moth_wings.dm b/code/modules/mob/dead/new_player/sprite_accessories/moth_wings.dm
new file mode 100644
index 0000000000..6b8036bd69
--- /dev/null
+++ b/code/modules/mob/dead/new_player/sprite_accessories/moth_wings.dm
@@ -0,0 +1,68 @@
+/datum/sprite_accessory/moth_wings
+ icon = 'icons/mob/wings.dmi'
+ color_src = null
+
+/datum/sprite_accessory/moth_wings/plain
+ name = "Plain"
+ icon_state = "plain"
+
+/datum/sprite_accessory/moth_wings/monarch
+ name = "Monarch"
+ icon_state = "monarch"
+
+/datum/sprite_accessory/moth_wings/luna
+ name = "Luna"
+ icon_state = "luna"
+
+/datum/sprite_accessory/moth_wings/atlas
+ name = "Atlas"
+ icon_state = "atlas"
+
+/datum/sprite_accessory/moth_wings/reddish
+ name = "Reddish"
+ icon_state = "redish"
+
+/datum/sprite_accessory/moth_wings/royal
+ name = "Royal"
+ icon_state = "royal"
+
+/datum/sprite_accessory/moth_wings/gothic
+ name = "Gothic"
+ icon_state = "gothic"
+
+/datum/sprite_accessory/moth_wings/lovers
+ name = "Lovers"
+ icon_state = "lovers"
+
+/datum/sprite_accessory/moth_wings/whitefly
+ name = "White Fly"
+ icon_state = "whitefly"
+
+/datum/sprite_accessory/moth_wings/punished
+ name = "Burnt Off"
+ icon_state = "punished"
+ locked = TRUE
+
+/datum/sprite_accessory/moth_wings/firewatch
+ name = "Firewatch"
+ icon_state = "firewatch"
+
+/datum/sprite_accessory/moth_wings/deathhead
+ name = "Deathshead"
+ icon_state = "deathhead"
+
+/datum/sprite_accessory/moth_wings/poison
+ name = "Poison"
+ icon_state = "poison"
+
+/datum/sprite_accessory/moth_wings/ragged
+ name = "Ragged"
+ icon_state = "ragged"
+
+/datum/sprite_accessory/moth_wings/moonfly
+ name = "Moon Fly"
+ icon_state = "moonfly"
+
+/datum/sprite_accessory/moth_wings/snow
+ name = "Snow"
+ icon_state = "snow"
diff --git a/code/modules/mob/dead/new_player/sprite_accessories/pines.dm b/code/modules/mob/dead/new_player/sprite_accessories/pines.dm
new file mode 100644
index 0000000000..4ccbc3d9ea
--- /dev/null
+++ b/code/modules/mob/dead/new_player/sprite_accessories/pines.dm
@@ -0,0 +1,53 @@
+/datum/sprite_accessory/spines
+ icon = 'icons/mob/mutant_bodyparts.dmi'
+
+/datum/sprite_accessory/spines_animated
+ icon = 'icons/mob/mutant_bodyparts.dmi'
+
+/datum/sprite_accessory/spines/none
+ name = "None"
+ icon_state = "none"
+
+/datum/sprite_accessory/spines_animated/none
+ name = "None"
+ icon_state = "none"
+
+/datum/sprite_accessory/spines/short
+ name = "Short"
+ icon_state = "short"
+
+/datum/sprite_accessory/spines_animated/short
+ name = "Short"
+ icon_state = "short"
+
+/datum/sprite_accessory/spines/shortmeme
+ name = "Short + Membrane"
+ icon_state = "shortmeme"
+
+/datum/sprite_accessory/spines_animated/shortmeme
+ name = "Short + Membrane"
+ icon_state = "shortmeme"
+
+/datum/sprite_accessory/spines/long
+ name = "Long"
+ icon_state = "long"
+
+/datum/sprite_accessory/spines_animated/long
+ name = "Long"
+ icon_state = "long"
+
+/datum/sprite_accessory/spines/longmeme
+ name = "Long + Membrane"
+ icon_state = "longmeme"
+
+/datum/sprite_accessory/spines_animated/longmeme
+ name = "Long + Membrane"
+ icon_state = "longmeme"
+
+/datum/sprite_accessory/spines/aqautic
+ name = "Aquatic"
+ icon_state = "aqua"
+
+/datum/sprite_accessory/spines_animated/aqautic
+ name = "Aquatic"
+ icon_state = "aqua"
\ No newline at end of file
diff --git a/code/modules/mob/dead/new_player/sprite_accessories/snouts.dm b/code/modules/mob/dead/new_player/sprite_accessories/snouts.dm
new file mode 100644
index 0000000000..c663c08d69
--- /dev/null
+++ b/code/modules/mob/dead/new_player/sprite_accessories/snouts.dm
@@ -0,0 +1,18 @@
+/datum/sprite_accessory/snouts
+ icon = 'icons/mob/mutant_bodyparts.dmi'
+
+/datum/sprite_accessory/snouts/sharp
+ name = "Sharp"
+ icon_state = "sharp"
+
+/datum/sprite_accessory/snouts/round
+ name = "Round"
+ icon_state = "round"
+
+/datum/sprite_accessory/snouts/sharplight
+ name = "Sharp + Light"
+ icon_state = "sharplight"
+
+/datum/sprite_accessory/snouts/roundlight
+ name = "Round + Light"
+ icon_state = "roundlight"
\ No newline at end of file
diff --git a/code/modules/mob/dead/new_player/sprite_accessories/socks.dm b/code/modules/mob/dead/new_player/sprite_accessories/socks.dm
new file mode 100644
index 0000000000..5a5d37d4e7
--- /dev/null
+++ b/code/modules/mob/dead/new_player/sprite_accessories/socks.dm
@@ -0,0 +1,96 @@
+///////////////////////
+// Socks Definitions //
+///////////////////////
+
+/datum/sprite_accessory/socks
+ icon = 'icons/mob/underwear.dmi'
+
+/datum/sprite_accessory/socks/nude
+ name = "Nude"
+ icon_state = null
+
+// please make sure they're sorted alphabetically and categorized
+
+/datum/sprite_accessory/socks/black_knee
+ name = "Knee-high (Black)"
+ icon_state = "black_knee"
+
+/datum/sprite_accessory/socks/commie_knee
+ name = "Knee-High (Commie)"
+ icon_state = "commie_knee"
+
+/datum/sprite_accessory/socks/usa_knee
+ name = "Knee-High (Freedom)"
+ icon_state = "assblastusa_knee"
+
+/datum/sprite_accessory/socks/rainbow_knee
+ name = "Knee-high (Rainbow)"
+ icon_state = "rainbow_knee"
+
+/datum/sprite_accessory/socks/striped_knee
+ name = "Knee-high (Striped)"
+ icon_state = "striped_knee"
+
+/datum/sprite_accessory/socks/thin_knee
+ name = "Knee-high (Thin)"
+ icon_state = "thin_knee"
+
+/datum/sprite_accessory/socks/uk_knee
+ name = "Knee-High (UK)"
+ icon_state = "uk_knee"
+
+/datum/sprite_accessory/socks/white_knee
+ name = "Knee-high (White)"
+ icon_state = "white_knee"
+
+/datum/sprite_accessory/socks/black_norm
+ name = "Normal (Black)"
+ icon_state = "black_norm"
+
+/datum/sprite_accessory/socks/white_norm
+ name = "Normal (White)"
+ icon_state = "white_norm"
+
+/datum/sprite_accessory/socks/pantyhose
+ name = "Pantyhose"
+ icon_state = "pantyhose"
+
+/datum/sprite_accessory/socks/black_short
+ name = "Short (Black)"
+ icon_state = "black_short"
+
+/datum/sprite_accessory/socks/white_short
+ name = "Short (White)"
+ icon_state = "white_short"
+
+/datum/sprite_accessory/socks/black_thigh
+ name = "Thigh-high (Black)"
+ icon_state = "black_thigh"
+
+/datum/sprite_accessory/socks/commie_thigh
+ name = "Thigh-high (Commie)"
+ icon_state = "commie_thigh"
+
+/datum/sprite_accessory/socks/usa_thigh
+ name = "Thigh-high (Freedom)"
+ icon_state = "assblastusa_thigh"
+
+/datum/sprite_accessory/socks/rainbow_thigh
+ name = "Thigh-high (Rainbow)"
+ icon_state = "rainbow_thigh"
+
+/datum/sprite_accessory/socks/striped_thigh
+ name = "Thigh-high (Striped)"
+ icon_state = "striped_thigh"
+
+/datum/sprite_accessory/socks/thin_thigh
+ name = "Thigh-high (Thin)"
+ icon_state = "thin_thigh"
+
+/datum/sprite_accessory/socks/uk_thigh
+ name = "Thigh-high (UK)"
+ icon_state = "uk_thigh"
+
+/datum/sprite_accessory/socks/white_thigh
+ name = "Thigh-high (White)"
+ icon_state = "white_thigh"
\ No newline at end of file
diff --git a/code/modules/mob/dead/new_player/sprite_accessories/tails.dm b/code/modules/mob/dead/new_player/sprite_accessories/tails.dm
new file mode 100644
index 0000000000..31faabf663
--- /dev/null
+++ b/code/modules/mob/dead/new_player/sprite_accessories/tails.dm
@@ -0,0 +1,55 @@
+/datum/sprite_accessory/tails
+ icon = 'icons/mob/mutant_bodyparts.dmi'
+
+/datum/sprite_accessory/tails_animated
+ icon = 'icons/mob/mutant_bodyparts.dmi'
+
+/datum/sprite_accessory/tails/lizard/smooth
+ name = "Smooth"
+ icon_state = "smooth"
+
+/datum/sprite_accessory/tails_animated/lizard/smooth
+ name = "Smooth"
+ icon_state = "smooth"
+
+/datum/sprite_accessory/tails/lizard/dtiger
+ name = "Dark Tiger"
+ icon_state = "dtiger"
+
+/datum/sprite_accessory/tails_animated/lizard/dtiger
+ name = "Dark Tiger"
+ icon_state = "dtiger"
+
+/datum/sprite_accessory/tails/lizard/ltiger
+ name = "Light Tiger"
+ icon_state = "ltiger"
+
+/datum/sprite_accessory/tails_animated/lizard/ltiger
+ name = "Light Tiger"
+ icon_state = "ltiger"
+
+/datum/sprite_accessory/tails/lizard/spikes
+ name = "Spikes"
+ icon_state = "spikes"
+
+/datum/sprite_accessory/tails_animated/lizard/spikes
+ name = "Spikes"
+ icon_state = "spikes"
+
+/datum/sprite_accessory/tails/human/none
+ name = "None"
+ icon_state = "none"
+
+/datum/sprite_accessory/tails_animated/human/none
+ name = "None"
+ icon_state = "none"
+/*
+/datum/sprite_accessory/tails/human/cat
+ name = "Cat"
+ icon_state = "cat"
+ color_src = HAIR
+
+/datum/sprite_accessory/tails_animated/human/cat
+ name = "Cat"
+ icon_state = "cat"
+ color_src = HAIR*/
\ No newline at end of file
diff --git a/code/modules/mob/dead/new_player/sprite_accessories/undershirt.dm b/code/modules/mob/dead/new_player/sprite_accessories/undershirt.dm
new file mode 100644
index 0000000000..7c66ef51e3
--- /dev/null
+++ b/code/modules/mob/dead/new_player/sprite_accessories/undershirt.dm
@@ -0,0 +1,308 @@
+////////////////////////////
+// Undershirt Definitions //
+////////////////////////////
+
+/datum/sprite_accessory/undershirt
+ icon = 'icons/mob/underwear.dmi'
+ gender = NEUTER
+
+/datum/sprite_accessory/undershirt/nude
+ name = "Nude"
+ icon_state = null
+
+// please make sure they're sorted alphabetically and categorized
+
+/datum/sprite_accessory/undershirt/bluejersey
+ name = "Shirt, Jersey - Blue"
+ icon_state = "shirt_bluejersey"
+
+/datum/sprite_accessory/undershirt/redjersey
+ name = "Shirt, Jersey - Red"
+ icon_state = "shirt_redjersey"
+
+/datum/sprite_accessory/undershirt/bluepolo
+ name = "Shirt, Polo - Blue"
+ icon_state = "bluepolo"
+
+/datum/sprite_accessory/undershirt/grayyellowpolo
+ name = "Shirt, Polo - Gray, Yellow"
+ icon_state = "grayyellowpolo"
+
+/datum/sprite_accessory/undershirt/redpolo
+ name = "Shirt, Polo - Red"
+ icon_state = "redpolo"
+
+/datum/sprite_accessory/undershirt/whitepolo
+ name = "Shirt, Polo - White"
+ icon_state = "whitepolo"
+
+/datum/sprite_accessory/undershirt/alienshirt
+ name = "Shirt - Alien"
+ icon_state = "shirt_alien"
+
+/datum/sprite_accessory/undershirt/mondmondjaja
+ name = "Shirt - Band"
+ icon_state = "band"
+
+/datum/sprite_accessory/undershirt/shirt_black
+ name = "Shirt - Black"
+ icon_state = "shirt_black"
+
+/datum/sprite_accessory/undershirt/blueshirt
+ name = "Shirt - Blue"
+ icon_state = "shirt_blue"
+
+/datum/sprite_accessory/undershirt/clownshirt
+ name = "Shirt - Clown"
+ icon_state = "shirt_clown"
+
+/datum/sprite_accessory/undershirt/commie
+ name = "Shirt - Commie"
+ icon_state = "shirt_commie"
+
+/datum/sprite_accessory/undershirt/greenshirt
+ name = "Shirt - Green"
+ icon_state = "shirt_green"
+
+/datum/sprite_accessory/undershirt/shirt_grey
+ name = "Shirt - Grey"
+ icon_state = "shirt_grey"
+
+/datum/sprite_accessory/undershirt/ian
+ name = "Shirt - Ian"
+ icon_state = "ian"
+
+/datum/sprite_accessory/undershirt/ilovent
+ name = "Shirt - I Love NT"
+ icon_state = "ilovent"
+
+/datum/sprite_accessory/undershirt/lover
+ name = "Shirt - Lover"
+ icon_state = "lover"
+
+/datum/sprite_accessory/undershirt/matroska
+ name = "Shirt - Matroska"
+ icon_state = "matroska"
+
+/datum/sprite_accessory/undershirt/meat
+ name = "Shirt - Meat"
+ icon_state = "shirt_meat"
+
+/datum/sprite_accessory/undershirt/nano
+ name = "Shirt - Nanotrasen"
+ icon_state = "shirt_nano"
+
+/datum/sprite_accessory/undershirt/peace
+ name = "Shirt - Peace"
+ icon_state = "peace"
+
+/datum/sprite_accessory/undershirt/pacman
+ name = "Shirt - Pogoman"
+ icon_state = "pogoman"
+
+/datum/sprite_accessory/undershirt/question
+ name = "Shirt - Question"
+ icon_state = "shirt_question"
+
+/datum/sprite_accessory/undershirt/redshirt
+ name = "Shirt - Red"
+ icon_state = "shirt_red"
+
+/datum/sprite_accessory/undershirt/skull
+ name = "Shirt - Skull"
+ icon_state = "shirt_skull"
+
+/datum/sprite_accessory/undershirt/ss13
+ name = "Shirt - SS13"
+ icon_state = "shirt_ss13"
+
+/datum/sprite_accessory/undershirt/stripe
+ name = "Shirt - Striped"
+ icon_state = "shirt_stripes"
+
+/datum/sprite_accessory/undershirt/tiedye
+ name = "Shirt - Tie-dye"
+ icon_state = "shirt_tiedye"
+
+/datum/sprite_accessory/undershirt/uk
+ name = "Shirt - UK"
+ icon_state = "uk"
+
+/datum/sprite_accessory/undershirt/usa
+ name = "Shirt - USA"
+ icon_state = "shirt_assblastusa"
+
+/datum/sprite_accessory/undershirt/shirt_white
+ name = "Shirt - White"
+ icon_state = "shirt_white"
+
+/datum/sprite_accessory/undershirt/blackshortsleeve
+ name = "Shirt, Short Sleeved - Black"
+ icon_state = "blackshortsleeve"
+
+/datum/sprite_accessory/undershirt/blueshortsleeve
+ name = "Shirt, Short Sleeved - Blue"
+ icon_state = "blueshortsleeve"
+
+/datum/sprite_accessory/undershirt/greenshortsleeve
+ name = "Shirt, Short Sleeved - Green"
+ icon_state = "greenshortsleeve"
+
+/datum/sprite_accessory/undershirt/purpleshortsleeve
+ name = "Shirt, Short Sleeved - Purple"
+ icon_state = "purpleshortsleeve"
+
+/datum/sprite_accessory/undershirt/whiteshortsleeve
+ name = "Shirt, Short Sleeved - White"
+ icon_state = "whiteshortsleeve"
+
+/datum/sprite_accessory/undershirt/blueshirtsport
+ name = "Shirt, Sports - Blue"
+ icon_state = "blueshirtsport"
+ gender = NEUTER
+
+/datum/sprite_accessory/undershirt/greenshirtsport
+ name = "Shirt, Sports - Green"
+ icon_state = "greenshirtsport"
+ gender = NEUTER
+
+/datum/sprite_accessory/undershirt/redshirtsport
+ name = "Shirt, Sports - Red"
+ icon_state = "redshirtsport"
+ gender = NEUTER
+
+/datum/sprite_accessory/undershirt/redtop
+ name = "Shirt, Short - Red"
+ icon_state = "redtop"
+
+/datum/sprite_accessory/undershirt/whitetop
+ name = "Shirt, Short - White"
+ icon_state = "whitetop"
+
+/datum/sprite_accessory/undershirt/tshirt_blue
+ name = "T-Shirt - Blue"
+ icon_state = "blueshirt"
+
+/datum/sprite_accessory/undershirt/tshirt_green
+ name = "T-Shirt - Green"
+ icon_state = "greenshirt"
+
+/datum/sprite_accessory/undershirt/tshirt_red
+ name = "T-Shirt - Red"
+ icon_state = "redshirt"
+
+/datum/sprite_accessory/undershirt/yellowshirt
+ name = "T-Shirt - Yellow"
+ icon_state = "yellowshirt"
+
+/datum/sprite_accessory/undershirt/tank_black
+ name = "Tank Top - Black"
+ icon_state = "tank_black"
+
+/datum/sprite_accessory/undershirt/tankfire
+ name = "Tank Top - Fire"
+ icon_state = "tank_fire"
+
+/datum/sprite_accessory/undershirt/tank_grey
+ name = "Tank Top - Grey"
+ icon_state = "tank_grey"
+
+/datum/sprite_accessory/undershirt/female_midriff
+ name = "Tank Top - Midriff"
+ icon_state = "tank_midriff"
+
+/datum/sprite_accessory/undershirt/tank_red
+ name = "Tank Top - Red"
+ icon_state = "tank_red"
+
+/datum/sprite_accessory/undershirt/tankstripe
+ name = "Tank Top - Striped"
+ icon_state = "tank_stripes"
+
+/datum/sprite_accessory/undershirt/tank_white
+ name = "Tank Top - White"
+ icon_state = "tank_white"
+
+/datum/sprite_accessory/undershirt/female_red
+ name = "Bra - Red"
+ icon_state = "bra_red"
+
+/datum/sprite_accessory/undershirt/female_pink
+ name = "Bra - Pink"
+ icon_state = "bra_pink"
+
+/datum/sprite_accessory/undershirt/female_kinky
+ name = "Bra - Kinky Black"
+ icon_state = "bra_kinky"
+
+/datum/sprite_accessory/undershirt/female_green
+ name = "Bra - Green"
+ icon_state = "bra_green"
+
+/datum/sprite_accessory/undershirt/female_commie
+ name = "Bra - Freedom"
+ icon_state = "bra_assblastusa"
+
+/datum/sprite_accessory/undershirt/female_commie
+ name = "Bra - Commie"
+ icon_state = "bra_commie"
+
+/datum/sprite_accessory/undershirt/female_babyblue
+ name = "Bra, Baby Blue"
+ icon_state = "bra_babyblue"
+
+/datum/sprite_accessory/undershirt/female_black
+ name = "Bra - Black"
+ icon_state = "bra_black"
+
+/datum/sprite_accessory/undershirt/female_uk
+ name = "Bra - UK"
+ icon_state = "bra_uk"
+
+/datum/sprite_accessory/undershirt/female_white
+ name = "Bra - White"
+ icon_state = "bra_white"
+
+/datum/sprite_accessory/undershirt/female_white_neko
+ name = "Bra, Neko - white"
+ icon_state = "bra_neko_white"
+
+/datum/sprite_accessory/undershirt/female_black_neko
+ name = "Bra, Neko - Black"
+ icon_state = "bra_neko_black"
+
+/datum/sprite_accessory/undershirt/female_blackalt
+ name = "Bra, Sports - Black"
+ icon_state = "bra_sports_black"
+
+/datum/sprite_accessory/undershirt/sports_bra
+ name = "Bra, Sports 1 - White"
+ icon_state = "sports_bra"
+
+/datum/sprite_accessory/undershirt/female_whitealt
+ name = "Bra, Sports 2 - White"
+ icon_state = "bra_sports_white"
+
+/datum/sprite_accessory/undershirt/sports_bra2
+ name = "Bra, Sports 3 - White"
+ icon_state = "sports_bra_alt"
+
+/datum/sprite_accessory/undershirt/female_yellow
+ name = "Bra - Yellow"
+ icon_state = "bra_yellow"
+
+/datum/sprite_accessory/undershirt/female_thong
+ name = "Bra, Strapless - Pink"
+ icon_state = "bra_strapless_pink"
+
+/datum/sprite_accessory/undershirt/female_blue
+ name = "Bra, Strapless - Blue"
+ icon_state = "bra_blue"
+
+/datum/sprite_accessory/undershirt/swimsuit_green
+ name = "Swimsuit, Top - Green"
+ icon_state = "bra_swimming_green"
+
+/datum/sprite_accessory/undershirt/swimsuit_purple
+ name = "Swimsuit, Top - Purple"
+ icon_state = "bra_swimming_purple"
\ No newline at end of file
diff --git a/code/modules/mob/dead/new_player/sprite_accessories/underwear.dm b/code/modules/mob/dead/new_player/sprite_accessories/underwear.dm
new file mode 100644
index 0000000000..6beed231aa
--- /dev/null
+++ b/code/modules/mob/dead/new_player/sprite_accessories/underwear.dm
@@ -0,0 +1,171 @@
+///////////////////////////
+// Underwear Definitions //
+///////////////////////////
+/datum/sprite_accessory/underwear
+ icon = 'icons/mob/underwear.dmi'
+ gender = NEUTER
+
+/datum/sprite_accessory/underwear/nude
+ name = "Nude"
+ icon_state = null
+
+/datum/sprite_accessory/underwear/mankini
+ name = "Mankini - Green"
+ icon_state = "mankini_green"
+
+/datum/sprite_accessory/underwear/male_kinky
+ name = "Jockstrap - White"
+ icon_state = "jockstrap_white"
+
+/datum/sprite_accessory/underwear/male_white
+ name = "Briefs - White"
+ icon_state = "briefs_white"
+
+/datum/sprite_accessory/underwear/male_black
+ name = "Briefs - Black"
+ icon_state = "briefs_black"
+
+/datum/sprite_accessory/underwear/male_grey
+ name = "Briefs - Grey"
+ icon_state = "briefs_grey"
+
+/datum/sprite_accessory/underwear/male_red
+ name = "Briefs - Red"
+ icon_state = "briefs_red"
+
+/datum/sprite_accessory/underwear/male_green
+ name = "Briefs - Green"
+ icon_state = "briefs_green"
+
+/datum/sprite_accessory/underwear/male_blue
+ name = "Briefs - Blue"
+ icon_state = "briefs_blue"
+
+/datum/sprite_accessory/underwear/male_blackalt
+ name = "Boxers - Black"
+ icon_state = "boxers_black"
+
+/datum/sprite_accessory/underwear/male_greyalt
+ name = "Boxers - Grey"
+ icon_state = "boxers_grey"
+
+/datum/sprite_accessory/underwear/male_hearts
+ name = "Boxers - Heart"
+ icon_state = "boxers_heart"
+
+/datum/sprite_accessory/underwear/male_stripe
+ name = "Boxers - Striped"
+ icon_state = "boxers_striped"
+
+/datum/sprite_accessory/underwear/male_commie
+ name = "Boxers - Striped Communist"
+ icon_state = "boxers_commie"
+
+/datum/sprite_accessory/underwear/male_usastripe
+ name = "Boxers - Striped Freedom"
+ icon_state = "boxers_assblastusa"
+
+/datum/sprite_accessory/underwear/male_uk
+ name = "Boxers - Striped UK"
+ icon_state = "boxers_uk"
+
+
+/datum/sprite_accessory/underwear/female_whitealt
+ name = "Boxer Briefs - White"
+ icon_state = "boxer_briefs_white"
+
+/datum/sprite_accessory/underwear/female_blackalt
+ name = "Boxer Briefs - Black"
+ icon_state = "boxer_briefs_black"
+
+/datum/sprite_accessory/underwear/female_pink
+ name = "Boxer Briefs - Pink"
+ icon_state = "boxer_briefs_pink"
+
+/datum/sprite_accessory/underwear/female_babyblue
+ name = "Boxer Briefs - Baby Blue"
+ icon_state = "boxer_briefs_babyblue"
+
+/datum/sprite_accessory/underwear/female_yellow
+ name = "Boxer Briefs - Yellow"
+ icon_state = "boxer_briefs_yellow"
+
+
+/datum/sprite_accessory/underwear/female_black
+ name = "Panties - Black"
+ icon_state = "panties_black"
+
+/datum/sprite_accessory/underwear/female_blue
+ name = "Panties - Blue"
+ icon_state = "panties_blue"
+
+/datum/sprite_accessory/underwear/female_commie
+ name = "Panties - Commie"
+ icon_state = "panties_commie"
+
+/datum/sprite_accessory/underwear/female_usastripe
+ name = "Panties - Freedom"
+ icon_state = "panties_assblastusa"
+
+/datum/sprite_accessory/underwear/female_green
+ name = "Panties - Green"
+ icon_state = "panties_green"
+
+/datum/sprite_accessory/underwear/female_kinky
+ name = "Panties - Kinky Black"
+ icon_state = "panties_kinky"
+
+/datum/sprite_accessory/underwear/female_red
+ name = "Panties - Red"
+ icon_state = "panties_red"
+
+/datum/sprite_accessory/underwear/female_uk
+ name = "Panties - UK"
+ icon_state = "panties_uk"
+
+/datum/sprite_accessory/underwear/female_white
+ name = "Panties - White"
+ icon_state = "panties_white"
+
+/datum/sprite_accessory/underwear/female_white_neko
+ name = "Panties, Neko - White"
+ icon_state = "panties_neko_white"
+
+/datum/sprite_accessory/underwear/female_black_neko
+ name = "Panties, Neko - Black"
+ icon_state = "panties_neko_black"
+
+
+/datum/sprite_accessory/underwear/swimsuit_red
+ name = "Swimsuit, One Piece - Red"
+ icon_state = "swimming_red"
+
+/datum/sprite_accessory/underwear/swimsuit
+ name = "Swimsuit, One Piece - Black"
+ icon_state = "swimming_black"
+
+/datum/sprite_accessory/underwear/swimsuit_blue
+ name = "Swimsuit, One Piece - Striped Blue"
+ icon_state = "swimming_blue"
+
+/datum/sprite_accessory/underwear/swimsuit_green
+ name = "Swimsuit, Bottom - Green"
+ icon_state = "panties_swimming_green"
+
+/datum/sprite_accessory/underwear/swimsuit_purple
+ name = "Swimsuit, Bottom - Purple"
+ icon_state = "panties_swimming_purple"
+
+/datum/sprite_accessory/underwear/female_thong_black
+ name = "Thong - Black"
+ icon_state = "thong_black"
+
+/datum/sprite_accessory/underwear/female_thong
+ name = "Thong - Pink"
+ icon_state = "thong_pink"
+
+/datum/sprite_accessory/underwear/female_babydoll
+ name = "Babydoll - Black"
+ icon_state = "babydoll"
+
+
diff --git a/code/modules/mob/dead/new_player/sprite_accessories/wings.dm b/code/modules/mob/dead/new_player/sprite_accessories/wings.dm
new file mode 100644
index 0000000000..d051b2f07a
--- /dev/null
+++ b/code/modules/mob/dead/new_player/sprite_accessories/wings.dm
@@ -0,0 +1,26 @@
+/datum/sprite_accessory/wings/none
+ name = "None"
+ icon_state = "none"
+
+/datum/sprite_accessory/wings_open
+ icon = 'icons/mob/wings.dmi'
+
+/datum/sprite_accessory/wings_open/angel
+ name = "Angel"
+ icon_state = "angel"
+ color_src = 0
+ dimension_x = 46
+ center = TRUE
+ dimension_y = 34
+
+/datum/sprite_accessory/wings
+ icon = 'icons/mob/wings.dmi'
+
+/datum/sprite_accessory/wings/angel
+ name = "Angel"
+ icon_state = "angel"
+ color_src = 0
+ dimension_x = 46
+ center = TRUE
+ dimension_y = 34
+ locked = TRUE
\ No newline at end of file
diff --git a/icons/mob/underwear.dmi b/icons/mob/underwear.dmi
index 385cd21516620f9951aa3b0142d8246b266e9a16..0b63685668097377754c298ecd5905b0be20059f 100644
GIT binary patch
literal 54625
zcmd432UL^Mwl4Zp6a=Iw(mN~2uPJ82-3ThfQobw5s)SbNEJep4xxh}
z9SObn9y%l>ci}#JpFQ4t+RN}+w|2#
z8oSU-kV%)pP5UmH7k|1Ql|H|;>7kLFNp}$@aq&3%v;`5$nwX04L)423I>3`SZR4nu
z?DjC5=q3BOx~iAsQfDI*;&D^@C(#k%Np>#NxjXC?rB~?@(}EY_x@HCR`PgcXOY@)&p284i=kT1dL~JXTCUBG
zptANY((A5T{9FC4>F@a~TW^+-#*RsK-B#JSxn4W4(e-dX)4ZWs%hqG|8x5kb!>rCJ
zV#vTf{o*r(=KkFkHt*PGydfykBeZ_arf>W=&zo?v)sE^%mkN-K8kj2s(etNCZWd#B
z-4Cferp4uI(b?OT$ih1`tqXm
z#kh9Pwy%Q0X+~c>pRlt(V7GTS`_gW_s%;-gQY2!w%sF#c#p}tngr=3p7fd}9bi`$4
zUX-q}k!)P%w%JS#DSi0dVYT$4Y#>xJlb_ZQJ@@8QFT)ed1u{W$iy#TjcQiSg`y*LK
zhon1|JR1$~gut2
zN%vg1%U#!8ej%$o?aNrx0~^xN+`HUVdp2quE3TQ=-0{2BTGvC25``|1hKGp3rkV@|
zZ?9BSziEXPGSXaiwe=54Y*_o!H^4K`?DFPi<4y{KcJ<9fq4ncggz9b|<_+wX@szPB
z4DW{+D`mBd-xLI~K@Sz~YkMYdOu}557JX$;kMv5o;KRj5Tnn*9(Gk}fN$5T@nz3zs
z?2{wM%Vt-rYHGW5;mF&tUUeYRc+ESB?o?XFhxB3M#QQ-821>f=3Aurtb;C*%f{bCk
z_j;{#HvGTzn##+rJpXmm`}%s&;xe}QO>yA7m6Geor4zb|u;u;i9R9XmoTH~Xl5Tv$Azvkh6-_YB%cJJQh
zd=aInYi{o7?R+q}I>^)gtFe$JiqT+;!Svv_$c9Z0zj9uNcU*JwD37zyNhT
zAGLRE#g=gg>bKU0KDPQjMJ*e`!}zhT;y%YaIh&F`$3-ivt5o1<=5shlkhKWkn>TNs
zwrM3af0g!blfpXJ2~l8?-U(%uQ2Qm-}#Il=EqUZuI#n3Pwgoot}Iyw+rk-
zkjDC-c}|&IVFPcBLibr{=mxFS>NNPiI