diff --git a/code/__HELPERS/global_lists.dm b/code/__HELPERS/global_lists.dm
index 3565bc3d51a0..da3dccd7f3d3 100644
--- a/code/__HELPERS/global_lists.dm
+++ b/code/__HELPERS/global_lists.dm
@@ -33,6 +33,7 @@
init_sprite_accessory_subtypes(/datum/sprite_accessory/moth_markings, GLOB.moth_markings_list)
init_sprite_accessory_subtypes(/datum/sprite_accessory/moth_fluff, GLOB.moth_fluff_list)
init_sprite_accessory_subtypes(/datum/sprite_accessory/squid_face, GLOB.squid_face_list)
+ init_sprite_accessory_subtypes(/datum/sprite_accessory/ipc_hair, GLOB.ipc_hair_list) // [CELADON-ADD] - CELADON_IPC_HAIR
init_sprite_accessory_subtypes(/datum/sprite_accessory/ipc_screens, GLOB.ipc_screens_list)
init_sprite_accessory_subtypes(/datum/sprite_accessory/ipc_antennas, GLOB.ipc_antennas_list)
init_sprite_accessory_subtypes(/datum/sprite_accessory/ipc_tail, GLOB.ipc_tail_list)
diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm
index fc326cf72420..b56149947e3d 100644
--- a/code/__HELPERS/mobs.dm
+++ b/code/__HELPERS/mobs.dm
@@ -68,6 +68,10 @@
init_sprite_accessory_subtypes(/datum/sprite_accessory/moth_markings, GLOB.moth_markings_list)
if(!GLOB.squid_face_list.len)
init_sprite_accessory_subtypes(/datum/sprite_accessory/squid_face, GLOB.squid_face_list)
+ // [CELADON-ADD] - CELADON_IPC_HAIR
+ if(!GLOB.ipc_hair_list.len)
+ init_sprite_accessory_subtypes(/datum/sprite_accessory/ipc_hair, GLOB.ipc_hair_list)
+ // [/CELADON-ADD] - CELADON_IPC_HAIR
if(!GLOB.ipc_screens_list.len)
init_sprite_accessory_subtypes(/datum/sprite_accessory/ipc_screens, GLOB.ipc_screens_list)
if(!GLOB.ipc_antennas_list.len)
@@ -155,6 +159,7 @@
"ipc_brain" = pick(GLOB.ipc_brain_list),
"ipc_chassis" = pick(GLOB.ipc_chassis_list),
"ipc_screen" = pick(GLOB.ipc_screens_list),
+ "ipc_hair" = pick(GLOB.ipc_hair_list), // [CELADON-ADD] - CELADON_IPC_HAIR
"kepori_body_feathers" = pick(GLOB.kepori_body_feathers_list),
"kepori_head_feathers" = pick(GLOB.kepori_head_feathers_list),
"kepori_feathers" = pick(GLOB.kepori_feathers_list),
diff --git a/code/_globalvars/lists/flavor_misc.dm b/code/_globalvars/lists/flavor_misc.dm
index f9edbc500142..1a5cecef67a9 100644
--- a/code/_globalvars/lists/flavor_misc.dm
+++ b/code/_globalvars/lists/flavor_misc.dm
@@ -37,6 +37,7 @@ GLOBAL_LIST_EMPTY(moth_wings_list)
GLOBAL_LIST_EMPTY(moth_fluff_list)
GLOBAL_LIST_EMPTY(moth_markings_list)
GLOBAL_LIST_EMPTY(squid_face_list)
+GLOBAL_LIST_EMPTY(ipc_hair_list) // [CELADON-ADD] - CELADON_IPC_HAIR
GLOBAL_LIST_EMPTY(ipc_screens_list)
GLOBAL_LIST_EMPTY(ipc_antennas_list)
GLOBAL_LIST_EMPTY(ipc_tail_list)
diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm
index e83a47824490..6fb094628cfb 100644
--- a/code/modules/client/preferences.dm
+++ b/code/modules/client/preferences.dm
@@ -128,6 +128,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
"spider_spinneret" = "Plain",
"spider_mandibles" = "Plain",
"squid_face" = "Squidward",
+ "ipc_hair" = "None", // [CELADON-ADD] - CELADON_IPC_HAIR
"ipc_screen" = "Blue",
"ipc_antenna" = "None",
"ipc_tail" = "None",
@@ -666,6 +667,23 @@ GLOBAL_LIST_EMPTY(preferences_datums)
dat += ""
mutant_category = 0
+ // [CELADON-ADD] - CELADON_IPC_HAIR
+ if("ipc_hair" in pref_species.default_features)
+ if(!mutant_category)
+ dat += APPEARANCE_CATEGORY_COLUMN
+
+ dat += "
IPC hair Style
"
+
+ dat += "[features["ipc_hair"]]
"
+
+ dat += " Change
"
+
+ mutant_category++
+ if(mutant_category >= MAX_MUTANT_ROWS)
+ dat += ""
+ mutant_category = 0
+ // [/CELADON-ADD] - CELADON_IPC_HAIR
+
if("ipc_screen" in pref_species.default_features)
if(!mutant_category)
dat += APPEARANCE_CATEGORY_COLUMN
@@ -689,7 +707,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
dat += "[features["ipc_antenna"]]
"
- dat += " Change
"
+ dat += " Change
" // [CELADON-EDIT] - CELADON_IPC_HAIR
mutant_category++
if(mutant_category >= MAX_MUTANT_ROWS)
@@ -2273,6 +2291,16 @@ GLOBAL_LIST_EMPTY(preferences_datums)
if(new_spider_spinneret)
features["spider_spinneret"] = new_spider_spinneret
+ // [CELADON-ADD] - CELADON_IPC_HAIR
+ if("ipc_hair")
+ var/new_ipc_hair
+
+ new_ipc_hair = input(user, "Choose your character's IPC hair:", "Character Preference") as null|anything in GLOB.ipc_hair_list
+
+ if(new_ipc_hair)
+ features["ipc_hair"] = new_ipc_hair
+ // [/CELADON-ADD] - CELADON_IPC_HAIR
+
if("ipc_screen")
var/new_ipc_screen
diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm
index 49d1db666fa0..be1c4edf4721 100644
--- a/code/modules/client/preferences_savefile.dm
+++ b/code/modules/client/preferences_savefile.dm
@@ -437,6 +437,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
READ_FILE(S["feature_spider_spinneret"], features["spider_spinneret"])
READ_FILE(S["feature_spider_mandibles"], features["spider_mandibles"])
READ_FILE(S["feature_squid_face"], features["squid_face"])
+ READ_FILE(S["feature_ipc_hair"], features["ipc_hair"]) // [CELADON-ADD] - CELADON_IPC_HAIR
READ_FILE(S["feature_ipc_screen"], features["ipc_screen"])
READ_FILE(S["feature_ipc_antenna"], features["ipc_antenna"])
READ_FILE(S["feature_ipc_tail"], features["ipc_tail"])
@@ -620,6 +621,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
features["spider_spinneret"] = sanitize_inlist(features["spider_spinneret"], GLOB.spider_spinneret_list, "Plain")
features["moth_markings"] = sanitize_inlist(features["moth_markings"], GLOB.moth_markings_list, "None")
features["squid_face"] = sanitize_inlist(features["squid_face"], GLOB.squid_face_list, "Squidward")
+ features["ipc_hair"] = sanitize_inlist(features["ipc_hair"], GLOB.ipc_hair_list) // [CELADON-ADD] - CELADON_IPC_HAIR
features["ipc_screen"] = sanitize_inlist(features["ipc_screen"], GLOB.ipc_screens_list)
features["ipc_antenna"] = sanitize_inlist(features["ipc_antenna"], GLOB.ipc_antennas_list)
features["ipc_tail"] = sanitize_inlist(features["ipc_tail"], GLOB.ipc_tail_list)
@@ -738,6 +740,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
WRITE_FILE(S["feature_spider_spinneret"] , features["spider_spinneret"])
WRITE_FILE(S["feature_spider_mandibles"] , features["spider_mandibles"])
WRITE_FILE(S["feature_squid_face"] , features["squid_face"])
+ WRITE_FILE(S["feature_ipc_hair"] , features["ipc_hair"]) // [CELADON-ADD] - CELADON_IPC_HAIR
WRITE_FILE(S["feature_ipc_screen"] , features["ipc_screen"])
WRITE_FILE(S["feature_ipc_antenna"] , features["ipc_antenna"])
WRITE_FILE(S["feature_ipc_tail"] , features["ipc_tail"])
diff --git a/code/modules/mob/dead/new_player/sprite_accessories/ipc.dm b/code/modules/mob/dead/new_player/sprite_accessories/ipc.dm
index 1592a3ef6682..e1441fc11e4e 100644
--- a/code/modules/mob/dead/new_player/sprite_accessories/ipc.dm
+++ b/code/modules/mob/dead/new_player/sprite_accessories/ipc.dm
@@ -181,7 +181,7 @@
/datum/sprite_accessory/ipc_antennas
icon = 'icons/mob/ipc_accessories.dmi'
- color_src = HAIR
+ color_src = FACEHAIR // [CELADON-EDIT] - CELADON_IPC_HAIR
/datum/sprite_accessory/ipc_antennas/none
name = "None"
diff --git a/code/modules/mob/living/carbon/human/consistent_human.dm b/code/modules/mob/living/carbon/human/consistent_human.dm
index 2e0881773b21..248c5759e6fa 100644
--- a/code/modules/mob/living/carbon/human/consistent_human.dm
+++ b/code/modules/mob/living/carbon/human/consistent_human.dm
@@ -38,6 +38,7 @@
dna.features["tail_elzu"] = GLOB.tails_list_elzu[hex2num(copytext(seed, 17, 18)) % length(GLOB.tails_list_elzu) + 1]
dna.features["ipc_chassis"] = GLOB.ipc_chassis_list[hex2num(copytext(seed, 18, 19)) % length(GLOB.ipc_chassis_list) + 1]
dna.features["ipc_screen"] = GLOB.ipc_screens_list[hex2num(copytext(seed, 19, 20)) % length(GLOB.ipc_screens_list) + 1]
+ dna.features["ipc_hair"] = GLOB.ipc_hair_list[hex2num(copytext(seed, 20, 21)) % length(GLOB.ipc_hair_list) + 1] // [CELADON-ADD] - CELADON_IPC_HAIR
// [CELADON-ADD] - TAJARA
skin_tone_nose = GLOB.skin_tones_nose[hex2num(copytext(seed, 1, 2)) % length(GLOB.skin_tones_nose)]
diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm
index c6fb4d2fa5ec..c68451d6f1e1 100644
--- a/code/modules/mob/living/carbon/human/species.dm
+++ b/code/modules/mob/living/carbon/human/species.dm
@@ -854,6 +854,12 @@ GLOBAL_LIST_EMPTY(roundstart_races)
bodyparts_to_add -= "ears"
bodyparts_to_add -= "ears"
+ // [CELADON-ADD] - CELADON_IPC_HAIR
+ if("ipc_hair" in mutant_bodyparts)
+ if(!H.dna.features["ipc_hair"] || H.dna.features["ipc_hair"] == "None" || (H.head && (H.head.flags_inv & HIDEHAIR)) || !HD)
+ bodyparts_to_add -= "ipc_hair"
+ // [/CELADON-ADD] - CELADON_IPC_HAIR
+
if("ipc_screen" in mutant_bodyparts)
if(!H.dna.features["ipc_screen"] || H.dna.features["ipc_screen"] == "None" || (H.wear_mask && (H.wear_mask.flags_inv & HIDEEYES)) || !HD)
bodyparts_to_add -= "ipc_screen"
@@ -1049,6 +1055,10 @@ GLOBAL_LIST_EMPTY(roundstart_races)
S = GLOB.moth_markings_list[H.dna.features["moth_markings"]]
if("squid_face")
S = GLOB.squid_face_list[H.dna.features["squid_face"]]
+ // [CELADON-ADD] - CELADON_IPC_HAIR
+ if("ipc_hair")
+ S = GLOB.ipc_hair_list[H.dna.features["ipc_hair"]]
+ // [/CELADON-ADD] - CELADON_IPC_HAIR
if("ipc_screen")
S = GLOB.ipc_screens_list[H.dna.features["ipc_screen"]]
if("ipc_antenna")
diff --git a/code/modules/mob/living/carbon/human/species_types/IPC.dm b/code/modules/mob/living/carbon/human/species_types/IPC.dm
index acff82c13369..dcea79caa971 100644
--- a/code/modules/mob/living/carbon/human/species_types/IPC.dm
+++ b/code/modules/mob/living/carbon/human/species_types/IPC.dm
@@ -20,8 +20,8 @@
mutantlungs = null //no more collecting change for you
mutantappendix = null
mutant_organs = list(/obj/item/organ/cyberimp/arm/power_cord)
- mutant_bodyparts = list("ipc_screen", "ipc_antenna", "ipc_chassis", "ipc_tail", "ipc_brain")
- default_features = list("mcolor" = "#7D7D7D", "ipc_screen" = "Static", "ipc_antenna" = "None", "ipc_chassis" = "Morpheus Cyberkinetics (Custom)", "ipc_tail" = "None", "ipc_brain" = "Posibrain", "body_size" = "Normal")
+ mutant_bodyparts = list("ipc_hair", "ipc_screen", "ipc_antenna", "ipc_chassis", "ipc_tail", "ipc_brain") // [CELADON-ADD] - CELADON_IPC_HAIR
+ default_features = list("mcolor" = "#7D7D7D", "ipc_hair" = "None", "ipc_screen" = "Static", "ipc_antenna" = "None", "ipc_chassis" = "Morpheus Cyberkinetics (Custom)", "ipc_tail" = "None", "ipc_brain" = "Posibrain", "body_size" = "Normal") // [CELADON-ADD] - CELADON_IPC_HAIR
meat = /obj/item/stack/sheet/plasteel{amount = 5}
skinned_type = /obj/item/stack/sheet/metal{amount = 10}
exotic_bloodtype = "Coolant"
diff --git a/mod_celadon/_storge_icons/icons/ipc/ipc_hair.dmi b/mod_celadon/_storge_icons/icons/ipc/ipc_hair.dmi
new file mode 100644
index 000000000000..9683cacc4a38
Binary files /dev/null and b/mod_celadon/_storge_icons/icons/ipc/ipc_hair.dmi differ
diff --git a/mod_celadon/ipc_chassis/code/ipc.dm b/mod_celadon/ipc_chassis/code/ipc.dm
index eff6f084e76e..1fc064d2836e 100644
--- a/mod_celadon/ipc_chassis/code/ipc.dm
+++ b/mod_celadon/ipc_chassis/code/ipc.dm
@@ -109,3 +109,46 @@
/datum/sprite_accessory/ipc_chassis/zion_spirit
name = "Zion AC - spirit"
limbs_id = "zen_sp"
+
+/*
+ IPC hair
+*/
+
+/datum/sprite_accessory/ipc_hair
+ icon = 'mod_celadon/_storge_icons/icons/ipc/ipc_hair.dmi'
+ color_src = HAIR
+
+/datum/sprite_accessory/ipc_hair/none
+ name = "None"
+ icon_state = null
+
+/datum/sprite_accessory/ipc_hair/buisness
+ name = "Buisness"
+ icon_state = "buisness"
+
+/datum/sprite_accessory/ipc_hair/sideswipe
+ name = "Sideswipe"
+ icon_state = "sideswipe"
+
+/datum/sprite_accessory/ipc_hair/spiky
+ name = "Spiky"
+ icon_state = "spiky"
+
+/datum/sprite_accessory/ipc_hair/longfringe
+ name = "Long Fringe"
+ icon_state = "longfringe"
+
+/datum/sprite_accessory/ipc_hair/emo
+ name = "Emo"
+ icon_state = "emo"
+/datum/sprite_accessory/ipc_hair/pigtails
+ name = "Pigtails"
+ icon_state = "pigtails"
+
+/datum/sprite_accessory/ipc_hair/sidetail
+ name = "Sidetail"
+ icon_state = "sidetail"
+
+/datum/sprite_accessory/ipc_hair/slightlymessy
+ name = "Slightly messy"
+ icon_state = "slightlymessy"
diff --git a/mod_celadon/ipc_hair/README.md b/mod_celadon/ipc_hair/README.md
new file mode 100644
index 000000000000..e53614c4e4ad
--- /dev/null
+++ b/mod_celadon/ipc_hair/README.md
@@ -0,0 +1,97 @@
+
+#### Список PRов
+
+- https://github.com/CeladonSS13/Shiptest/pulls/#####
+
+
+
+## IPC hair
+
+ID мода: CELADON_IPC_HAIR
+
+
+### Описание мода
+
+Добавляет волосы для СПУ
+
+
+### Используется в других проектах?
+- Нет
+
+
+### Изменения *кор кода*
+
+- Отсутствуют
+
+
+### Оверрайды
+
+- Отсутствуют
+
+
+### Дефайны
+
+- Отсутствуют
+
+
+### Используемые файлы, не содержащиеся в модпаке
+
+- Отсутствуют
+
+
+### Авторы
+
+Feenie
+
diff --git a/mod_celadon/ipc_hair/_ipc_hair.dm b/mod_celadon/ipc_hair/_ipc_hair.dm
new file mode 100644
index 000000000000..4fc518984c36
--- /dev/null
+++ b/mod_celadon/ipc_hair/_ipc_hair.dm
@@ -0,0 +1,8 @@
+/// name - название модпака. Используется для поиска других модпаков в init.
+/// desc - описание для модпака. Может использоваться для списка глаголов модпака в качестве описания.
+/// author - автор(ы) этого модпака.
+
+/datum/modpack/ipc_hair
+ name = "IPC hair"
+ desc = "Additional sprite accessory"
+ author = "Feenie"
diff --git a/mod_celadon/ipc_hair/_ipc_hair.dme b/mod_celadon/ipc_hair/_ipc_hair.dme
new file mode 100644
index 000000000000..0e6556503cc8
--- /dev/null
+++ b/mod_celadon/ipc_hair/_ipc_hair.dme
@@ -0,0 +1,6 @@
+#ifndef MODPACK_CELADON_IPC_HAIR
+#define MODPACK_CELADON_IPC_HAIR
+
+#include "_ipc_hair.dm"
+
+#endif