diff --git a/code/__DEFINES/obj_flags.dm b/code/__DEFINES/obj_flags.dm index 5fda2e9c15b2..1ebad6f24140 100644 --- a/code/__DEFINES/obj_flags.dm +++ b/code/__DEFINES/obj_flags.dm @@ -70,7 +70,7 @@ #define WEAPON_DESCRIPTION_INITIALIZED (1<<21) /// If an item causes bluespace interference when teleported with. #define BLUESPACE_INTERFERENCE (1<<22) -#define ACTIVE_WORLD_ICON (1<<23) // DARKPACK EDIT ADD - World Icons +#define ACTIVE_ONFLOOR_ICON (1<<23) // DARKPACK EDIT ADD - ONFLOOR_ICONS // Flags for the clothing_flags var on /obj/item/clothing diff --git a/code/__DEFINES/~darkpack/fera/fera.dm b/code/__DEFINES/~darkpack/fera/fera.dm index fd28eb1c24c2..21335a4fa333 100644 --- a/code/__DEFINES/~darkpack/fera/fera.dm +++ b/code/__DEFINES/~darkpack/fera/fera.dm @@ -16,25 +16,28 @@ #define BREED_CORAX_HOMID "Corax Homid" #define BREED_CORVID "Corvid" -#define FEATURE_FUR_COLOR "fera_fur" +#define FEATURE_FERA_FUR_COLOR "fera_fur_color" +#define FEATURE_FERA_HAIR(splat_id) "fera_hair" + splat_id +#define FEATURE_FERA_BODY(splat_id) "fera_body" + splat_id +#define FEATURE_FERA_CLOTHES(splat_id) "fera_clothes" + splat_id -// fera will likely have a seperate list of colors but uses the same feature or var as other fera -GLOBAL_LIST_INIT(garou_fur_colors, list( - "black" = "black", - "gray" = "gray", - "red" = "red", - "white" = "white", - "ginger" = "ginger", - "brown" = "brown", -)) - -GLOBAL_LIST_INIT(corax_fur_colors, list( - "black" = "black", - "brown" = "brown", - "white" = "white", - "green" = "green", - "red" = "red", - "gray" = "gray", +GLOBAL_ALIST_INIT(fera_fur_colors, alist( + SPLAT_GAROU = list( + "black" = "black", + "gray" = "gray", + "red" = "red", + "white" = "white", + "ginger" = "ginger", + "brown" = "brown", + ), + SPLAT_CORAX = list( + "black" = "black", + "brown" = "brown", + "white" = "white", + "green" = "green", + "red" = "red", + "gray" = "gray", + ) )) #define STATUS_EFFECT_DELIRIUM /datum/status_effect/delirium diff --git a/code/controllers/subsystem/sprite_accessories.dm b/code/controllers/subsystem/sprite_accessories.dm index b053136cb6f8..823e51de17b6 100644 --- a/code/controllers/subsystem/sprite_accessories.dm +++ b/code/controllers/subsystem/sprite_accessories.dm @@ -102,6 +102,12 @@ SUBSYSTEM_DEF(accessories) // just 'accessories' for brevity feature_list[FEATURE_TAIL_MONKEY] = INIT_ACCESSORY(/datum/sprite_accessory/tails/monkey) feature_list[FEATURE_TAIL_XENO] = INIT_ACCESSORY(/datum/sprite_accessory/tails/xeno) + // DARKPACK EDIT ADD START - WEREWOLF + feature_list[FEATURE_FERA_HAIR(SPLAT_GAROU)] = INIT_OPTIONAL_ACCESSORY(/datum/sprite_accessory/fera_feature/hair/garou) + feature_list[FEATURE_FERA_BODY(SPLAT_GAROU)] = INIT_OPTIONAL_ACCESSORY(/datum/sprite_accessory/fera_feature/body/garou) + feature_list[FEATURE_FERA_CLOTHES(SPLAT_GAROU)] = INIT_OPTIONAL_ACCESSORY(/datum/sprite_accessory/fera_feature/clothes/garou) + // DARKPACK EDIT ADD END + /// This proc just initializes all /datum/sprite_accessory/hair_gradient into an list indexed by gradient-style name /datum/controller/subsystem/accessories/proc/init_hair_gradients() hair_gradients_list = list() diff --git a/code/modules/food_and_drinks/equipment/kitchen_utensils.dm b/code/modules/food_and_drinks/equipment/kitchen_utensils.dm index 06dc92404e48..50aa9f928286 100644 --- a/code/modules/food_and_drinks/equipment/kitchen_utensils.dm +++ b/code/modules/food_and_drinks/equipment/kitchen_utensils.dm @@ -248,8 +248,8 @@ /obj/item/kitchen/spoon/update_overlays() . = ..() - // DARKPACK EDIT ADD START - WORLD_ICON - if(item_flags & ACTIVE_WORLD_ICON) // World icons have nothing but the base state atm + // DARKPACK EDIT ADD START - ONFLOOR_ICONS + if(item_flags & ACTIVE_ONFLOOR_ICON) // World icons have nothing but the base state atm return // DARKPACK EDIT ADD END if(reagents.total_volume <= 0) diff --git a/code/modules/projectiles/guns/ballistic.dm b/code/modules/projectiles/guns/ballistic.dm index d5dece1759e5..f07e501dd13c 100644 --- a/code/modules/projectiles/guns/ballistic.dm +++ b/code/modules/projectiles/guns/ballistic.dm @@ -270,8 +270,8 @@ /obj/item/gun/ballistic/update_overlays() . = ..() - // DARKPACK EDIT ADD START - WORLD_ICON - if(item_flags & ACTIVE_WORLD_ICON) // World icons have nothing but the base state atm + // DARKPACK EDIT ADD START - ONFLOOR_ICONS + if(item_flags & ACTIVE_ONFLOOR_ICON) // World icons have nothing but the base state atm return // DARKPACK EDIT ADD END diff --git a/code/modules/reagents/reagent_containers.dm b/code/modules/reagents/reagent_containers.dm index 308ffa980ba4..35bd078e88b8 100644 --- a/code/modules/reagents/reagent_containers.dm +++ b/code/modules/reagents/reagent_containers.dm @@ -287,8 +287,8 @@ . = ..() if(!fill_icon_thresholds) return - // DARKPACK EDIT ADD START - WORLD_ICON - if(item_flags & ACTIVE_WORLD_ICON) // world icons dont have reagent filling + // DARKPACK EDIT ADD START - ONFLOOR_ICONS + if(item_flags & ACTIVE_ONFLOOR_ICON) // world icons dont have reagent filling return // DARKPACK EDIT ADD END if(!reagents.total_volume) diff --git a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_human_shifter_dire.png b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_human_shifter_dire.png index f881901300db..3a474d0fb469 100644 Binary files a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_human_shifter_dire.png and b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_human_shifter_dire.png differ diff --git a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_human_shifter_feral.png b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_human_shifter_feral.png index bfb6d4dd4bab..f5cb13d58c59 100644 Binary files a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_human_shifter_feral.png and b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_human_shifter_feral.png differ diff --git a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_human_shifter_war.png b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_human_shifter_war.png index f26cac5b753e..940a2a873da7 100644 Binary files a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_human_shifter_war.png and b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_human_shifter_war.png differ diff --git a/modular_darkpack/master_files/code/game/atom/atom_examine.dm b/modular_darkpack/master_files/code/game/atom/atom_examine.dm index fa1a97cd7f45..20d8db75a447 100644 --- a/modular_darkpack/master_files/code/game/atom/atom_examine.dm +++ b/modular_darkpack/master_files/code/game/atom/atom_examine.dm @@ -1,5 +1,5 @@ /obj/item/get_examine_icon(mob/user) - if(item_flags & ACTIVE_WORLD_ICON) + if(item_flags & ACTIVE_ONFLOOR_ICON) return icon2html(initial(icon), user, initial(icon_state)) else return icon2html(src, user) diff --git a/modular_darkpack/master_files/code/game/objects/items.dm b/modular_darkpack/master_files/code/game/objects/items.dm index f435bbd73031..48f1f60c2d86 100644 --- a/modular_darkpack/master_files/code/game/objects/items.dm +++ b/modular_darkpack/master_files/code/game/objects/items.dm @@ -3,8 +3,10 @@ ///Set to null to disallow breaking. var/cuff_break_strength_needed = null + // ONFLOOR_ICONS var/onflooricon var/onflooricon_state + var/masquerade_violating // STORYTELLR_STATS diff --git a/modular_darkpack/master_files/icons/ui/chat/language.dmi b/modular_darkpack/master_files/icons/ui/chat/language.dmi index b7833a2d4424..a2738650de6b 100644 Binary files a/modular_darkpack/master_files/icons/ui/chat/language.dmi and b/modular_darkpack/master_files/icons/ui/chat/language.dmi differ diff --git a/modular_darkpack/modules/ert/code/items/first_team.dm b/modular_darkpack/modules/ert/code/items/first_team.dm index 0be78c8acdf5..1e8cc63e21ec 100644 --- a/modular_darkpack/modules/ert/code/items/first_team.dm +++ b/modular_darkpack/modules/ert/code/items/first_team.dm @@ -366,13 +366,13 @@ /obj/item/gun/ballistic/automatic/l6_saw/darkpack/update_icon_state() . = ..() - if(item_flags & ACTIVE_WORLD_ICON) + if(item_flags & ACTIVE_ONFLOOR_ICON) return inhand_icon_state = "[base_icon_state][magazine ? "mag":"nomag"]" /obj/item/gun/ballistic/automatic/l6_saw/darkpack/update_overlays() . = ..() - if(item_flags & ACTIVE_WORLD_ICON) + if(item_flags & ACTIVE_ONFLOOR_ICON) return . += "px249f_door_[cover_open ? "open" : "closed"]" diff --git a/modular_darkpack/modules/languages/code/languages/garou_tongue.dm b/modular_darkpack/modules/languages/code/languages/garou_tongue.dm deleted file mode 100644 index c1441d775846..000000000000 --- a/modular_darkpack/modules/languages/code/languages/garou_tongue.dm +++ /dev/null @@ -1,31 +0,0 @@ -/datum/language/garou_tongue - name = "Garou Tongue" - desc = "A guttural and pitchy language also known as 'High Tongue', the language of the Garou capable of being learned and spoken by Garou. It is hard to speak in human form." - key = "w" - flags = LANGUAGE_TONGUELESS_SPEECH - space_chance = 40 - syllables = list( - "to", "lo", "of", "li", "ka", "ha", "he", "ah", "ny", "ro", - "li", "me", "ad", "he", "ah", "um", "co", "ga", "gar", "fa", - "el", "ra", "ia", "of", "os", "ra", "ta", "na", "ga", "ho", - "lu", "lu", "fe", "zi", "mo", "sha", "ru", "te", "vo", "ni", - "xa", "jo", "da", "ku", "pe", "su", "yo", "ve", "mi", "ba" - ) - icon_state = "garou" - default_priority = 10 - -/datum/language/primal_tongue - name = "Primal Tongue" - desc = "A language inherently known to all Garou breeds at birth, able to be spoken only in Lupus, Crinos and Hispo forms." - key = "p" - flags = LANGUAGE_TONGUELESS_SPEECH - space_chance = 40 - syllables = list ( - "gra", "grr", "gru", "gha", "sha", "zho", "yip", "whu", "zar", "ruk", - "kra", "hya", "tza", "ska", "yrr", "fru", "thra", "hwo", "vra", "snar", - "kru", "pha", "gha", "hro", "tzo", "wha", "brak", "thru", "chur", "dra", - "vru", "sna", "yru", "hru", "yla", "fro", "rik", "zru", "skra", "zhu", - "kro", "thro", "zyi", "sha", "hza", "mru", "wru", "bruk", "hka", "tza" - ) - icon_state = "garou" - default_priority = 10 diff --git a/modular_darkpack/modules/onfloor_icons/code/dynamic_item_icon.dm b/modular_darkpack/modules/onfloor_icons/code/dynamic_item_icon.dm index f9052eee82ab..d64f12a18fcd 100644 --- a/modular_darkpack/modules/onfloor_icons/code/dynamic_item_icon.dm +++ b/modular_darkpack/modules/onfloor_icons/code/dynamic_item_icon.dm @@ -40,8 +40,8 @@ item.icon = initial(item.icon) item.pixel_w = initial(item.pixel_w) - if(item.item_flags & ACTIVE_WORLD_ICON) - item.item_flags &= ~ACTIVE_WORLD_ICON + if(item.item_flags & ACTIVE_ONFLOOR_ICON) + item.item_flags &= ~ACTIVE_ONFLOOR_ICON item.update_icon() item.update_greyscale() @@ -53,8 +53,8 @@ if (item.onflooricon_state) item.icon_state = item.onflooricon_state - if(!(item.item_flags & ACTIVE_WORLD_ICON)) - item.item_flags |= ACTIVE_WORLD_ICON + if(!(item.item_flags & ACTIVE_ONFLOOR_ICON)) + item.item_flags |= ACTIVE_ONFLOOR_ICON item.update_icon() //item.update_greyscale() diff --git a/modular_darkpack/modules/werewolf_the_apocalypse/code/basic_mobs/corvid/_bird.dm b/modular_darkpack/modules/werewolf_the_apocalypse/code/basic_mobs/corvid/_bird.dm index e650f726d3a4..b2e9f21636ca 100644 --- a/modular_darkpack/modules/werewolf_the_apocalypse/code/basic_mobs/corvid/_bird.dm +++ b/modular_darkpack/modules/werewolf_the_apocalypse/code/basic_mobs/corvid/_bird.dm @@ -64,11 +64,14 @@ /mob/living/basic/corvid/update_overlays() . = ..() - var/mutable_appearance/eyes_overlay = mutable_appearance(icon, "eyes[HAS_TRAIT(src, TRAIT_MOVE_FLYING) ? "_flying" : ""]") - SET_PLANE(eyes_overlay, ABOVE_LIGHTING_PLANE, src) + /* + var/mutable_appearance/eyes_overlay = mutable_appearance(icon, "eyes[HAS_TRAIT(src, TRAIT_MOVE_FLYING) ? "_flying" : ""]", -EYES_LAYER, src) eyes_overlay.color = sprite_eye_color - // eyes_overlay.layer = ABOVE_LIGHTING_LAYER . += eyes_overlay + */ + + var/mutable_appearance/emissive_overlay = emissive_appearance(icon, "eyes[HAS_TRAIT(src, TRAIT_MOVE_FLYING) ? "_flying" : ""]", src, effect_type = EMISSIVE_SPECULAR) + . += emissive_overlay /datum/action/innate/togglecorvidflight // this action handles corvid forms toggle their flight, and swaps their sprite to be of the relevant type. name = "Toggle Flight" diff --git a/modular_darkpack/modules/werewolf_the_apocalypse/code/changing_breeds/corax.dm b/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/changing_breeds/corax.dm similarity index 100% rename from modular_darkpack/modules/werewolf_the_apocalypse/code/changing_breeds/corax.dm rename to modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/changing_breeds/corax.dm diff --git a/modular_darkpack/modules/werewolf_the_apocalypse/code/preferences/customization/_customization.dm b/modular_darkpack/modules/werewolf_the_apocalypse/code/preferences/customization/_customization.dm new file mode 100644 index 000000000000..fbfa42644bfb --- /dev/null +++ b/modular_darkpack/modules/werewolf_the_apocalypse/code/preferences/customization/_customization.dm @@ -0,0 +1,26 @@ +/datum/preference/choiced/fera_feature + abstract_type = /datum/preference/choiced/fera_feature + savefile_identifier = PREFERENCE_CHARACTER + category = PREFERENCE_CATEGORY_SECONDARY_FEATURES + priority = PREFERENCE_PRIORITY_WORLD_OF_DARKNESS + // must_have_relevant_trait = TRUE + must_be_accessible = TRUE + var/feature_key + var/splat_id + +/datum/preference/choiced/fera_feature/init_possible_values() + return assoc_to_keys_features(SSaccessories.feature_list[feature_key]) + + +/datum/preference/choiced/fera_feature/apply_to_human(mob/living/carbon/human/target, value) + target.dna.features[feature_key] = value + +/datum/preference/choiced/fera_feature/is_accessible(datum/preferences/preferences) + . = ..() + var/datum/splat/splat_path = preferences.read_preference(/datum/preference/choiced/splats) + if(!ispath(splat_path) || splat_path::id != splat_id) + return FALSE + + +/datum/sprite_accessory/fera_feature + abstract_type = /datum/sprite_accessory/fera_feature diff --git a/modular_darkpack/modules/werewolf_the_apocalypse/code/preferences/customization/fera_body.dm b/modular_darkpack/modules/werewolf_the_apocalypse/code/preferences/customization/fera_body.dm new file mode 100644 index 000000000000..d99e9337dd41 --- /dev/null +++ b/modular_darkpack/modules/werewolf_the_apocalypse/code/preferences/customization/fera_body.dm @@ -0,0 +1,52 @@ +/datum/sprite_accessory/fera_feature/body + abstract_type = /datum/sprite_accessory/fera_feature/body + + + +/datum/preference/choiced/fera_feature/garou_body + savefile_key = "garou_body" + feature_key = FEATURE_FERA_BODY(SPLAT_GAROU) + splat_id = SPLAT_GAROU + + +/datum/sprite_accessory/fera_feature/body/garou + abstract_type = /datum/sprite_accessory/fera_feature/body/garou + +/datum/sprite_accessory/fera_feature/body/garou/scar_1 + name = "Right Eye Scar" + icon_state = "scar1" + +/datum/sprite_accessory/fera_feature/body/garou/scar_2 + name = "Left Eye Scar" + icon_state = "scar2" + +/datum/sprite_accessory/fera_feature/body/garou/scar_3 + name = "Nose Scar" + icon_state = "scar3" + +/datum/sprite_accessory/fera_feature/body/garou/scar_4 + name = "Chest Scar" + icon_state = "scar4" + +/datum/sprite_accessory/fera_feature/body/garou/scar_5 + name = "Leg Scar" + icon_state = "scar5" + +/datum/sprite_accessory/fera_feature/body/garou/scar_6 + name = "Head Scar" + icon_state = "scar6" + +/datum/sprite_accessory/fera_feature/body/garou/scar_7 + name = "Shoulder Scar" + icon_state = "scar7" + +/datum/sprite_accessory/fera_feature/body/garou/scar_8 + name = "Right Artificial Arm" + icon_state = "scar8" + +/datum/sprite_accessory/fera_feature/body/garou/scar_9 + name = "Left Artificial Arm" + icon_state = "scar9" + +/datum/dna_block/feature/accessory/garou_body + feature_key = FEATURE_FERA_BODY(SPLAT_GAROU) diff --git a/modular_darkpack/modules/werewolf_the_apocalypse/code/preferences/customization/fera_clothes.dm b/modular_darkpack/modules/werewolf_the_apocalypse/code/preferences/customization/fera_clothes.dm new file mode 100644 index 000000000000..02f7c86b3dd0 --- /dev/null +++ b/modular_darkpack/modules/werewolf_the_apocalypse/code/preferences/customization/fera_clothes.dm @@ -0,0 +1,76 @@ +/datum/sprite_accessory/fera_feature/clothes + abstract_type = /datum/sprite_accessory/fera_feature/clothes + + + +/datum/preference/choiced/fera_feature/garou_clothes + savefile_key = "garou_clothes" + feature_key = FEATURE_FERA_CLOTHES(SPLAT_GAROU) + splat_id = SPLAT_GAROU + + +/datum/sprite_accessory/fera_feature/clothes/garou + abstract_type = /datum/sprite_accessory/fera_feature/clothes/garou + +/datum/sprite_accessory/fera_feature/clothes/garou/loincloth + name = "Loincloth" + icon_state = "loincloth" + +/datum/sprite_accessory/fera_feature/clothes/garou/green_tribal + name = "Green Tribal Accessories" + icon_state = "green_tribal" + +/datum/sprite_accessory/fera_feature/clothes/garou/beige_tribal + name = "Beige Tribal Accessories" + icon_state = "beige_tribal" + +/datum/sprite_accessory/fera_feature/clothes/garou/leather_mantle + name = "Leather Mantle" + icon_state = "leather_mantle" + +/datum/sprite_accessory/fera_feature/clothes/garou/studs + name = "Studs" + icon_state = "studs" + +/datum/sprite_accessory/fera_feature/clothes/garou/dark_mantle + name = "Dark Mantle" + icon_state = "dark_mantle" + +/datum/sprite_accessory/fera_feature/clothes/garou/loincloth_armband + name = "Loincloth & Armband" + icon_state = "loincloth_armband" + +/datum/sprite_accessory/fera_feature/clothes/garou/skull_necklace + name = "Skull Necklace" + icon_state = "skull_necklace" + +/datum/sprite_accessory/fera_feature/clothes/garou/metal_armour // yuck br*tish + name = "Metal Armor" // Fixed it teehee + icon_state = "metal_armour" // Vile disgusting spelling + +/datum/sprite_accessory/fera_feature/clothes/garou/fur_mantle + name = "Fur Mantle" + icon_state = "fur_mantle" + +/datum/sprite_accessory/fera_feature/clothes/garou/fur_necklace_and_vambrace + name = "Fur Necklace & Vambraces" + icon_state = "fur_necklace_and_vambrace" + +/datum/sprite_accessory/fera_feature/clothes/garou/armour_loincloth // yuck br*tish again... + name = "Armor & Loincloth" // Fixed it lalalala + icon_state = "armour_loincloth" + +/datum/sprite_accessory/fera_feature/clothes/garou/red_cloak // litle red riding hood + name = "Red Cloak" + icon_state = "red_cloak" + +/datum/sprite_accessory/fera_feature/clothes/garou/formal_tribal + name = "Formal Tribal Attire" + icon_state = "formal_tribal" + +/datum/sprite_accessory/fera_feature/clothes/garou/dollar_necklace + name = "$$$ Bling" + icon_state = "dollar_necklace" + +/datum/dna_block/feature/accessory/garou_clothes + feature_key = FEATURE_FERA_CLOTHES(SPLAT_GAROU) diff --git a/modular_darkpack/modules/werewolf_the_apocalypse/code/preferences/customization/fera_hair.dm b/modular_darkpack/modules/werewolf_the_apocalypse/code/preferences/customization/fera_hair.dm new file mode 100644 index 000000000000..472d77946158 --- /dev/null +++ b/modular_darkpack/modules/werewolf_the_apocalypse/code/preferences/customization/fera_hair.dm @@ -0,0 +1,33 @@ + +/datum/sprite_accessory/fera_feature/hair + abstract_type = /datum/sprite_accessory/fera_feature/hair + + + +/datum/preference/choiced/fera_feature/garou_hair + savefile_key = "garou_hair" + feature_key = FEATURE_FERA_HAIR(SPLAT_GAROU) + splat_id = SPLAT_GAROU + + +/datum/sprite_accessory/fera_feature/hair/garou + abstract_type = /datum/sprite_accessory/fera_feature/hair/garou + +/datum/sprite_accessory/fera_feature/hair/garou/hair_1 + name = "Mohawk" + icon_state = "hair1" + +/datum/sprite_accessory/fera_feature/hair/garou/hair_2 + name = "Long" + icon_state = "hair2" + +/datum/sprite_accessory/fera_feature/hair/garou/hair_3 + name = "Undercut" + icon_state = "hair3" + +/datum/sprite_accessory/fera_feature/hair/garou/hair_4 + name = "Beard" + icon_state = "hair4" + +/datum/dna_block/feature/accessory/garou_hair + feature_key = FEATURE_FERA_HAIR(SPLAT_GAROU) diff --git a/modular_darkpack/modules/werewolf_the_apocalypse/code/preferences/fur.dm b/modular_darkpack/modules/werewolf_the_apocalypse/code/preferences/customization/fur_color.dm similarity index 73% rename from modular_darkpack/modules/werewolf_the_apocalypse/code/preferences/fur.dm rename to modular_darkpack/modules/werewolf_the_apocalypse/code/preferences/customization/fur_color.dm index 88ddb49c6672..2c611855d712 100644 --- a/modular_darkpack/modules/werewolf_the_apocalypse/code/preferences/fur.dm +++ b/modular_darkpack/modules/werewolf_the_apocalypse/code/preferences/customization/fur_color.dm @@ -1,17 +1,19 @@ /datum/preference/choiced/fera_fur_color - abstract_type = /datum/preference/choiced/fera_fur_color - savefile_key = "fur_color" savefile_identifier = PREFERENCE_CHARACTER category = PREFERENCE_CATEGORY_SECONDARY_FEATURES priority = PREFERENCE_PRIORITY_WORLD_OF_DARKNESS - main_feature_name = "Fera Fur Color" - relevant_inherent_trait = TRAIT_FERA_FUR must_have_relevant_trait = TRUE must_be_accessible = TRUE + + abstract_type = /datum/preference/choiced/fera_fur_color + savefile_key = "fur_color" + + main_feature_name = "Fera Fur Color" + relevant_inherent_trait = TRAIT_FERA_FUR var/splat_id -/datum/preference/choiced/fera_fur_color/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) - target.dna.features[FEATURE_FUR_COLOR] = value +/datum/preference/choiced/fera_fur_color/apply_to_human(mob/living/carbon/human/target, value) + target.dna.features[FEATURE_FERA_FUR_COLOR] = value /datum/preference/choiced/fera_fur_color/is_accessible(datum/preferences/preferences) . = ..() @@ -19,17 +21,19 @@ if(!ispath(splat_path) || splat_path::id != splat_id) return FALSE +/datum/preference/choiced/fera_fur_color/init_possible_values() + return assoc_to_keys(GLOB.fera_fur_colors[splat_id]) + /datum/preference/choiced/fera_fur_color/garou savefile_key = "garou_fur_color" splat_id = SPLAT_GAROU -/datum/preference/choiced/fera_fur_color/garou/init_possible_values() - return assoc_to_keys(GLOB.garou_fur_colors) /datum/preference/choiced/fera_fur_color/corax savefile_key = "corax_fur_color" splat_id = SPLAT_CORAX -/datum/preference/choiced/fera_fur_color/corax/init_possible_values() - return assoc_to_keys(GLOB.corax_fur_colors) + +/datum/dna_block/feature/fera_fur_color + feature_key = FEATURE_FERA_FUR_COLOR diff --git a/modular_darkpack/modules/werewolf_the_apocalypse/code/species/fera_species.dm b/modular_darkpack/modules/werewolf_the_apocalypse/code/species/fera_species.dm index 90ed73d3c5c8..30edb95970b1 100644 --- a/modular_darkpack/modules/werewolf_the_apocalypse/code/species/fera_species.dm +++ b/modular_darkpack/modules/werewolf_the_apocalypse/code/species/fera_species.dm @@ -89,7 +89,20 @@ /// Fetch the mobs fur color from their features. /datum/species/human/shifter/proc/get_fur_color(mob/living/carbon/human/human) - return human.dna.features[FEATURE_FUR_COLOR] ? human.dna.features[FEATURE_FUR_COLOR] : "black" + return human.dna.features[FEATURE_FERA_FUR_COLOR] || "black" + + +/datum/species/human/shifter/proc/get_feature_icon_state(mob/living/carbon/human/human, feature_key) + var/feature_dna = human.dna.features[feature_key] + if(!feature_dna) + return + var/alist/splat_feature_styles = SSaccessories.feature_list[feature_key] + if(!splat_feature_styles) + return + var/datum/sprite_accessory/feature_sprite_datum = splat_feature_styles[feature_dna] + if(!feature_sprite_datum) + return + return feature_sprite_datum::icon_state /// Fetch the mob dmi from our splat @@ -105,26 +118,65 @@ if(!custom_body_render) return FALSE - human.remove_overlay(BODYPARTS_LAYER) + var/datum/splat/werewolf/shifter/shifter_splat = get_shifter_splat(human) + var/splat_id = shifter_splat?.id || SPLAT_GAROU var/fur_color = get_fur_color(human) var/mob_icon = get_mob_icon(human) - var/main_iconstate = "" + var/postfix_info = "" + + human.remove_overlay(BODYPARTS_LAYER) + var/main_icon_state = "" if(HAS_TRAIT(human, TRAIT_WYRMTAINTED_SPRITE)) - main_iconstate += "spiral" - main_iconstate += fur_color - if(has_flight_icon_states && HAS_TRAIT(human, TRAIT_FERA_FLIGHT) && HAS_TRAIT(human, TRAIT_MOVE_FLYING) && HAS_TRAIT(human, TRAIT_NO_FLOATING_ANIM)) - main_iconstate += "_flying" + main_icon_state += "spiral" + main_icon_state += fur_color + if(should_append_flying_to_icon(human)) + postfix_info += "_flying" else if(human.body_position == LYING_DOWN) - main_iconstate += "_rest" - - human.overlays_standing[BODYPARTS_LAYER] = list(image(mob_icon, main_iconstate)) + postfix_info += "_rest" + human.overlays_standing[BODYPARTS_LAYER] = list(image(mob_icon, icon_state = main_icon_state + postfix_info, layer = -BODYPARTS_LAYER)) human.apply_overlay(BODYPARTS_LAYER) + + human.remove_overlay(EYES_LAYER) + var/mutable_appearance/eyes_overlay = mutable_appearance(mob_icon, "eyes" + postfix_info, -EYES_LAYER) + eyes_overlay.color = human.eye_color_left + var/mutable_appearance/emissive_overlay = emissive_appearance(mob_icon, "eyes" + postfix_info, human, effect_type = EMISSIVE_SPECULAR) + emissive_overlay.color = COLOR_WHITE + human.overlays_standing[EYES_LAYER] = list(eyes_overlay, emissive_overlay) + human.apply_overlay(EYES_LAYER) + + + human.remove_overlay(BODY_ADJ_LAYER) + var/body_icon_state = get_feature_icon_state(human, FEATURE_FERA_BODY(splat_id)) + if(body_icon_state) + var/mutable_appearance/body_image = mutable_appearance(mob_icon, body_icon_state + postfix_info, -BODY_ADJ_LAYER) + human.overlays_standing[BODY_ADJ_LAYER] = list(body_image) + human.apply_overlay(BODY_ADJ_LAYER) + + human.remove_overlay(HAIR_LAYER) + var/hair_icon_state = get_feature_icon_state(human, FEATURE_FERA_HAIR(splat_id)) + if(hair_icon_state) + var/mutable_appearance/hair_layer = mutable_appearance(mob_icon, hair_icon_state + postfix_info, -HAIR_LAYER) + hair_layer.color = human.hair_color + human.overlays_standing[HAIR_LAYER] = list(hair_layer) + human.apply_overlay(HAIR_LAYER) + + + human.remove_overlay(UNIFORM_LAYER) + var/uniform_icon_state = get_feature_icon_state(human, FEATURE_FERA_CLOTHES(splat_id)) + if(uniform_icon_state) + var/mutable_appearance/outfit_layer = mutable_appearance(mob_icon, uniform_icon_state + postfix_info, -UNIFORM_LAYER) + human.overlays_standing[UNIFORM_LAYER] = list(outfit_layer) + human.apply_overlay(UNIFORM_LAYER) + return TRUE +/datum/species/human/shifter/proc/should_append_flying_to_icon(mob/living/carbon/human/human) + return has_flight_icon_states && HAS_TRAIT(human, TRAIT_FERA_FLIGHT) && HAS_TRAIT(human, TRAIT_MOVE_FLYING) && HAS_TRAIT(human, TRAIT_NO_FLOATING_ANIM) + /datum/species/human/shifter/update_damage_overlays(mob/living/carbon/human/human) if(!custom_damage_render) return FALSE diff --git a/modular_darkpack/modules/werewolf_the_apocalypse/icons/garou_forms/crinos.dmi b/modular_darkpack/modules/werewolf_the_apocalypse/icons/garou_forms/crinos.dmi index 9debf63f88ee..d75326bde329 100644 Binary files a/modular_darkpack/modules/werewolf_the_apocalypse/icons/garou_forms/crinos.dmi and b/modular_darkpack/modules/werewolf_the_apocalypse/icons/garou_forms/crinos.dmi differ diff --git a/tgstation.dme b/tgstation.dme index 2887f6e24147..aa5fa19aad05 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -7666,7 +7666,6 @@ #include "modular_darkpack\modules\languages\code\languages\english.dm" #include "modular_darkpack\modules\languages\code\languages\farsi.dm" #include "modular_darkpack\modules\languages\code\languages\french.dm" -#include "modular_darkpack\modules\languages\code\languages\garou_tongue.dm" #include "modular_darkpack\modules\languages\code\languages\german.dm" #include "modular_darkpack\modules\languages\code\languages\greek.dm" #include "modular_darkpack\modules\languages\code\languages\hebrew.dm" @@ -8248,13 +8247,13 @@ #include "modular_darkpack\modules\werewolf_the_apocalypse\code\basic_mobs\corvid\bird_ai.dm" #include "modular_darkpack\modules\werewolf_the_apocalypse\code\caern\bawn.dm" #include "modular_darkpack\modules\werewolf_the_apocalypse\code\caern\totems.dm" -#include "modular_darkpack\modules\werewolf_the_apocalypse\code\changing_breeds\corax.dm" #include "modular_darkpack\modules\werewolf_the_apocalypse\code\gifts\_gift.dm" #include "modular_darkpack\modules\werewolf_the_apocalypse\code\gifts\auspices\ahroun.dm" #include "modular_darkpack\modules\werewolf_the_apocalypse\code\gifts\auspices\galliard.dm" #include "modular_darkpack\modules\werewolf_the_apocalypse\code\gifts\auspices\philodox.dm" #include "modular_darkpack\modules\werewolf_the_apocalypse\code\gifts\auspices\ragabash.dm" #include "modular_darkpack\modules\werewolf_the_apocalypse\code\gifts\auspices\theurge.dm" +#include "modular_darkpack\modules\werewolf_the_apocalypse\code\gifts\changing_breeds\corax.dm" #include "modular_darkpack\modules\werewolf_the_apocalypse\code\gifts\innate\eye_drink.dm" #include "modular_darkpack\modules\werewolf_the_apocalypse\code\gifts\innate\howling.dm" #include "modular_darkpack\modules\werewolf_the_apocalypse\code\gifts\tribes\black_furies.dm" @@ -8274,10 +8273,14 @@ #include "modular_darkpack\modules\werewolf_the_apocalypse\code\gifts\tribes\glasswalkers\glasswalkers.dm" #include "modular_darkpack\modules\werewolf_the_apocalypse\code\preferences\auspice.dm" #include "modular_darkpack\modules\werewolf_the_apocalypse\code\preferences\breed.dm" -#include "modular_darkpack\modules\werewolf_the_apocalypse\code\preferences\fur.dm" #include "modular_darkpack\modules\werewolf_the_apocalypse\code\preferences\renown.dm" #include "modular_darkpack\modules\werewolf_the_apocalypse\code\preferences\tribe.dm" #include "modular_darkpack\modules\werewolf_the_apocalypse\code\preferences\wyrm_taint.dm" +#include "modular_darkpack\modules\werewolf_the_apocalypse\code\preferences\customization\_customization.dm" +#include "modular_darkpack\modules\werewolf_the_apocalypse\code\preferences\customization\fera_body.dm" +#include "modular_darkpack\modules\werewolf_the_apocalypse\code\preferences\customization\fera_clothes.dm" +#include "modular_darkpack\modules\werewolf_the_apocalypse\code\preferences\customization\fera_hair.dm" +#include "modular_darkpack\modules\werewolf_the_apocalypse\code\preferences\customization\fur_color.dm" #include "modular_darkpack\modules\werewolf_the_apocalypse\code\species\fera_organs.dm" #include "modular_darkpack\modules\werewolf_the_apocalypse\code\species\fera_species.dm" #include "modular_darkpack\modules\werewolf_the_apocalypse\code\species\flight_action.dm" diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/darkpack_fur_color.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/darkpack_fera.tsx similarity index 50% rename from tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/darkpack_fur_color.tsx rename to tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/darkpack_fera.tsx index f6bb6b7f0fa4..78db68478435 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/darkpack_fur_color.tsx +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/darkpack_fera.tsx @@ -10,3 +10,19 @@ export const corax_fur_color: FeatureChoiced = { name: 'Corax Feather Color', component: FeatureDropdownInput, }; + + +export const garou_hair: FeatureChoiced = { + name: 'Garou Hair', + component: FeatureDropdownInput, +}; + +export const garou_body: FeatureChoiced = { + name: 'Garou Body', + component: FeatureDropdownInput, +}; + +export const garou_clothes: FeatureChoiced = { + name: 'Garou Clothes', + component: FeatureDropdownInput, +};