From 229e70e568ec476c4227a3e3b03ddfaa73e7f98d Mon Sep 17 00:00:00 2001 From: thgvr Date: Wed, 10 Apr 2024 08:36:35 -0700 Subject: [PATCH 01/14] Initial kepori commit --- code/game/objects/items/storage/backpack.dm | 2 +- .../clothing/spacesuits/_spacesuits.dm | 2 +- .../mob/living/carbon/human/species.dm | 15 +++++++++++-- .../carbon/human/species_types/kepori.dm | 20 +++++++++++++----- .../living/carbon/human/species_types/vox.dm | 2 -- icons/mob/clothing/species/kepori.dmi | Bin 4392 -> 3541 bytes icons/mob/species/kepori/bodyparts.dmi | Bin 1368 -> 1480 bytes icons/mob/species/kepori/kepori_eyes.dmi | Bin 0 -> 308 bytes 8 files changed, 30 insertions(+), 11 deletions(-) create mode 100644 icons/mob/species/kepori/kepori_eyes.dmi diff --git a/code/game/objects/items/storage/backpack.dm b/code/game/objects/items/storage/backpack.dm index ac5b14568dad..2efed5cf1eee 100644 --- a/code/game/objects/items/storage/backpack.dm +++ b/code/game/objects/items/storage/backpack.dm @@ -221,7 +221,7 @@ /obj/item/storage/backpack/satchel/leather name = "leather satchel" desc = "It's a very fancy satchel made with fine leather." - icon = 'icons/obj/storage.dmi' //WS Edit - Suitcases + icon = 'icons/obj/storage.dmi' icon_state = "satchel" item_state = "satchel" diff --git a/code/modules/clothing/spacesuits/_spacesuits.dm b/code/modules/clothing/spacesuits/_spacesuits.dm index 4b19735b5f62..589843998a53 100644 --- a/code/modules/clothing/spacesuits/_spacesuits.dm +++ b/code/modules/clothing/spacesuits/_spacesuits.dm @@ -36,7 +36,7 @@ slowdown = 1 armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 50, "fire" = 80, "acid" = 70) flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT - cold_protection = CHEST | GROIN | LEGS | FEET | ARMS | HANDS + cold_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS min_cold_protection_temperature = SPACE_SUIT_MIN_TEMP_PROTECT heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS max_heat_protection_temperature = SPACE_SUIT_MAX_TEMP_PROTECT diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index eda9c8c3db64..c2d1f051bfb6 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -688,16 +688,27 @@ GLOBAL_LIST_EMPTY(roundstart_races) var/obj/item/organ/eyes/eyes = H.getorganslot(ORGAN_SLOT_EYES) var/mutable_appearance/eye_overlay var/mutable_appearance/sclera_overlay + if(eyes) if(!HAS_TRAIT(H, TRAIT_EYESCLOSED) && !(H.stat == DEAD)) - eye_overlay = mutable_appearance(species_eye_path || 'icons/mob/human_face.dmi', eyes.eye_icon_state, -BODYPARTS_LAYER) - sclera_overlay = mutable_appearance('icons/mob/human_face.dmi', eyes.sclera_icon_state, -BODYPARTS_LAYER) + + if(iskepori(H)) // Kepori need sclera but don't fit the normal silhouette, so this needs changing. Make better later. + eye_overlay = mutable_appearance('icons/mob/species/kepori/kepori_eyes.dmi', eyes.eye_icon_state, -BODYPARTS_LAYER) + sclera_overlay = mutable_appearance('icons/mob/species/kepori/kepori_eyes.dmi', eyes.sclera_icon_state, -BODYPARTS_LAYER) + + else + eye_overlay = mutable_appearance(species_eye_path || 'icons/mob/human_face.dmi', eyes.eye_icon_state, -BODYPARTS_LAYER) + sclera_overlay = mutable_appearance('icons/mob/human_face.dmi', eyes.sclera_icon_state, -BODYPARTS_LAYER) + if((EYECOLOR in species_traits) && eyes) eye_overlay.color = "#" + H.eye_color + if((SCLERA in species_traits) && eyes) sclera_overlay.color = "#" + H.sclera_color standing += sclera_overlay + standing += eye_overlay + if(EMOTE_OVERLAY in species_traits) // blush if (HAS_TRAIT(H, TRAIT_BLUSHING)) // Caused by either the *blush emote or the "drunk" mood event diff --git a/code/modules/mob/living/carbon/human/species_types/kepori.dm b/code/modules/mob/living/carbon/human/species_types/kepori.dm index 5693c646cf3f..4d7a8013a1cb 100644 --- a/code/modules/mob/living/carbon/human/species_types/kepori.dm +++ b/code/modules/mob/living/carbon/human/species_types/kepori.dm @@ -2,7 +2,7 @@ name = "\improper Kepori" id = SPECIES_KEPORI default_color = "6060FF" - species_traits = list(MUTCOLORS, EYECOLOR, MUTCOLORS_SECONDARY) + species_traits = list(SCLERA, MUTCOLORS, EYECOLOR, MUTCOLORS_SECONDARY) inherent_traits = list(TRAIT_SCOOPABLE) mutant_bodyparts = list("kepori_body_feathers", "kepori_tail_feathers", "kepori_feathers") default_features = list("mcolor" = "0F0", "wings" = "None", "kepori_feathers" = "Plain", "kepori_body_feathers" = "Plain", "kepori_tail_feathers" = "Fan", "body_size" = "Normal") @@ -15,7 +15,7 @@ attack_sound = 'sound/weapons/slash.ogg' miss_sound = 'sound/weapons/slashmiss.ogg' species_clothing_path = 'icons/mob/clothing/species/kepori.dmi' - species_eye_path = 'icons/mob/kepori_parts.dmi' + species_eye_path = 'icons/mob/species/kepori/kepori_eyes.dmi' heatmod = 0.67 coldmod = 1.5 brutemod = 1.5 @@ -86,17 +86,27 @@ return equip_delay_self_check(I, H, bypass_equip_delay_self) /datum/species/kepori/on_species_gain(mob/living/carbon/C, datum/species/old_species, pref_load) - ..() + . = ..() + + C.base_pixel_x -= 8 + C.pixel_x = C.base_pixel_x + C.update_hands_on_rotate() + if(ishuman(C)) keptackle = new keptackle.Grant(C) /datum/species/kepori/on_species_loss(mob/living/carbon/human/C, datum/species/new_species, pref_load) + . = ..() + + C.base_pixel_x += 8 + C.pixel_x = C.base_pixel_x + C.stop_updating_hands() + if(keptackle) keptackle.Remove(C) - qdel(C.GetComponent(/datum/component/tackler)) - ..() + qdel(C.GetComponent(/datum/component/tackler)) /datum/action/innate/keptackle name = "Pounce" diff --git a/code/modules/mob/living/carbon/human/species_types/vox.dm b/code/modules/mob/living/carbon/human/species_types/vox.dm index fd03e184b9ba..24c766dec257 100644 --- a/code/modules/mob/living/carbon/human/species_types/vox.dm +++ b/code/modules/mob/living/carbon/human/species_types/vox.dm @@ -73,8 +73,6 @@ return random_unique_vox_name() return vox_name() - - /datum/species/vox/on_species_gain(mob/living/carbon/C, datum/species/old_species, pref_load) . = ..() C.base_pixel_x -= 9 diff --git a/icons/mob/clothing/species/kepori.dmi b/icons/mob/clothing/species/kepori.dmi index cfa1f108dc68b3775d990517c1c00613836150c4..1586e80e9b19d4505a1581125806a670a351b0de 100644 GIT binary patch literal 3541 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 literal 4392 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 diff --git a/icons/mob/species/kepori/bodyparts.dmi b/icons/mob/species/kepori/bodyparts.dmi index f19aaeacbe08ebafdf5c90f7fe8fd985e6ba2dfc..058d315d7bd838f18a69c3eadde22c29f701f7b9 100644 GIT binary patch literal 1480 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 aS@;KFB^A&t%D~FVdQ&MBb@ E00#GXP5=M^ literal 0 HcmV?d00001 From c67f4c8dd73f9681f48113ac755845be30d047d6 Mon Sep 17 00:00:00 2001 From: thgvr Date: Fri, 12 Apr 2024 03:14:47 -0700 Subject: [PATCH 02/14] big work --- code/__DEFINES/inventory.dm | 1 - code/__HELPERS/global_lists.dm | 1 + code/__HELPERS/mobs.dm | 1 + code/_globalvars/lists/flavor_misc.dm | 1 + code/modules/admin/create_mob.dm | 1 + code/modules/client/preferences.dm | 26 +++- code/modules/client/preferences_savefile.dm | 7 +- code/modules/clothing/clothing.dm | 5 +- code/modules/clothing/gloves/color.dm | 11 +- code/modules/clothing/gloves/miscellaneous.dm | 2 +- code/modules/clothing/head/helmet.dm | 2 + code/modules/clothing/suits/armor.dm | 6 +- code/modules/clothing/suits/wintercoats.dm | 125 +++++++++++++----- code/modules/clothing/under/jobs/cargo.dm | 14 +- code/modules/clothing/under/jobs/medical.dm | 2 +- code/modules/clothing/under/skirt_dress.dm | 2 +- code/modules/clothing/under/syndicate.dm | 26 ++-- .../new_player/sprite_accessories/kepori.dm | 53 +++++--- .../living/carbon/human/consistent_human.dm | 1 + .../mob/living/carbon/human/species.dm | 2 + .../carbon/human/species_types/kepori.dm | 37 +++++- icons/blanks/64x64.dmi | Bin 0 -> 216 bytes icons/mob/kepori_parts.dmi | Bin 7739 -> 0 bytes icons/mob/species/kepori/kepori_parts.dmi | Bin 0 -> 2824 bytes .../mob/species/kepori/onmob_belt_kepori.dmi | Bin 182 -> 184 bytes .../species/kepori/onmob_belt_keporiOLD.dmi | Bin 0 -> 182 bytes .../mob/species/kepori/onmob_eyes_kepori.dmi | Bin 312 -> 366 bytes .../species/kepori/onmob_eyes_keporiOLD.dmi | Bin 0 -> 312 bytes .../mob/species/kepori/onmob_feet_kepori.dmi | Bin 1676 -> 5438 bytes .../species/kepori/onmob_feet_keporiOLD.dmi | Bin 0 -> 1676 bytes .../mob/species/kepori/onmob_hands_kepori.dmi | Bin 393 -> 216 bytes .../species/kepori/onmob_hands_keporiOLD.dmi | Bin 0 -> 393 bytes .../mob/species/kepori/onmob_head_kepori.dmi | Bin 1169 -> 1224 bytes .../species/kepori/onmob_head_keporiOLD.dmi | Bin 0 -> 1164 bytes .../mob/species/kepori/onmob_mask_kepori.dmi | Bin 463 -> 211 bytes .../species/kepori/onmob_mask_keporiOLD.dmi | Bin 0 -> 463 bytes .../mob/species/kepori/onmob_suit_kepori.dmi | Bin 5080 -> 2350 bytes .../species/kepori/onmob_suit_keporiOLD.dmi | Bin 0 -> 5080 bytes .../species/kepori/onmob_uniform_kepori.dmi | Bin 34468 -> 3279 bytes .../kepori/onmob_uniform_keporiOLD.dmi | Bin 0 -> 35309 bytes 40 files changed, 228 insertions(+), 98 deletions(-) create mode 100644 icons/blanks/64x64.dmi delete mode 100644 icons/mob/kepori_parts.dmi create mode 100644 icons/mob/species/kepori/kepori_parts.dmi create mode 100644 icons/mob/species/kepori/onmob_belt_keporiOLD.dmi create mode 100644 icons/mob/species/kepori/onmob_eyes_keporiOLD.dmi create mode 100644 icons/mob/species/kepori/onmob_feet_keporiOLD.dmi create mode 100644 icons/mob/species/kepori/onmob_hands_keporiOLD.dmi create mode 100644 icons/mob/species/kepori/onmob_head_keporiOLD.dmi create mode 100644 icons/mob/species/kepori/onmob_mask_keporiOLD.dmi create mode 100644 icons/mob/species/kepori/onmob_suit_keporiOLD.dmi create mode 100644 icons/mob/species/kepori/onmob_uniform_keporiOLD.dmi diff --git a/code/__DEFINES/inventory.dm b/code/__DEFINES/inventory.dm index 79f178820285..f8acadd96636 100644 --- a/code/__DEFINES/inventory.dm +++ b/code/__DEFINES/inventory.dm @@ -186,5 +186,4 @@ GLOBAL_LIST_INIT(security_wintercoat_allowed, typecacheof(list( /obj/item/tank/internals/plasmaman, /obj/item/toy))) -//WS Port - Internals checker #define GET_INTERNAL_SLOTS(C) list(C.head, C.wear_mask) diff --git a/code/__HELPERS/global_lists.dm b/code/__HELPERS/global_lists.dm index e44755574eea..5eb2686b2118 100644 --- a/code/__HELPERS/global_lists.dm +++ b/code/__HELPERS/global_lists.dm @@ -42,6 +42,7 @@ init_sprite_accessory_subtypes(/datum/sprite_accessory/spider_spinneret, GLOB.spider_spinneret_list) init_sprite_accessory_subtypes(/datum/sprite_accessory/kepori_feathers, GLOB.kepori_feathers_list) init_sprite_accessory_subtypes(/datum/sprite_accessory/kepori_body_feathers, GLOB.kepori_body_feathers_list) + init_sprite_accessory_subtypes(/datum/sprite_accessory/kepori_head_feathers, GLOB.kepori_head_feathers_list) init_sprite_accessory_subtypes(/datum/sprite_accessory/kepori_tail_feathers, GLOB.kepori_tail_feathers_list) init_sprite_accessory_subtypes(/datum/sprite_accessory/vox_head_quills, GLOB.vox_head_quills_list) init_sprite_accessory_subtypes(/datum/sprite_accessory/vox_neck_quills, GLOB.vox_neck_quills_list) diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm index fdeadc13b61a..23d41d120383 100644 --- a/code/__HELPERS/mobs.dm +++ b/code/__HELPERS/mobs.dm @@ -108,6 +108,7 @@ "ipc_chassis" = pick(GLOB.ipc_chassis_list), "ipc_screen" = pick(GLOB.ipc_screens_list), "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), "kepori_tail_feathers" = pick(GLOB.kepori_tail_feathers_list), "legs" = "Normal Legs", diff --git a/code/_globalvars/lists/flavor_misc.dm b/code/_globalvars/lists/flavor_misc.dm index 479e43e34543..b0a196e4ee95 100644 --- a/code/_globalvars/lists/flavor_misc.dm +++ b/code/_globalvars/lists/flavor_misc.dm @@ -46,6 +46,7 @@ GLOBAL_LIST_EMPTY(spider_legs_list) GLOBAL_LIST_EMPTY(spider_spinneret_list) GLOBAL_LIST_EMPTY(kepori_feathers_list) GLOBAL_LIST_EMPTY(kepori_body_feathers_list) +GLOBAL_LIST_EMPTY(kepori_head_feathers_list) GLOBAL_LIST_EMPTY(kepori_tail_feathers_list) GLOBAL_LIST_EMPTY(vox_head_quills_list) GLOBAL_LIST_EMPTY(vox_neck_quills_list) diff --git a/code/modules/admin/create_mob.dm b/code/modules/admin/create_mob.dm index c1845945485f..cced67b47ac7 100644 --- a/code/modules/admin/create_mob.dm +++ b/code/modules/admin/create_mob.dm @@ -41,6 +41,7 @@ H.dna.features["squid_face"] = pick(GLOB.squid_face_list) H.dna.features["kepori_feathers"] = pick(GLOB.kepori_feathers_list) H.dna.features["kepori_body_feathers"] = pick(GLOB.kepori_body_feathers_list) + H.dna.features["kepori_head_feathers"] = pick(GLOB.kepori_head_feathers_list) H.dna.features["vox_head_quills"] = pick(GLOB.vox_head_quills_list) H.dna.features["vox_neck_quills"] = pick(GLOB.vox_neck_quills_list) H.dna.features["elzu_horns"] = pick(GLOB.elzu_horns_list) diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index ebf32c163d89..f7233e591256 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -114,9 +114,10 @@ GLOBAL_LIST_EMPTY(preferences_datums) "ipc_tail" = "None", "ipc_chassis" = "Morpheus Cyberkinetics (Custom)", "ipc_brain" = "Posibrain", - "kepori_feathers" = "Plain", - "kepori_body_feathers" = "Plain", - "kepori_tail_feathers" = "Fan", + "kepori_feathers" = "None", + "kepori_body_feathers" = "None", + "kepori_head_feathers" = "None" + "kepori_tail_feathers" = "None", "vox_head_quills" = "Plain", "vox_neck_quills" = "Plain", "elzu_horns" = "None", @@ -727,6 +728,19 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "" mutant_category = 0 + if("kepori_head_feathers" in pref_species.default_features) + if(!mutant_category) + dat += APPEARANCE_CATEGORY_COLUMN + + dat += "

Head Feathers

" + dat += "[features["kepori_head_feathers"]]
" + dat += "    Change
" + + mutant_category++ + if(mutant_category >= MAX_MUTANT_ROWS) + dat += "" + mutant_category = 0 + if("kepori_body_feathers" in pref_species.default_features) if(!mutant_category) dat += APPEARANCE_CATEGORY_COLUMN @@ -1959,6 +1973,12 @@ GLOBAL_LIST_EMPTY(preferences_datums) if (new_kepori_feathers) features["kepori_feathers"] = new_kepori_feathers + if("kepori_head_feathers") + var/new_kepori_feathers + new_kepori_feathers = input(user, "Choose your character's head feathers:", "Character Preference") as null|anything in GLOB.kepori_head_feathers_list + if (new_kepori_feathers) + features["kepori_head_feathers"] = new_kepori_feathers + if("kepori_body_feathers") var/new_kepori_feathers new_kepori_feathers = input(user, "Choose your character's body feathers:", "Character Preference") as null|anything in GLOB.kepori_body_feathers_list diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index 0b95e291b794..732f0ced7bb2 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -436,6 +436,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car READ_FILE(S["feature_ipc_brain"], features["ipc_brain"]) READ_FILE(S["feature_kepori_feathers"], features["kepori_feathers"]) READ_FILE(S["feature_kepori_body_feathers"], features["kepori_body_feathers"]) + READ_FILE(S["feature_kepori_head_feathers"], features["kepori_head_feathers"]) READ_FILE(S["feature_kepori_tail_feathers"], features["kepori_tail_feathers"]) READ_FILE(S["feature_vox_head_quills"], features["vox_head_quills"]) READ_FILE(S["feature_vox_neck_quills"], features["vox_neck_quills"]) @@ -546,8 +547,9 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car features["ipc_chassis"] = sanitize_inlist(features["ipc_chassis"], GLOB.ipc_chassis_list) features["ipc_brain"] = sanitize_inlist(features["ipc_brain"], GLOB.ipc_brain_list) features["kepori_feathers"] = sanitize_inlist(features["kepori_feathers"], GLOB.kepori_feathers_list, "Plain") - features["kepori_body_feathers"] = sanitize_inlist(features["kepori_body_feathers"], GLOB.kepori_body_feathers_list, "Plain") - features["kepori_tail_feathers"] = sanitize_inlist(features["kepori_tail_feathers"], GLOB.kepori_tail_feathers_list, "Fan") + features["kepori_body_feathers"] = sanitize_inlist(features["kepori_body_feathers"], GLOB.kepori_body_feathers_list, "None") + features["kepori_head_feathers"] = sanitize_inlist(features["kepori_head_feathers"], GLOB.kepori_head_feathers_list, "None") + features["kepori_tail_feathers"] = sanitize_inlist(features["kepori_tail_feathers"], GLOB.kepori_tail_feathers_list, "None") features["vox_head_quills"] = sanitize_inlist(features["vox_head_quills"], GLOB.vox_head_quills_list, "None") features["vox_neck_quills"] = sanitize_inlist(features["vox_neck_quills"], GLOB.vox_neck_quills_list, "None") features["elzu_horns"] = sanitize_inlist(features["elzu_horns"], GLOB.elzu_horns_list) @@ -625,6 +627,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car WRITE_FILE(S["feature_ipc_brain"] , features["ipc_brain"]) WRITE_FILE(S["feature_kepori_feathers"] , features["kepori_feathers"]) WRITE_FILE(S["feature_kepori_body_feathers"], features["kepori_body_feathers"]) + WRITE_FILE(S["feature_kepori_head_feathers"], features["feature_kepori_head_feathers"]) WRITE_FILE(S["feature_kepori_tail_feathers"], features["kepori_tail_feathers"]) WRITE_FILE(S["feature_vox_head_quills"] , features["vox_head_quills"]) WRITE_FILE(S["feature_vox_neck_quills"] , features["vox_neck_quills"]) diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index b1e1cc1f2105..166f437dc3af 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -286,7 +286,7 @@ if("[layer]" in mob_species.offset_clothing) // This code taken from Baystation 12 - var/icon/final_I = icon('icons/blanks/32x32.dmi', "nothing") + var/icon/final_I = icon('icons/blanks/64x64.dmi', "nothing") var/list/shifts = mob_species.offset_clothing["[layer]"] // Apply all pixel shifts for each direction. @@ -294,9 +294,10 @@ var/list/facing_list = shifts[shift_facing] var/use_dir = text2num(shift_facing) var/icon/equip = icon(file2use, icon_state = state2use, dir = use_dir) - var/icon/canvas = icon('icons/blanks/32x32.dmi', "nothing") + var/icon/canvas = icon('icons/blanks/64x64.dmi', "nothing") canvas.Blend(equip, ICON_OVERLAY, facing_list["x"]+1, facing_list["y"]+1) final_I.Insert(canvas, dir = use_dir) + final_I = fcopy_rsc(final_I) GLOB.species_clothing_icons[mob_species.id]["[file2use]-[state2use]"] = final_I return TRUE diff --git a/code/modules/clothing/gloves/color.dm b/code/modules/clothing/gloves/color.dm index 06bd05a45795..cbac3e0e8901 100644 --- a/code/modules/clothing/gloves/color.dm +++ b/code/modules/clothing/gloves/color.dm @@ -220,7 +220,7 @@ icon_state = "nitrile" transfer_prints = FALSE carrytrait = TRAIT_QUICKER_CARRY - supports_variations = KEPORI_VARIATION + //supports_variations = KEPORI_VARIATION /obj/item/clothing/gloves/color/latex/nitrile/evil name = "red nitrile gloves" @@ -240,10 +240,8 @@ desc = "Overdesigned engineering gloves that have automated construction subrutines dialed in, allowing for faster construction while worn." icon = 'icons/obj/clothing/clockwork_garb.dmi' icon_state = "clockwork_gauntlets" - siemens_coefficient = 0 //WS Station eddit "Tinkers Gloves Insuls" - permeability_coefficient = 0.05 //WS Station eddit "Tinkers Gloves Insuls" - //siemens_coefficient = 0.8 WS Station eddit "Tinkers Gloves Insuls" - //permeability_coefficient = 0.3 WS Station eddit "Tinkers Gloves Insuls" + siemens_coefficient = 0 + permeability_coefficient = 0.05 carrytrait = TRAIT_QUICK_BUILD custom_materials = list(/datum/material/iron=2000, /datum/material/silver=1500, /datum/material/gold = 1000) @@ -276,7 +274,8 @@ /obj/item/clothing/gloves/color/light_brown = 1, /obj/item/clothing/gloves/color/brown = 1, /obj/item/clothing/gloves/color/white = 1, - /obj/item/clothing/gloves/color/rainbow = 1) + /obj/item/clothing/gloves/color/rainbow = 1, + ) /obj/item/clothing/gloves/maid name = "maid arm covers" diff --git a/code/modules/clothing/gloves/miscellaneous.dm b/code/modules/clothing/gloves/miscellaneous.dm index 314af8aaf44a..9d8db3c035d8 100644 --- a/code/modules/clothing/gloves/miscellaneous.dm +++ b/code/modules/clothing/gloves/miscellaneous.dm @@ -38,7 +38,7 @@ max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT resistance_flags = NONE armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 50) - supports_variations = KEPORI_VARIATION + //supports_variations = KEPORI_VARIATION /obj/item/clothing/gloves/combat/maid name = "combat maid sleeves" diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm index f96d23fa9ba2..da1ae18922f7 100644 --- a/code/modules/clothing/head/helmet.dm +++ b/code/modules/clothing/head/helmet.dm @@ -497,6 +497,7 @@ icon_state = "inteq_swat" item_state = "inteq_swat" flags_inv = HIDEHAIR + supports_variations = KEPORI_VARIATION /obj/item/clothing/head/helmet/inteq name = "inteq helmet" @@ -504,6 +505,7 @@ icon_state = "inteq_helmet" icon_state = "inteq_helmet" can_flashlight = TRUE + supports_variations = KEPORI_VARIATION /obj/item/clothing/head/solgov name = "\improper SolGov officer's cap" diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm index 953899ca40ce..275f77ea302f 100644 --- a/code/modules/clothing/suits/armor.dm +++ b/code/modules/clothing/suits/armor.dm @@ -32,7 +32,7 @@ desc = "A Type I armored vest that provides decent protection against most types of damage." icon_state = "armor_alt" item_state = "armoralt" - supports_variations = KEPORI_VARIATION + //supports_variations = KEPORI_VARIATION /obj/item/clothing/suit/armor/vest/marine name = "light tactical armor vest" @@ -339,7 +339,7 @@ desc = "A luxurious brown coat made from a crossweave of kevlar and ballistic fibre, the collar and wrist trims are made from genuine wolf fur. as protective as it is stylish." icon_state = "armor_inteq_battlecoat" item_state = "inteq_battlecoat" - supports_variations = DIGITIGRADE_VARIATION_NO_NEW_ICON | VOX_VARIATION | KEPORI_VARIATION + supports_variations = DIGITIGRADE_VARIATION_NO_NEW_ICON | VOX_VARIATION /obj/item/clothing/suit/armor/hos/inteq/honorable //Basically CC higherup clothing for inteq name = "honorable vanguard battlecoat" @@ -347,7 +347,7 @@ icon_state = "armor_inteq_honorable_battlecoat" item_state = "inteq_honorable_battlecoat" armor = list("melee" = 40, "bullet" = 50, "laser" = 50, "energy" = 40, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 70, "acid" = 90) - supports_variations = DIGITIGRADE_VARIATION_NO_NEW_ICON | KEPORI_VARIATION + supports_variations = DIGITIGRADE_VARIATION_NO_NEW_ICON /obj/item/clothing/suit/armor/inteq/corpsman name = "inteq corpsman vest" diff --git a/code/modules/clothing/suits/wintercoats.dm b/code/modules/clothing/suits/wintercoats.dm index 588a8f1600de..83c0b7a9e9a9 100644 --- a/code/modules/clothing/suits/wintercoats.dm +++ b/code/modules/clothing/suits/wintercoats.dm @@ -1,5 +1,7 @@ // WINTER COATS +//Someone please make the allowed lists globals or something + /obj/item/clothing/suit/hooded/wintercoat name = "winter coat" desc = "A heavy jacket made from 'synthetic' animal furs." @@ -10,14 +12,14 @@ body_parts_covered = CHEST|GROIN|ARMS cold_protection = CHEST|GROIN|ARMS min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT - armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 10, "rad" = 0, "fire" = 0, "acid" = 0) - allowed = list( /obj/item/flashlight, - /obj/item/tank/internals/emergency_oxygen, - /obj/item/tank/internals/plasmaman, - /obj/item/toy, - /obj/item/storage/fancy/cigarettes, - /obj/item/lighter, - ) + allowed = list( + /obj/item/flashlight, + /obj/item/tank/internals/emergency_oxygen, + /obj/item/tank/internals/plasmaman, + /obj/item/toy, + /obj/item/storage/fancy/cigarettes, + /obj/item/lighter, + ) /obj/item/clothing/head/hooded/winterhood name = "winter hood" @@ -29,13 +31,11 @@ cold_protection = HEAD min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT flags_inv = HIDEHAIR|HIDEEARS - armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 10, "rad" = 0, "fire" = 0, "acid" = 0) /obj/item/clothing/suit/hooded/wintercoat/captain name = "captain's winter coat" icon_state = "coatcaptain" item_state = "coatcaptain" - armor = list("melee" = 25, "bullet" = 30, "laser" = 30, "energy" = 40, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 50) hoodtype = /obj/item/clothing/head/hooded/winterhood/captain /obj/item/clothing/suit/hooded/wintercoat/captain/Initialize() @@ -44,13 +44,11 @@ /obj/item/clothing/head/hooded/winterhood/captain icon_state = "hood_captain" - armor = list("melee" = 25, "bullet" = 30, "laser" = 30, "energy" = 40, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 50) /obj/item/clothing/suit/hooded/wintercoat/security name = "security winter coat" icon_state = "coatsecurity" item_state = "coatsecurity" - armor = list("melee" = 25, "bullet" = 15, "laser" = 30, "energy" = 40, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 45) hoodtype = /obj/item/clothing/head/hooded/winterhood/security /obj/item/clothing/suit/hooded/wintercoat/security/Initialize() @@ -59,19 +57,37 @@ /obj/item/clothing/head/hooded/winterhood/security icon_state = "hood_security" - armor = list("melee" = 25, "bullet" = 15, "laser" = 30, "energy" = 40, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 45) /obj/item/clothing/suit/hooded/wintercoat/medical name = "medical winter coat" icon_state = "coatmedical" item_state = "coatmedical" - allowed = list(/obj/item/analyzer, /obj/item/sensor_device, /obj/item/stack/medical, /obj/item/dnainjector, /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/hypospray, /obj/item/healthanalyzer, /obj/item/flashlight/pen, /obj/item/reagent_containers/glass/bottle, /obj/item/reagent_containers/glass/beaker, /obj/item/reagent_containers/pill, /obj/item/storage/pill_bottle, /obj/item/paper, /obj/item/melee/classic_baton/telescopic, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman) - armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 50, "rad" = 0, "fire" = 0, "acid" = 45) hoodtype = /obj/item/clothing/head/hooded/winterhood/medical + allowed = list( + /obj/item/analyzer, + /obj/item/sensor_device, + /obj/item/stack/medical, + /obj/item/dnainjector, + /obj/item/reagent_containers/dropper, + /obj/item/reagent_containers/syringe, + /obj/item/reagent_containers/hypospray, + /obj/item/healthanalyzer, + /obj/item/flashlight/pen, + /obj/item/reagent_containers/glass/bottle, + /obj/item/reagent_containers/glass/beaker, + /obj/item/reagent_containers/pill, + /obj/item/storage/pill_bottle, + /obj/item/paper, + /obj/item/melee/classic_baton/telescopic, + /obj/item/toy, + /obj/item/storage/fancy/cigarettes, + /obj/item/lighter, + /obj/item/tank/internals/emergency_oxygen, + /obj/item/tank/internals/plasmaman, + ) /obj/item/clothing/head/hooded/winterhood/medical icon_state = "hood_medical" - armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 50, "rad" = 0, "fire" = 0, "acid" = 45) /obj/item/clothing/suit/hooded/wintercoat/medical/paramedic name = "paramedic winter coat" @@ -86,25 +102,52 @@ name = "science winter coat" icon_state = "coatscience" item_state = "coatscience" - allowed = list(/obj/item/analyzer, /obj/item/stack/medical, /obj/item/dnainjector, /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/hypospray, /obj/item/healthanalyzer, /obj/item/flashlight/pen, /obj/item/reagent_containers/glass/bottle, /obj/item/reagent_containers/glass/beaker, /obj/item/reagent_containers/pill, /obj/item/storage/pill_bottle, /obj/item/paper, /obj/item/melee/classic_baton/telescopic, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman) - armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 10, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) hoodtype = /obj/item/clothing/head/hooded/winterhood/science + allowed = list( + /obj/item/analyzer, + /obj/item/stack/medical, + /obj/item/dnainjector, + /obj/item/reagent_containers/dropper, + /obj/item/reagent_containers/syringe, + /obj/item/reagent_containers/hypospray, + /obj/item/healthanalyzer, + /obj/item/flashlight/pen, + /obj/item/reagent_containers/glass/bottle, + /obj/item/reagent_containers/glass/beaker, + /obj/item/reagent_containers/pill + /obj/item/storage/pill_bottle, + /obj/item/paper, + /obj/item/melee/classic_baton/telescopic, + /obj/item/toy, + /obj/item/storage/fancy/cigarettes, + /obj/item/lighter, + /obj/item/tank/internals/emergency_oxygen, + /obj/item/tank/internals/plasmaman, + ) /obj/item/clothing/head/hooded/winterhood/science icon_state = "hood_science" - armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 10, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) /obj/item/clothing/suit/hooded/wintercoat/engineering name = "engineering winter coat" icon_state = "coatengineer" item_state = "coatengineer" - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 20, "fire" = 30, "acid" = 45) - allowed = list(/obj/item/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/t_scanner, /obj/item/construction/rcd, /obj/item/pipe_dispenser, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter) hoodtype = /obj/item/clothing/head/hooded/winterhood/engineering + allowed = list( + /obj/item/flashlight, + /obj/item/tank/internals/emergency_oxygen, + /obj/item/tank/internals/plasmaman, + /obj/item/t_scanner, + /obj/item/construction/rcd, + /obj/item/pipe_dispenser, + /obj/item/toy, + /obj/item/storage/fancy/cigarettes, + /obj/item/lighter, + ) + /obj/item/clothing/head/hooded/winterhood/engineering icon_state = "hood_engineer" - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 20, "fire" = 30, "acid" = 45) /obj/item/clothing/suit/hooded/wintercoat/engineering/atmos name = "atmospherics winter coat" @@ -119,8 +162,22 @@ name = "hydroponics winter coat" icon_state = "coathydro" item_state = "coathydro" - allowed = list(/obj/item/reagent_containers/spray/plantbgone, /obj/item/plant_analyzer, /obj/item/seeds, /obj/item/reagent_containers/glass/bottle, /obj/item/cultivator, /obj/item/reagent_containers/spray/pestspray, /obj/item/hatchet, /obj/item/storage/bag/plants, /obj/item/toy, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/storage/fancy/cigarettes, /obj/item/lighter) hoodtype = /obj/item/clothing/head/hooded/winterhood/hydro + allowed = list( + /obj/item/reagent_containers/spray/plantbgone, + /obj/item/plant_analyzer, + /obj/item/seeds, + /obj/item/reagent_containers/glass/bottle, + /obj/item/cultivator, + /obj/item/reagent_containers/spray/pestspray, + /obj/item/hatchet, + /obj/item/storage/bag/plants, + /obj/item/toy, + /obj/item/tank/internals/emergency_oxygen, + /obj/item/tank/internals/plasmaman, + /obj/item/storage/fancy/cigarettes, + /obj/item/lighter, + ) /obj/item/clothing/head/hooded/winterhood/hydro icon_state = "hood_hydro" @@ -138,13 +195,18 @@ name = "mining winter coat" icon_state = "coatminer" item_state = "coatminer" - allowed = list(/obj/item/pickaxe, /obj/item/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter) - armor = list("melee" = 10, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) hoodtype = /obj/item/clothing/head/hooded/winterhood/miner + allowed = list( + /obj/item/pickaxe, + /obj/item/flashlight, + /obj/item/tank/internals/emergency_oxygen, + /obj/item/toy, + /obj/item/storage/fancy/cigarettes, + /obj/item/lighter, + ) /obj/item/clothing/head/hooded/winterhood/miner icon_state = "hood_miner" - armor = list("melee" = 10, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) // Inteq @@ -154,18 +216,17 @@ icon_state = "coatinteq" item_state = "coatinteq" hoodtype = /obj/item/clothing/head/hooded/winterhood/security/inteq - supports_variations = KEPORI_VARIATION + //supports_variations = KEPORI_VARIATION /obj/item/clothing/head/hooded/winterhood/security/inteq icon_state = "hood_inteq" - supports_variations = KEPORI_VARIATION + //supports_variations = KEPORI_VARIATION /obj/item/clothing/suit/hooded/wintercoat/security/inteq/alt name = "inteq hooded coat" desc = "A hooded coat with a fur trim around the hood, comfy! It has a small 'IRMG' embroidered onto the shoulder." icon_state = "coatinteq_alt" item_state = "coatinteq_alt" - armor = list("melee" = 25, "bullet" = 15, "laser" = 30, "energy" = 40, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 45) hoodtype = /obj/item/clothing/head/hooded/winterhood/security/inteq/alt /obj/item/clothing/head/hooded/winterhood/security/inteq/alt @@ -173,15 +234,14 @@ desc = "A comfortable looking brown hood." icon_state = "hood_inteq_alt" item_state = "hood_inteq_alt" - armor = list("melee" = 25, "bullet" = 15, "laser" = 30, "energy" = 40, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 45) // CentCom + /obj/item/clothing/suit/hooded/wintercoat/centcom name = "centcom winter coat" desc = "A luxurious winter coat woven in the bright green and gold colours of Central Command. It has a small pin in the shape of the Nanotrasen logo for a zipper." icon_state = "coatcentcom" item_state = "coatcentcom" - armor = list("melee" = 35, "bullet" = 40, "laser" = 40, "energy" = 50, "bomb" = 35, "bio" = 10, "rad" = 10, "fire" = 10, "acid" = 60) hoodtype = /obj/item/clothing/head/hooded/winterhood/centcom /obj/item/clothing/suit/hooded/wintercoat/centcom/Initialize(mapload) @@ -190,7 +250,6 @@ /obj/item/clothing/head/hooded/winterhood/centcom icon_state = "hood_centcom" - armor = list("melee" = 35, "bullet" = 40, "laser" = 40, "energy" = 50, "bomb" = 35, "bio" = 10, "rad" = 10, "fire" = 10, "acid" = 60) // SolGov @@ -199,9 +258,7 @@ desc = "An environment-resistant wintercoat in the colors of the Solarian Confederation." icon_state = "coatsolgov" item_state = "coatsolgov" - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 20, "fire" = 30, "acid" = 45) hoodtype = /obj/item/clothing/head/hooded/winterhood/solgov /obj/item/clothing/head/hooded/winterhood/solgov icon_state = "hood_solgov" - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 20, "fire" = 30, "acid" = 45) diff --git a/code/modules/clothing/under/jobs/cargo.dm b/code/modules/clothing/under/jobs/cargo.dm index c5426e63883e..2b7902994e6f 100644 --- a/code/modules/clothing/under/jobs/cargo.dm +++ b/code/modules/clothing/under/jobs/cargo.dm @@ -1,7 +1,7 @@ /obj/item/clothing/under/rank/cargo icon = 'icons/obj/clothing/under/cargo.dmi' mob_overlay_icon = 'icons/mob/clothing/under/cargo.dmi' - supports_variations = KEPORI_VARIATION + //supports_variations = KEPORI_VARIATION /obj/item/clothing/under/rank/cargo/qm name = "quartermaster's jumpsuit" @@ -16,7 +16,7 @@ item_state = "lb_suit" body_parts_covered = CHEST|GROIN|ARMS can_adjust = FALSE - supports_variations = DIGITIGRADE_VARIATION_NO_NEW_ICON | VOX_VARIATION | KEPORI_VARIATION + supports_variations = DIGITIGRADE_VARIATION_NO_NEW_ICON | VOX_VARIATION /obj/item/clothing/under/rank/cargo/tech name = "cargo technician's jumpsuit" @@ -24,7 +24,7 @@ icon_state = "cargotech" item_state = "lb_suit" body_parts_covered = CHEST|GROIN|ARMS - supports_variations = DIGITIGRADE_VARIATION | VOX_VARIATION | KEPORI_VARIATION + supports_variations = DIGITIGRADE_VARIATION | VOX_VARIATION alt_covers_chest = TRUE /obj/item/clothing/under/rank/cargo/tech/skirt @@ -33,7 +33,7 @@ icon_state = "cargo_skirt" item_state = "lb_suit" body_parts_covered = CHEST|GROIN|ARMS - supports_variations = DIGITIGRADE_VARIATION_NO_NEW_ICON | VOX_VARIATION | KEPORI_VARIATION + supports_variations = DIGITIGRADE_VARIATION_NO_NEW_ICON | VOX_VARIATION can_adjust = FALSE /obj/item/clothing/under/rank/cargo/miner @@ -43,7 +43,7 @@ item_state = "miner" armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 0) resistance_flags = NONE - supports_variations = KEPORI_VARIATION + //supports_variations = KEPORI_VARIATION /obj/item/clothing/under/rank/cargo/miner/lavaland desc = "A light uniform for operating in hazardous environments, manufactured en-masse by EXOCON for the profitable frontier prospector market. Adventurous khaki jeans included." @@ -51,14 +51,14 @@ icon_state = "explorer" item_state = "explorer" can_adjust = TRUE - supports_variations = DIGITIGRADE_VARIATION | VOX_VARIATION | KEPORI_VARIATION + supports_variations = DIGITIGRADE_VARIATION | VOX_VARIATION /obj/item/clothing/under/rank/cargo/miner/hazard desc = "A thick jumpsuit with reflective stripes for hazardous, low-visibility environments. It's coated in a thick layer of asteroid dust." name = "asteroid miner's jumpsuit" icon_state = "hazard" item_state = "hazard" - supports_variations = DIGITIGRADE_VARIATION | KEPORI_VARIATION + supports_variations = DIGITIGRADE_VARIATION /obj/item/clothing/under/rank/cargo/miner/lavaland/old icon_state = "explorerold" diff --git a/code/modules/clothing/under/jobs/medical.dm b/code/modules/clothing/under/jobs/medical.dm index 7a95273c22f2..e14c11b2eb05 100644 --- a/code/modules/clothing/under/jobs/medical.dm +++ b/code/modules/clothing/under/jobs/medical.dm @@ -174,7 +174,7 @@ desc = "A light white gown that allows easy access to any patient who wears this." icon_state = "gownwhite" item_state = "gownwhite" - supports_variations = DIGITIGRADE_VARIATION_NO_NEW_ICON | VOX_VARIATION | KEPORI_VARIATION + supports_variations = DIGITIGRADE_VARIATION_NO_NEW_ICON | VOX_VARIATION can_adjust = FALSE /obj/item/clothing/under/rank/medical/gown/green diff --git a/code/modules/clothing/under/skirt_dress.dm b/code/modules/clothing/under/skirt_dress.dm index 1dabceb6db24..f74748f71fbb 100644 --- a/code/modules/clothing/under/skirt_dress.dm +++ b/code/modules/clothing/under/skirt_dress.dm @@ -93,4 +93,4 @@ desc = "A pretty red dress with big pink ribbons attached. Intended to be worn by Kepori cosplayers, but also fits other species." icon_state = "rilena_dress" item_state = "rilena_dress" - supports_variations = KEPORI_VARIATION + //supports_variations = KEPORI_VARIATION diff --git a/code/modules/clothing/under/syndicate.dm b/code/modules/clothing/under/syndicate.dm index 36cc7c96220e..3d4c81103ef7 100644 --- a/code/modules/clothing/under/syndicate.dm +++ b/code/modules/clothing/under/syndicate.dm @@ -7,7 +7,7 @@ alt_covers_chest = TRUE icon = 'icons/obj/clothing/under/syndicate.dmi' mob_overlay_icon = 'icons/mob/clothing/under/syndicate.dmi' - supports_variations = DIGITIGRADE_VARIATION | VOX_VARIATION | KEPORI_VARIATION + supports_variations = DIGITIGRADE_VARIATION | VOX_VARIATION /obj/item/clothing/under/syndicate/skirt name = "tactical skirtleneck" @@ -17,7 +17,7 @@ armor = list("melee" = 10, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 40) alt_covers_chest = TRUE can_adjust = FALSE - supports_variations = DIGITIGRADE_VARIATION_NO_NEW_ICON | VOX_VARIATION | KEPORI_VARIATION + supports_variations = DIGITIGRADE_VARIATION_NO_NEW_ICON | VOX_VARIATION /obj/item/clothing/under/syndicate/bloodred name = "blood-red sneaksuit" @@ -27,7 +27,7 @@ armor = list("melee" = 10, "bullet" = 10, "laser" = 10,"energy" = 10, "bomb" = 0, "bio" = 0, "rad" = 10, "fire" = 50, "acid" = 40) resistance_flags = FIRE_PROOF | ACID_PROOF can_adjust = FALSE - supports_variations = DIGITIGRADE_VARIATION | KEPORI_VARIATION + supports_variations = DIGITIGRADE_VARIATION /obj/item/clothing/under/syndicate/bloodred/sleepytime name = "blood-red pajamas" @@ -35,7 +35,7 @@ icon_state = "bloodred_pajamas" item_state = "bl_suit" armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 40) - supports_variations = DIGITIGRADE_VARIATION | KEPORI_VARIATION + supports_variations = DIGITIGRADE_VARIATION /obj/item/clothing/under/syndicate/tacticool name = "tacticool turtleneck" @@ -43,7 +43,7 @@ icon_state = "tactifool" item_state = "bl_suit" armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 40) - supports_variations = DIGITIGRADE_VARIATION | VOX_VARIATION | KEPORI_VARIATION + supports_variations = DIGITIGRADE_VARIATION | VOX_VARIATION /obj/item/clothing/under/syndicate/tacticool/skirt name = "tacticool skirtleneck" @@ -52,7 +52,7 @@ item_state = "bl_suit" armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 40) can_adjust = FALSE - supports_variations = DIGITIGRADE_VARIATION_NO_NEW_ICON | KEPORI_VARIATION + supports_variations = DIGITIGRADE_VARIATION_NO_NEW_ICON /obj/item/clothing/under/syndicate/sniper name = "Tactical turtleneck suit" @@ -75,7 +75,7 @@ desc = "With a suit lined with this many pockets, you are ready to operate." icon_state = "syndicate_combat" can_adjust = FALSE - supports_variations = DIGITIGRADE_VARIATION | KEPORI_VARIATION + supports_variations = DIGITIGRADE_VARIATION /obj/item/clothing/under/syndicate/rus_army name = "advanced military tracksuit" @@ -116,7 +116,7 @@ can_adjust = FALSE armor = list("melee" = 10, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 40) alt_covers_chest = TRUE - supports_variations = DIGITIGRADE_VARIATION | KEPORI_VARIATION + supports_variations = DIGITIGRADE_VARIATION /obj/item/clothing/under/syndicate/cybersun name = "cybersun jumpsuit" @@ -131,7 +131,7 @@ icon_state = "cybersun" armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 60, "acid" = 100) alt_covers_chest = TRUE - supports_variations = DIGITIGRADE_VARIATION | KEPORI_VARIATION + supports_variations = DIGITIGRADE_VARIATION /obj/item/clothing/under/syndicate/cybersun/officer name = "cybersun officer's suit" @@ -146,7 +146,7 @@ icon_state = "cybersun_med" permeability_coefficient = 0.5 armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 10, "rad" = 0, "fire" = 0, "acid" = 0) - supports_variations = DIGITIGRADE_VARIATION_NO_NEW_ICON | VOX_VARIATION | KEPORI_VARIATION + supports_variations = DIGITIGRADE_VARIATION_NO_NEW_ICON | VOX_VARIATION /obj/item/clothing/under/syndicate/medic/skirt name = "Cybersun medical jumpskirt" @@ -154,7 +154,7 @@ icon_state = "cybersun_med_skirt" body_parts_covered = CHEST|GROIN|ARMS can_adjust = FALSE - supports_variations = DIGITIGRADE_VARIATION_NO_NEW_ICON | VOX_VARIATION | KEPORI_VARIATION + supports_variations = DIGITIGRADE_VARIATION_NO_NEW_ICON | VOX_VARIATION /obj/item/clothing/under/syndicate/donk name = "Donk! Co. employee uniform" @@ -164,14 +164,14 @@ armor = list("melee" = 10, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 40) body_parts_covered = CHEST|GROIN|ARMS alt_covers_chest = TRUE - supports_variations = DIGITIGRADE_VARIATION | KEPORI_VARIATION + supports_variations = DIGITIGRADE_VARIATION /obj/item/clothing/under/syndicate/donk/qm name = "Donk! Co. manager uniform" desc = "The standard uniform of Donk Co. managers. Direct all complaints here." icon_state = "donk_qm" body_parts_covered = CHEST|GROIN|LEGS|ARMS - supports_variations = DIGITIGRADE_VARIATION | KEPORI_VARIATION + supports_variations = DIGITIGRADE_VARIATION /obj/item/clothing/suit/hazardvest/donk name = "Donk! Co. employee vest" diff --git a/code/modules/mob/dead/new_player/sprite_accessories/kepori.dm b/code/modules/mob/dead/new_player/sprite_accessories/kepori.dm index 4ed949c63ef8..9fd4579e46f8 100644 --- a/code/modules/mob/dead/new_player/sprite_accessories/kepori.dm +++ b/code/modules/mob/dead/new_player/sprite_accessories/kepori.dm @@ -1,10 +1,9 @@ -//Kepori mutant parts - -//Start head feathers +// "Hair" feathers /datum/sprite_accessory/kepori_feathers color_src = HAIR - icon = 'icons/mob/kepori_parts.dmi' + body_zone = BODY_ZONE_HEAD + icon = 'icons/mob/species/kepori/kepori_parts.dmi' /datum/sprite_accessory/kepori_feathers/none name = "None" @@ -37,10 +36,6 @@ name = "Spikey" icon_state = "spikey" -/datum/sprite_accessory/kepori_feathers/soap - name = "Soap" - icon_state = "soap" - /datum/sprite_accessory/kepori_feathers/crowned name = "Crowned" icon_state = "crowned" @@ -57,40 +52,60 @@ name = "Bun" icon_state = "bun" -//Start body feathers +// Head/Face feathers + +/datum/sprite_accessory/kepori_head_feathers + color_src = MUTCOLORS_SECONDARY + body_zone = BODY_ZONE_HEAD + icon = 'icons/mob/species/kepori/kepori_parts.dmi' + +/datum/sprite_accessory/kepori_head_feathers/none + name = "None" + +/datum/sprite_accessory/kepori_head_feathers/full + name = "Full" + icon_state = "full" + +/datum/sprite_accessory/kepori_head_feathers/half + name = "Half" + icon_state = "half" + +// Body feathers /datum/sprite_accessory/kepori_body_feathers color_src = MUTCOLORS_SECONDARY - icon = 'icons/mob/kepori_parts.dmi' + body_zone = BODY_ZONE_CHEST + icon = 'icons/mob/species/kepori/kepori_parts.dmi' /datum/sprite_accessory/kepori_body_feathers/none name = "None" -/datum/sprite_accessory/kepori_body_feathers/aftik - name = "Aftik" - icon_state = "aftik" - /datum/sprite_accessory/kepori_body_feathers/belly name = "Belly" icon_state = "belly" -/datum/sprite_accessory/kepori_body_feathers/shirt - name = "Shirt" - icon_state = "shirt" +/datum/sprite_accessory/kepori_body_feathers/belly_wings + name = "Belly + Wings" + icon_state = "bwings" /datum/sprite_accessory/kepori_body_feathers/soap name = "Soap" icon_state = "soap" +/datum/sprite_accessory/kepori_body_feathers/soap_wings + name = "Soap + Wings" + icon_state = "swings" + /datum/sprite_accessory/kepori_body_feathers/wings name = "Wings" icon_state = "wings" -//Start tail feathers +// Tail feathers /datum/sprite_accessory/kepori_tail_feathers color_src = MUTCOLORS_SECONDARY - icon = 'icons/mob/kepori_parts.dmi' + body_zone = BODY_ZONE_CHEST + icon = 'icons/mob/species/kepori/kepori_parts.dmi' /datum/sprite_accessory/kepori_tail_feathers/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 e63adffeee48..86e6e08c4367 100644 --- a/code/modules/mob/living/carbon/human/consistent_human.dm +++ b/code/modules/mob/living/carbon/human/consistent_human.dm @@ -31,6 +31,7 @@ dna.features["spider_spinneret"] = GLOB.spider_spinneret_list[hex2num(copytext(seed, 11, 12)) % length(GLOB.spider_spinneret_list) + 1] dna.features["kepori_feathers"] = GLOB.kepori_feathers_list[hex2num(copytext(seed, 12, 13)) % length(GLOB.kepori_feathers_list) + 1] dna.features["kepori_body_feathers"] = GLOB.kepori_body_feathers_list[hex2num(copytext(seed, 13, 14)) % length(GLOB.kepori_body_feathers_list) + 1] + dna.features["kepori_head_feathers"] = GLOB.kepori_head_feathers_list[hex2num(copytext(seed, 13, 14)) % length(GLOB.kepori_head_feathers_list) + 1] dna.features["vox_head_quills"] = GLOB.vox_head_quills_list[hex2num(copytext(seed, 14, 15)) % length(GLOB.vox_head_quills_list) + 1] dna.features["vox_neck_quills"] = GLOB.vox_neck_quills_list[hex2num(copytext(seed, 15, 16)) % length(GLOB.vox_neck_quills_list) + 1] dna.features["elzu_horns"] = GLOB.elzu_horns_list[hex2num(copytext(seed, 16, 17)) % length(GLOB.elzu_horns_list) + 1] diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index c2d1f051bfb6..35812aafeca3 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -950,6 +950,8 @@ GLOBAL_LIST_EMPTY(roundstart_races) S = GLOB.spider_spinneret_list[H.dna.features["spider_spinneret"]] if("kepori_body_feathers") S = GLOB.kepori_body_feathers_list[H.dna.features["kepori_body_feathers"]] + if("kepori_head_feathers") + S = GLOB.kepori_head_feathers_list[H.dna.features["kepori_head_feathers"]] if("kepori_tail_feathers") S = GLOB.kepori_tail_feathers_list[H.dna.features["kepori_tail_feathers"]] if("kepori_feathers") diff --git a/code/modules/mob/living/carbon/human/species_types/kepori.dm b/code/modules/mob/living/carbon/human/species_types/kepori.dm index 4d7a8013a1cb..029eaa1e627f 100644 --- a/code/modules/mob/living/carbon/human/species_types/kepori.dm +++ b/code/modules/mob/living/carbon/human/species_types/kepori.dm @@ -4,8 +4,8 @@ default_color = "6060FF" species_traits = list(SCLERA, MUTCOLORS, EYECOLOR, MUTCOLORS_SECONDARY) inherent_traits = list(TRAIT_SCOOPABLE) - mutant_bodyparts = list("kepori_body_feathers", "kepori_tail_feathers", "kepori_feathers") - default_features = list("mcolor" = "0F0", "wings" = "None", "kepori_feathers" = "Plain", "kepori_body_feathers" = "Plain", "kepori_tail_feathers" = "Fan", "body_size" = "Normal") + mutant_bodyparts = list("kepori_body_feathers", "kepori_head_feathers" "kepori_tail_feathers", "kepori_feathers") + default_features = list("mcolor" = "0F0", "wings" = "None", "kepori_feathers" = "None", "kepori_head_feathers" = "None", "kepori_body_feathers" = "None", "kepori_tail_feathers" = "None", "body_size" = "Normal") meat = /obj/item/reagent_containers/food/snacks/meat/slab/chicken disliked_food = FRIED | GROSS | CLOTH liked_food = MEAT | GORE @@ -63,11 +63,38 @@ // Why not just use HEAD_LAYER? Well, because HEAD_LAYER is a number, and if you try to use numbers as indexes, // BYOND will try to make it an ordered list. So, we have to use a string. This is annoying, but it's the only way to do it smoothly. offset_clothing = list( - "[HEAD_LAYER]" = list("[NORTH]" = list("x" = 0, "y" = -4), "[EAST]" = list("x" = 4, "y" = -4), "[SOUTH]" = list("x" = 0, "y" = -4), "[WEST]" = list("x" = -4, "y" = -4)), - "[GLASSES_LAYER]" = list("[NORTH]" = list("x" = 0, "y" = -4), "[EAST]" = list("x" = 4, "y" = -4), "[SOUTH]" = list("x" = 0, "y" = -4), "[WEST]" = list("x" = -4, "y" = -4)), - "[FACEMASK_LAYER]" = list("[NORTH]" = list("x" = 0, "y" = -5), "[EAST]" = list("x" = 4, "y" = -5), "[SOUTH]" = list("x" = 0, "y" = -5), "[WEST]" = list("x" = -4, "y" = -5)), + "[HEAD_LAYER]" = list( + "[NORTH]" = list("x" = 8, "y" = -3), + "[EAST]" = list("x" = 19, "y" = -3), //ISSUE: The head sprites seem to be cut off when given an offset this large, combined with kepori offset + "[SOUTH]" = list("x" = 8, "y" = -3), + "[WEST]" = list("x" = -3, "y" = -3) + ), + "[GLASSES_LAYER]" = list( + "[NORTH]" = list("x" = 0, "y" = -4), + "[EAST]" = list("x" = 4, "y" = -4), + "[SOUTH]" = list("x" = 0, "y" = -4), + "[WEST]" = list("x" = -4, "y" = -4) + ), + "[FACEMASK_LAYER]" = list( + "[NORTH]" = list("x" = 0, "y" = -5), + "[EAST]" = list("x" = 4, "y" = -5), + "[SOUTH]" = list("x" = 0, "y" = -5), + "[WEST]" = list("x" = -4, "y" = -5) + ), ) +// First list is left hand, second list is right hand. This is used for inhand offsets. +/datum/species/kepori/get_item_offsets_for_dir(dir, hand) + //LEFT/RIGHT + if(dir & NORTH) + return list(list("x" = 9, "y" = -1), list("x" = 7, "y" = -1)) + if(dir & SOUTH) + return list(list("x" = 7, "y" = -1), list("x" = 9, "y" = -1)) + if(dir & EAST) + return list(list("x" = 18, "y" = -2), list("x" = 21, "y" = -2)) //("x" = 18, "y" = 2), list("x" = 21, "y" = -1)) + if(dir & WEST) + return list(list("x" = -4, "y" = -2), list("x" = -1, "y" = -2)) //("x" = -5, "y" = -1), list("x" = -1, "y" = 2)) + /datum/species/kepori/random_name(gender,unique,lastname) if(unique) return random_unique_kepori_name() diff --git a/icons/blanks/64x64.dmi b/icons/blanks/64x64.dmi new file mode 100644 index 0000000000000000000000000000000000000000..6c4f2b33e0fee9d3f99ff3febc0760cfd078aed2 GIT binary patch literal 216 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 VrA^d&;H5CgK-WkIf89Fde*nex*-iie diff --git a/icons/mob/species/kepori/kepori_parts.dmi b/icons/mob/species/kepori/kepori_parts.dmi new file mode 100644 index 0000000000000000000000000000000000000000..76d1819c9dd8540096f3dcbab77e6c842f1f8ffd GIT binary patch literal 2824 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 literal 0 HcmV?d00001 diff --git a/icons/mob/species/kepori/onmob_belt_kepori.dmi b/icons/mob/species/kepori/onmob_belt_kepori.dmi index cf74d73796c8c6121c0818fdac74e4a7f0ab9a5f..4a5a4ba7b32a424e1d1997c33d98c6cbc5e66041 100644 GIT binary patch delta 114 zcmdnSxPwu#Gr-TCmrII^fq{Y7)59eQNE-mL0wXh!%#+HDpQtF$=snTV#JNyshlO#F z@nvJL2AO1Ky;Rn4d+`ly44=CBOQxikuK_CO@pN$v;h346AaM`Kd%(cRBzM^z$YStx L^>bP0l+XkKya*fK delta 112 zcmdnNxQ$Vwqi)e_1!5cyiE*d|0 zq;uX!^CUx2Pwx&3;~?Y9#$F0CsjT7l;v3i)KHlcf^{%~V4K$R;)5S4_V`g%K#2p}S W0R!VxY5#RV7K5j&pUXO@geCygCOLEf literal 0 HcmV?d00001 diff --git a/icons/mob/species/kepori/onmob_eyes_kepori.dmi b/icons/mob/species/kepori/onmob_eyes_kepori.dmi index 2cfe52f4630de6ad4dd084c72e5d10bdffcb53cd..1b6c6f68a3a5f4c0be859a740de64ce91db89638 100644 GIT binary patch delta 299 zcmdnN^o}XGGr-TCmrII^fq{Y7)59eQNGAYs0}C^dWcyUu38X{=d_r6g95|q%uIK9H zB_SbyCSCsj{xmKwzR(SKOMwa)OM?7@862M7NCR@pCkB}C7wYV=Fb*=lZ0yw_ldQaM z;zZf{dELfqH4M!~kC?fvIJVRw^5E6;tU2}!N6x6pS*(<<0_tq>ba4!cXnlLdk?XL6 zKx?A(!rytD@@yO(J~FA9U#RVR@VEa$&LlO1ggdOi>Q@)eXx}Wgw7{6(cnfPx*WxSx zXCzK!4&<8>uFw7@<8~MmL(I~%)!Np|anCpJiTk_OW?t}zt(EVeZILgWopfTV!^z+u td+$8)e%rm=_RZS2L9^L`4q#yT|B!p1C+}X*h5w#_xSpM56C74hRQml(aKXo~ zPqe&swa%S6AG{&d;G*$^M>^+yG*2=V_4MwrFb*=lZ0w~l=h37ilR^}NHI3J+Y&Ed6 zwYRlZ-x|@`ZLGR^g~XDX-NtJ*49!K4m^}#!EBIQ>D9z8{IbF6aas8!@K-bP0l+XkK DYD;Rd literal 0 HcmV?d00001 diff --git a/icons/mob/species/kepori/onmob_feet_kepori.dmi b/icons/mob/species/kepori/onmob_feet_kepori.dmi index f352a422378a9b734c6da6d5770b9a2a6a7308e8..93bb6ee443d5487e7bb19387a2012dc1b1e8bbd6 100644 GIT binary patch literal 5438 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 literal 1676 zcmY+Ddpy&77{`BfIh826ttl&%l1p-*T_T;SqmeLK?w3MtnZv}^v2@`$DiP6!TGA}3 zq@gBqPSLC+yfBy0vSdy_)5b1m9jDGY&mZ6CdA@&qKkw)AJ@1LdsIP*q0sugLpPQ=} z0H`QK6=1~@rHiTd^H#bFPj~OV&CSj0A<)g643UW4mKIhz+S;ymW|2SbGTvm6;D<^L z-BWo!6ys=SYyj)`j2%QrYkGQ`LAyLL+7;-6{3Y?& zVW{ajV{^!Q19Nk0y5;r`&TB_UG)!B4r-4q0k=9MPF2-#0YrOsrlYD!>XCCKV<1gQtBXzT6Zer-ANM65%TDnAk$zS04(L~b9MGkE&VhYfHQQ|&Kf<{ zem3*xa=&1;6^5qSAJ!=pK_&U(+NPPQUv1x9zn@ME?BQU2I``3Qyr8PePAu9C*d1M? zXF^UX;NB|g`S?9N!%Q>p7T^oOzOwyeM&0X<#}9z@^)duU$lp9Qb;|}7dK7a*}+&C;bDWR)kMYkaOCLz?;MDPs7*hV+y21PmaPP@?w+TH&j5p9crmS za4y@mY5A8|y(@YseZV6aQf7{0_9Z-GX4TZg4r*^l#cjdLmNOU}Y zXbxQ45K!X_{_-DCb{x@Gy$Deul$6*%v=)EBWiZK^gUlj@Bn z4p%U`!iJLIl=`aqczi}rX5)b*Vt6e(Yi_RpHhF-}Tx7gH8mF1l{h0Rv**LwGGr^_6 zH>TwH84H(vrzT~~WR!%vY$5-LLYSDif~_&7nc2p^?fd16HnL!D6%iaAJ?H>O%z{rQ zGSF*^XD2ip5U-sr^2(=oT90hA{eUa#*yDhLqXY|y!|%e-7ED&)!FiTX(5w_OhtoJi zLTtDktupURt9$hY{(RzMn_L%;m}1D!wsw!a`WW2z@!IM9Ko0^0n?0H^l0_N4>!4{5 zgTdGVjPV-E;E{;;UpD!s>=Fl9d0?rSj8b(HL;m&0FIsxbq#OPE8#GdpTG92wZ>Y3g zYvcH5NF@C75-(x}<%q!^UPxqfv8_EE2_`Y*gmHc?`+k)J+p_X#v`S>pU^qf~O+x$$ z_6@sp(TCJL3#*=Xopf=8>Xbur$MsfKMmUOEq7GBDg<9>qY(H?(#eLHJ^QGi!K8&%( zHSNvp%J%Ms zjT6Mx$!CjIuJjB_rCnU+JjkN`A-51oq;&sNJ7VGz6DRn-vbGj(7#Wu)-%$rd6hmjZ zd_HKX4YCk4bT1#|e_lA%U4~YKhJcp3C**2Mp%fHN@qY$1oTkt_V(HV+RA^5YNzxY~ zZaKYNEf#mF5kpD1BKQiE6U9dQRLE& z2+iyXFA^+)$!B+73w^#u6JC5GyekbTr?B_ diff --git a/icons/mob/species/kepori/onmob_feet_keporiOLD.dmi b/icons/mob/species/kepori/onmob_feet_keporiOLD.dmi new file mode 100644 index 0000000000000000000000000000000000000000..f352a422378a9b734c6da6d5770b9a2a6a7308e8 GIT binary patch literal 1676 zcmY+Ddpy&77{`BfIh826ttl&%l1p-*T_T;SqmeLK?w3MtnZv}^v2@`$DiP6!TGA}3 zq@gBqPSLC+yfBy0vSdy_)5b1m9jDGY&mZ6CdA@&qKkw)AJ@1LdsIP*q0sugLpPQ=} z0H`QK6=1~@rHiTd^H#bFPj~OV&CSj0A<)g643UW4mKIhz+S;ymW|2SbGTvm6;D<^L z-BWo!6ys=SYyj)`j2%QrYkGQ`LAyLL+7;-6{3Y?& zVW{ajV{^!Q19Nk0y5;r`&TB_UG)!B4r-4q0k=9MPF2-#0YrOsrlYD!>XCCKV<1gQtBXzT6Zer-ANM65%TDnAk$zS04(L~b9MGkE&VhYfHQQ|&Kf<{ zem3*xa=&1;6^5qSAJ!=pK_&U(+NPPQUv1x9zn@ME?BQU2I``3Qyr8PePAu9C*d1M? zXF^UX;NB|g`S?9N!%Q>p7T^oOzOwyeM&0X<#}9z@^)duU$lp9Qb;|}7dK7a*}+&C;bDWR)kMYkaOCLz?;MDPs7*hV+y21PmaPP@?w+TH&j5p9crmS za4y@mY5A8|y(@YseZV6aQf7{0_9Z-GX4TZg4r*^l#cjdLmNOU}Y zXbxQ45K!X_{_-DCb{x@Gy$Deul$6*%v=)EBWiZK^gUlj@Bn z4p%U`!iJLIl=`aqczi}rX5)b*Vt6e(Yi_RpHhF-}Tx7gH8mF1l{h0Rv**LwGGr^_6 zH>TwH84H(vrzT~~WR!%vY$5-LLYSDif~_&7nc2p^?fd16HnL!D6%iaAJ?H>O%z{rQ zGSF*^XD2ip5U-sr^2(=oT90hA{eUa#*yDhLqXY|y!|%e-7ED&)!FiTX(5w_OhtoJi zLTtDktupURt9$hY{(RzMn_L%;m}1D!wsw!a`WW2z@!IM9Ko0^0n?0H^l0_N4>!4{5 zgTdGVjPV-E;E{;;UpD!s>=Fl9d0?rSj8b(HL;m&0FIsxbq#OPE8#GdpTG92wZ>Y3g zYvcH5NF@C75-(x}<%q!^UPxqfv8_EE2_`Y*gmHc?`+k)J+p_X#v`S>pU^qf~O+x$$ z_6@sp(TCJL3#*=Xopf=8>Xbur$MsfKMmUOEq7GBDg<9>qY(H?(#eLHJ^QGi!K8&%( zHSNvp%J%Ms zjT6Mx$!CjIuJjB_rCnU+JjkN`A-51oq;&sNJ7VGz6DRn-vbGj(7#Wu)-%$rd6hmjZ zd_HKX4YCk4bT1#|e_lA%U4~YKhJcp3C**2Mp%fHN@qY$1oTkt_V(HV+RA^5YNzxY~ zZaKYNEf#mF5kpD1BKQiE6U9dQRLE& z2+iyXFA^+)$!B+73w^#u6JC5GyekbTr?B_ literal 0 HcmV?d00001 diff --git a/icons/mob/species/kepori/onmob_hands_kepori.dmi b/icons/mob/species/kepori/onmob_hands_kepori.dmi index 6dff1607ef57442080e5eb90b212a977a72608ef..1cd287411171528c02e31b3764085268e0abe009 100644 GIT binary patch delta 173 zcmeBVzQO3&8Q|y6%O%Cdz`(%k>ERLtq!WPHfsq+V-v9N$7f3M&_=LC~IB+1%dtVBW z%UBZR7tG-B>_!@plRh!bB)L#$hlO#F@nvJL2AO2#b&n<;nG~WB?Ah6Eth#xH#FCb7 zGC)ttc@!6~s0~C`-yoOwJ~# zDlfC7C^IJ&mpWwyS3ei9D*-P1FuH_*xorRd0GCNbK~z|U?bbmG!Y~kp;Yrh)1Jna3 zy?}@pi1iG5g4(Ss&##*iN=hHNDu4905BCgi$}S2@K6<_DqFb9g3iOa z7}c%Cy)4Kc^y<8mhxlg!007$&dW%_ZEj+IE_kVDc1-*w$S-}4Q0DzTgMoWX-dU;62 yXg65%lm(-QcUkbTbe9FcGwRiO3s=C_eE`)>30zJ066^o~002ovPDHLkU;%>J!G`Ss diff --git a/icons/mob/species/kepori/onmob_hands_keporiOLD.dmi b/icons/mob/species/kepori/onmob_hands_keporiOLD.dmi new file mode 100644 index 0000000000000000000000000000000000000000..6dff1607ef57442080e5eb90b212a977a72608ef GIT binary patch literal 393 zcmV;40e1e0P)cj;OgfB z4p{&)z-I^w2lg!h00WUpL_t(|ob8#>vZ^o)e?h^*O53|N{wXu-{fpRzr)+$vGZz~!r7(f) zfBC-?cE+_YOY-keKss1yz*BWoJ^kuz$dz$j;%)heSJl>2761SM000000N~$*?*k?! zz7Kqd?*n=zz7OQ#`v3p{00000006*Wq1o^EjUm1jd{QBCzt85%duP=qpPI}H!d_vd9A{d!jSBX-jKh6nA!JTCO5q7on^b2)Tt7}%GUI3# z+FULx_GH~&*395KKmY&$000000H4QnyuURzNJ4mbpr{j(rwZ-Fx^TK*|N8nr^?3cQ<`$u z_nA3_Sj#5oTK_UBk(p<+(B^hqu_x>HvSudN0RjL300000000009{>OV00000_|NzQ XA%HYjvLIjO00000NkvXXu0mjf6Z;me delta 1101 zcmV-T1hV_c36Tj+iBL{Q4GJ0x0000DNk~Le0001>0001h2m=5B0K2`CDF6TfNKi~v zMF0Q*MJ6C_J}Dm{COJ7jVKy#%PBbkoGp2f5GaDEf86F=I5s^eB6(p5ksQ>@~0d!JM zQvg8b*k%9#0FaS=G=Fl8jkq{7QZv&tN+6u#lEji!AXBM4Gp{7IC?h{VB_6~oRN~@H z$t)@c>F451D@x2w1+fhg8bC@jQ{$6z5|guuRa}&sLcF=9sl=*HFG{S$rB+$N)z1YS zA^-`0Q$)wD2UP$716xT%K~#90?U?Ouqc9Lf0YhA%IJg@h(k!f`(n41Z%d0bt5KS)xG4% zn@$wj61wE(@qZ?FAL-`<33PhAbRUAmluUY%C z3KtQ)U_%W{!h3>91c^Tj$N~|8lHgW?7x5luY!Nazq}ms_$(tWG-2G^q*b#{&kH?0* zxdCkQ?gx*l^LdxZL2`PFV3Q19?$(1!JGrXa_cZ1YJY4IVmPMS6WrvjHaDE6LPj7GNgnU< zm_K_2pTGOjW2&c^9n(OYBRu+;7Zez$ynW=9j(UsOHA^ipDhPX1)pXAfcPN;_2KTWj z7y>zE+8%>~_woMpdssaA9mltvapafiDvCHNdboL)&5)n2?4?b**NCkhCv9Q60 zVSgBgVHk#C7{>2KdlIGIU7Y7RlK7&O3Q5X5zrLPlKDN~MN`5l)ykJ8OO9Iu4ASu7b zlNTF@X%hW|)NieP`s%U!*3a)wV3g%dM zLsDanF_KfZNSF$W9%004jp0{{R3ySZF*5+B`&qf3a)-G;IIGyWK~eBXk~#<000A9NklNl@ z(vf)6G$fw}YFHAe-dIXPB1rsMK))W({T0ES1HW?XFdb@a5n?!|+7sO5 ztu{BDrb0#_5=kEK@t8k*1fReA(POHom>ttVnm=_cnr@VdSl#Y6f*fmQnFe(Up zQ`L0O4|gb-!3OuSC>R1cW!fHtg7@+M^m|x5`5ni%oN?rr=qidhDtfqim(7r$uI!}s zC+sIVqDTdQl(DeEhG7_nVHk#C7{>2KdlIGIU7Y7RlK7&O3Q5X5zrLPlKDN~MN`5l) zykJ8OO9Iu4ASu7blNTF@X%hW-7 zXnPC_u6gVV=2&+_Qe%xVl2f)wmY2IyS$WK>R3oHvOv5F#&iXQcQmsr?f!!QiP eFbu=^E`I=Ar#rumE;Yjd0000 literal 0 HcmV?d00001 diff --git a/icons/mob/species/kepori/onmob_mask_kepori.dmi b/icons/mob/species/kepori/onmob_mask_kepori.dmi index 610c62338c186ff5ffa7d79b0ccfc664b76a6bbe..d455cf0bd3e534b48b5dffe188230811c127b4ad 100644 GIT binary patch delta 168 zcmX@le3{X)Gr-TCmrII^fq{Y7)59eQNE-mL0wXh!%#+HD2U5%dJ|V6^dU=)YEg;2M z666=m;PC858jzDV(bpudP-lmQaggz4W3L98WaV{_CLNg+q7dxa*=?-4d4Hx;Tb#%uG&@xCi7tU|?jDyX+2RF?hQA KxvXM&0L delta 422 zcmV;X0a^aj0nYZFb8bFkllzJ;ciPs1*1b$3JAvfHj z^YceKbdDd7M48?U6mY7v6w8(<4NQ(==&2aG$BEY%if5E8hc^^OQLe-k5P*lgR;!RFihT}VmqA0%x zSoqmu%`LI$-wq3Mk=`?~b-#@NT?2Km|L#mUTi%5|VQ8{BVLmh{it-mc0K%CT6r8z- Qt^fc407*qoM6N<$g0?`UQ~&?~ diff --git a/icons/mob/species/kepori/onmob_mask_keporiOLD.dmi b/icons/mob/species/kepori/onmob_mask_keporiOLD.dmi new file mode 100644 index 0000000000000000000000000000000000000000..610c62338c186ff5ffa7d79b0ccfc664b76a6bbe GIT binary patch literal 463 zcmV;=0WkiFP)V=-0C=2J zR&a84_w-Y6@%7{?OD!tS%+FJ>RWQ*r;NmRLOex6#a*U0*I5Sc+(=$pSoZ^zil2jm5 zDKoDmwJ<&@F()xOC$TJ1iHkEOv#1!Por^QAC^0t`#5TmKKEAX7mlkCOS3ei9n*fDD zE+MFDY>xl{0O(0XK~z|U?Uum}gD?z5la>L%FhGJCAaND|_8+RKQd`HNfeSrUe&WDa z@+~`uFB_v=NY~c2F#udy?@di_Ao3bOl$DfvD?y3Z2r&eHOhh3!+@kaIM>=$lACE+t z-V79QsXyI}7RE2X=!%AZaU0 zb4Oua27yFCyF`T@IZRSoSoAO2I-hT9YEnL`uB{C>G&E6EI%0AFtSm1Zq@(AeuBjKD zWp=;JvAP3tAuujHlKh%fMj%+2{)EIw7V(7)A~BA3P9W2nA%Ec|C&Ae*#@sL3H!3J1 zCMY}%1iD`6@<1gYSZf$gu=YN9GdNf~u{UPH#-WnqY%&If*>x3giYxIJfgsW9i6tuH=p zyA1)^b-~3Ojs?9HP(Z8A?#dAQv5O>XYS!R1wFbKPxPznNQm*xRw)UxBJ(4Hj_2loW zCrahtM>{FYck619({YwT=WL!tGs~6JbymIn_2^D))icKtr?5RabT(nkzL9j4-iQ>q z){Z&Up3JR`QHKo&ViY9q<&S52FVAgN9wSQoTwgNpX@A2XSGjQ+&1r|; zg{uvkCRh%^h^AbL_WJy~VWbk9I4XbV(GH}*QKx8-@46S_2zOx5qebDzVR8Se8j5-3T zSvLQ1ubt(Z%=&y6OP(FBny5hv66|NlTA#0}S|~-> zSF^I^$G|0|sDL*fC6OCei~U3=ovDSXLOw3;HM_z4fn;&Jh|K*SJAr#)uYA$A0%IUt z);~EM+11j|Q4mV-O9u^cv{w9E86D+K%0sGYGat!n?5|8_gaic}ZNUKpyw`K{J9O91 zN_0JG&xQW6>4Vg!6m0nI9~5dNzO-WA+T#SW*X6+Vq%Skv0T&3TGPKxdCHKUk#6N&b z$6O7eu7e(o(mxf>;OU-0?-mcXyY0tSZ|}Y=AFzt9BB$=lEl^Ri8Ct{dJ#fbaPd~=V zlD3f#D>zUwEZDkR!TNT;OURm4$qx)3CroplKg2qPZ*h(ZvD3&t9LouBR6vu}nb1TC zp>xFkz3}7h?RCz}O-hdQB`74hs`zq3 zEdRa6N?Uor)~n2Llx!}K(~$hrn!o0Kf<%7M%+a2kZ*|F?(xsDwpgNcwHkTRv@m4=@Pg5Nl2bW=jp^ z?|v}==F@gnCzk3G<=my~F@#-|Te4jAtfkwwE&uA?wZNc{P$)A3i2r_PKGEu&;E%Ls zdqxi3Q+bMO*TnPAJ3ISvb^+7LGR_#c1oD2*ggzsh_Z?w067XZg7bQ7=v+>z;4^3)z z>1uheojqh&LdtVF--{Sxl)Il$4<&u6B8_Or%C$B0TSjybvp7~k(>sd1#5zr5O&(K| z%ksW?Ec9PXiP0zRB=}-yxN#XN9rM2SZ5bPli`^R!UH3bTE@_Op?=fNqV2LkIS+tVf zD!)9exmv=xpa%1aJ4f66#KHvr_LMkPjS-xCqZT6QgY0~cp*z1!P?xVw#;vMz@ z8fw^+h5}mSr@HID-x91_@cHf@_e@l-t~^aSqP`(;*FMhgzGAUsJmf z5#9z&#b%k4X{*Mqn>Q#a>BNj^wn7i!xP(Ymo{RcR)Z`i7aQ)=$yCbmC=GmOzdJOLT zncZ~ahA_IImY>lTRJP*G0dV^ECswCA__!RS!Q~}(E^ogt8{M-kE1*en(U__9si734 zhuf!E0aA5Mpy`b8c3e-w z(p!Y2ehf*>NYw%WOUEzBeyzJj=XH{K#mddt_wSN!OeF}A4O@F`l7X2*q5_GUiu2>e zpToXe;3ja|ar3ic2`R~8RqpK8+_fi=ros9_7H1x;72PE_t^pg2{OphRpZ0E+zw@1N zkB;!c5-)AnL@A0gJFj}6Y+~=b4#d6hp%;`C7kgvFWj85E0ZIy=xOBy@TV08$YwV#7 z&=&@_w@}Lb5)=yBeK4%oFABb65WKg}|7}a-(iN; m`Ok9vAMJm4C5{hlh}#!oD}3eNHVJ<$Agl9s=GAAfB>e+JHowLI literal 5080 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≪mjSoXikWpdtS2Wato1-04o!ROb4}d@i8v1!i7|MC$w@|bo^fJMm zb#I;XBhzhk|Hg=Vv&aG4|3q;q@yORRkkB>h7~s>1KKre~H<`hDp#rfm=DSTTXg52q zTi)%eG1nSC9RI8fWUwxho%2~BonIk4n4VLN8SvAc$qhKQ4g(`km8FVq3#-1n;aDNG zRngmShIr;$!M9BnYnQLixnP)6{U9VPcjw`HB09P2?HT3j>MO!q-Mi?X{rn6?vhm0` zS>T(?R{oE|zY&|Q?5rCUwL((rcn&;C{tm&5v(NJH$lh>%hJ5XHDaUiXKFeXRiG2G& zjVCtu4$rjNlqz)9J4nUR16Bh0apV5l`oJGhS-VnhZSF@}?5l)D$M5=g+UWPf&R0ps z>5@)Jr}i9&LBP>TZ`iC>Gg%k)ADYF(Oi&0e6U(PH?ZmH3Gu1vW9~_K+T!ko{go{|5 zL4!5-X3*k^5r^deRMm(|ST-y>P&>Ch%g*EX{v=>cqPILak$4OmofN-(mSz z+ys`@{)@5y4v+De=)S(k_~5y3k2ma#gJ-x|%G&H=+un?=6P+dw_nvJ$_Q!>m{eBmi z&H*YjuxlA=BU~Fez~>w%PPXfy4%QeTaCX}7o*;28>j%; zsn>RTLHC2b?;-m+@#$%?2yu6?hpP*tLP;ehFTB-?1K^!Fw0S>yNN7rDOMGmp z=qgh>3K(Fn>1)VDJI&80u?Ow}zvI)R3yQy-*>}*(@w>^FB2S~Tcf{YGj)poP;R$*DBs=4*UR4LCtWV4v@f*(yn9v_JHZBa zK+~V*vtY;0LZ?+MZx|k^-5|ZQvLKAzNIR3y<_riEe{kVzeDQ$JpM#cFvfNF*AvdZt zyBZ&E#6HMHoFj)`LEIPcgMr$1e*h#83GHUc6uh=a*n+{Br`1^vD0KLuU;rvYQ!YTDDw=qd)h z4fCNXLJ8O3x_j^*L@|P^V8yT`AI{321{FE#nOhX7_&^c2_xXt`UGj4S`O*wYFLuk_ zgthyb%*hjAaLB_LaW4bS*|;Fr{*!i1{mERKsDcl4=`OFIi(}uxKaSPe^`IY_{+>javA?i`7!#UzpZxwbX>I`4>XdTs`R=2-kr^;zb3Dq*Evpn@&!#3w?9CR?05 zAy=6cZlBD^l#8#EfAfE7Pnn2U(5&;4gp^;5nFwWnt=VrUD{a&a(bi5g6q~D7Y}TAG zM3Y^_sAu@#yS^Xob%0kYZF^X+$Y&2==o+pvFZ)g|jfS)8>irb?hO+Gyz86Q%)gxaT zf2Jb_p-2eCX01)6>^$w&WAO5oD*ScFN(B?2vhA3ESSJD5QSJIoy4OxOD^#@h5(}%7a*E33SaQra1%hb4h zR_{~QTJL@YARATEE_bnlX1EKGNF2!st>@2zP!fL`6-!tC4e~d&J`%$7Lqf z5Er@A;gsI+_x5M;Q_pniN$FWR+VY)^Pg@ByXXD5Mv##ajgtpL&j<4`L6`3S|j{`8< z$`PF=R{FhHyW$2p_X0)NlOfIABDV8tZxHOS;)^FfN(-1hh!tqwA^G2>s70xiq&9Ko zRM9_)q@?yyPrr4t;+KL)QW2EYF6wET?;QK`sji0yYU)%+8j1Ffh3rs@DJxZgrli01 liB)f7(%j!pJEuklUu%~&sp}eieDW8I2BmMNSBZ3s`3E>9sjmP4 diff --git a/icons/mob/species/kepori/onmob_suit_keporiOLD.dmi b/icons/mob/species/kepori/onmob_suit_keporiOLD.dmi new file mode 100644 index 0000000000000000000000000000000000000000..4d5eaaab1196ad921406c50f5121e573a7851188 GIT binary patch literal 5080 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≪mjSoXikWpdtS2Wato1-04o!ROb4}d@i8v1!i7|MC$w@|bo^fJMm zb#I;XBhzhk|Hg=Vv&aG4|3q;q@yORRkkB>h7~s>1KKre~H<`hDp#rfm=DSTTXg52q zTi)%eG1nSC9RI8fWUwxho%2~BonIk4n4VLN8SvAc$qhKQ4g(`km8FVq3#-1n;aDNG zRngmShIr;$!M9BnYnQLixnP)6{U9VPcjw`HB09P2?HT3j>MO!q-Mi?X{rn6?vhm0` zS>T(?R{oE|zY&|Q?5rCUwL((rcn&;C{tm&5v(NJH$lh>%hJ5XHDaUiXKFeXRiG2G& zjVCtu4$rjNlqz)9J4nUR16Bh0apV5l`oJGhS-VnhZSF@}?5l)D$M5=g+UWPf&R0ps z>5@)Jr}i9&LBP>TZ`iC>Gg%k)ADYF(Oi&0e6U(PH?ZmH3Gu1vW9~_K+T!ko{go{|5 zL4!5-X3*k^5r^deRMm(|ST-y>P&>Ch%g*EX{v=>cqPILak$4OmofN-(mSz z+ys`@{)@5y4v+De=)S(k_~5y3k2ma#gJ-x|%G&H=+un?=6P+dw_nvJ$_Q!>m{eBmi z&H*YjuxlA=BU~Fez~>w%PPXfy4%QeTaCX}7o*;28>j%; zsn>RTLHC2b?;-m+@#$%?2yu6?hpP*tLP;ehFTB-?1K^!Fw0S>yNN7rDOMGmp z=qgh>3K(Fn>1)VDJI&80u?Ow}zvI)R3yQy-*>}*(@w>^FB2S~Tcf{YGj)poP;R$*DBs=4*UR4LCtWV4v@f*(yn9v_JHZBa zK+~V*vtY;0LZ?+MZx|k^-5|ZQvLKAzNIR3y<_riEe{kVzeDQ$JpM#cFvfNF*AvdZt zyBZ&E#6HMHoFj)`LEIPcgMr$1e*h#83GHUc6uh=a*n+{Br`1^vD0KLuU;rvYQ!YTDDw=qd)h z4fCNXLJ8O3x_j^*L@|P^V8yT`AI{321{FE#nOhX7_&^c2_xXt`UGj4S`O*wYFLuk_ zgthyb%*hjAaLB_LaW4bS*|;Fr{*!i1{mERKsDcl4=`OFIi(}uxKaSPe^`IY_{+>javA?i`7!#UzpZxwbX>I`4>XdTs`R=2-kr^;zb3Dq*Evpn@&!#3w?9CR?05 zAy=6cZlBD^l#8#EfAfE7Pnn2U(5&;4gp^;5nFwWnt=VrUD{a&a(bi5g6q~D7Y}TAG zM3Y^_sAu@#yS^Xob%0kYZF^X+$Y&2==o+pvFZ)g|jfS)8>irb?hO+Gyz86Q%)gxaT zf2Jb_p-2eCX01)6>^$w&WAO5oD*ScFN(B?2vhA3ESSJD5QSJIoy4OxOD^#@h5(}%7a*E33SaQra1%hb4h zR_{~QTJL@YARATEE_bnlX1EKGNF2!st>@2zP!fL`6-!tC4e~d&J`%$7Lqf z5Er@A;gsI+_x5M;Q_pniN$FWR+VY)^Pg@ByXXD5Mv##ajgtpL&j<4`L6`3S|j{`8< z$`PF=R{FhHyW$2p_X0)NlOfIABDV8tZxHOS;)^FfN(-1hh!tqwA^G2>s70xiq&9Ko zRM9_)q@?yyPrr4t;+KL)QW2EYF6wET?;QK`sji0yYU)%+8j1Ffh3rs@DJxZgrli01 liB)f7(%j!pJEuklUu%~&sp}eieDW8I2BmMNSBZ3s`3E>9sjmP4 literal 0 HcmV?d00001 diff --git a/icons/mob/species/kepori/onmob_uniform_kepori.dmi b/icons/mob/species/kepori/onmob_uniform_kepori.dmi index d9bec6e951851ab6e089001f2732c40d716712de..d6f011cef3122d717d12ef7478d5790dcb81e76b 100644 GIT binary patch literal 3279 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 literal 0 HcmV?d00001 From f58386a7529863a6b37be6713b60b93e47e6c551 Mon Sep 17 00:00:00 2001 From: thgvr Date: Fri, 12 Apr 2024 03:24:46 -0700 Subject: [PATCH 03/14] eyes and stuff --- code/__DEFINES/species_clothing_defines.dm | 1 + code/modules/client/preferences.dm | 2 +- code/modules/clothing/glasses/hud.dm | 2 -- code/modules/clothing/suits/wintercoats.dm | 2 +- code/modules/mob/living/carbon/human/species_types/kepori.dm | 2 +- code/modules/mob/living/carbon/human/update_icons.dm | 3 +++ 6 files changed, 7 insertions(+), 5 deletions(-) diff --git a/code/__DEFINES/species_clothing_defines.dm b/code/__DEFINES/species_clothing_defines.dm index df8c2db1afc8..3cfbadad6824 100644 --- a/code/__DEFINES/species_clothing_defines.dm +++ b/code/__DEFINES/species_clothing_defines.dm @@ -33,6 +33,7 @@ #define KEPORI_SUIT_PATH 'icons/mob/species/kepori/onmob_suit_kepori.dmi' #define KEPORI_MASK_PATH 'icons/mob/species/kepori/onmob_mask_kepori.dmi' #define KEPORI_HEAD_PATH 'icons/mob/species/kepori/onmob_head_kepori.dmi' +#define KEPORI_EYES_PATH 'icons/mob/species/kepori/onmob_eyes_kepori.dmi' #define KEPORI_GLOVES_PATH 'icons/mob/species/kepori/onmob_hands_kepori.dmi' //#define KEPORI_BELT_PATH 'icons/mob/species/kepori/onmob_belt_kepori.dmi' #define KEPORI_UNDERWEAR_TORSO_PATH 'icons/mob/clothing/underwear/species/underwear_torso_kepori.dmi' diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index f7233e591256..b48537371d64 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -116,7 +116,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) "ipc_brain" = "Posibrain", "kepori_feathers" = "None", "kepori_body_feathers" = "None", - "kepori_head_feathers" = "None" + "kepori_head_feathers" = "None", "kepori_tail_feathers" = "None", "vox_head_quills" = "Plain", "vox_neck_quills" = "Plain", diff --git a/code/modules/clothing/glasses/hud.dm b/code/modules/clothing/glasses/hud.dm index 385baa647432..0698981207bf 100644 --- a/code/modules/clothing/glasses/hud.dm +++ b/code/modules/clothing/glasses/hud.dm @@ -248,7 +248,6 @@ tint = 1 glass_colour_type = /datum/client_colour/glass_colour/gray - /obj/item/clothing/glasses/hud/spacecop/hidden // for the undercover cop name = "sunglasses" desc = "These sunglasses are special, and let you view potential criminals." @@ -274,4 +273,3 @@ desc = "A heads-up display that scans the humanoids in view and provides accurate data about their ID status and security records. This pair also corrects nearsightedness." icon_state = "prescriptionsecurityhud" vision_correction = 1 - diff --git a/code/modules/clothing/suits/wintercoats.dm b/code/modules/clothing/suits/wintercoats.dm index 83c0b7a9e9a9..9b141148e5a2 100644 --- a/code/modules/clothing/suits/wintercoats.dm +++ b/code/modules/clothing/suits/wintercoats.dm @@ -114,7 +114,7 @@ /obj/item/flashlight/pen, /obj/item/reagent_containers/glass/bottle, /obj/item/reagent_containers/glass/beaker, - /obj/item/reagent_containers/pill + /obj/item/reagent_containers/pill, /obj/item/storage/pill_bottle, /obj/item/paper, /obj/item/melee/classic_baton/telescopic, diff --git a/code/modules/mob/living/carbon/human/species_types/kepori.dm b/code/modules/mob/living/carbon/human/species_types/kepori.dm index 029eaa1e627f..11acbe133ffe 100644 --- a/code/modules/mob/living/carbon/human/species_types/kepori.dm +++ b/code/modules/mob/living/carbon/human/species_types/kepori.dm @@ -4,7 +4,7 @@ default_color = "6060FF" species_traits = list(SCLERA, MUTCOLORS, EYECOLOR, MUTCOLORS_SECONDARY) inherent_traits = list(TRAIT_SCOOPABLE) - mutant_bodyparts = list("kepori_body_feathers", "kepori_head_feathers" "kepori_tail_feathers", "kepori_feathers") + mutant_bodyparts = list("kepori_body_feathers", "kepori_head_feathers", "kepori_tail_feathers", "kepori_feathers") default_features = list("mcolor" = "0F0", "wings" = "None", "kepori_feathers" = "None", "kepori_head_feathers" = "None", "kepori_body_feathers" = "None", "kepori_tail_feathers" = "None", "body_size" = "Normal") meat = /obj/item/reagent_containers/food/snacks/meat/slab/chicken disliked_food = FRIED | GROSS | CLOTH diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index 09445cef4c4e..9c62ab3d38aa 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -246,6 +246,9 @@ There are several things that need to be remembered: if((dna.species.bodytype & BODYTYPE_VOX) && (I.supports_variations & VOX_VARIATION)) icon_file = VOX_GLASSES_PATH + if((dna.species.bodytype & BODYTYPE_KEPORI) && (I.supports_variations & KEPORI_VARIATION)) + icon_file = KEPORI_EYES_PATH + if(!(icon_exists(icon_file, RESOLVE_ICON_STATE(I)))) handled_by_bodytype = FALSE icon_file = DEFAULT_GLASSES_PATH From 76d36ed9fee8fdfd18c02621ed2c8894b1f842bf Mon Sep 17 00:00:00 2001 From: thgvr Date: Fri, 12 Apr 2024 03:32:55 -0700 Subject: [PATCH 04/14] fix --- icons/blanks/64x64.dmi | Bin 216 -> 219 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/blanks/64x64.dmi b/icons/blanks/64x64.dmi index 6c4f2b33e0fee9d3f99ff3febc0760cfd078aed2..6bfbd471e5db047e61a56f350fa92b3820a03f7e 100644 GIT binary patch delta 95 zcmcb?c$-nNGr-TCmrII^fq{Y7)59eQNIQTqBQubku>A4diHf02XM84BnCRDeN%LIt s+wKRH;P-TK4AGdFoFKuvxS@uDfyse^F(K463n<0l>FVdQ&MBb@072Oof&c&j delta 92 zcmcc3c!N=~Gr-TCmrII^fq{Y7)59eQNGpIaBQucn-11`kM8#01p5BQSCOXx>rJ0ty oi|7L-csyMkLpWw8CrI1@@)j^KK9%-g2V^mLy85}Sb4q9e0Ov^-`2YX_ From c3fa2b1fbe0915d6a6b509ffc7e856743b1ebe11 Mon Sep 17 00:00:00 2001 From: thgvr Date: Mon, 6 May 2024 02:13:36 -0700 Subject: [PATCH 05/14] Keprosthetics --- code/__DEFINES/species_clothing_defines.dm | 8 ++++---- .../carbon/human/species_types/kepori.dm | 2 ++ .../surgery/bodyparts/robot_bodyparts.dm | 7 ------- code/modules/surgery/organs/eyes.dm | 3 +++ icons/mob/augmentation/augments_kepori.dmi | Bin 1889 -> 1520 bytes icons/mob/augmentation/augments_keporiOLD.dmi | Bin 0 -> 1889 bytes .../species/kepori/underwear_legs_kepori.dmi | Bin 0 -> 216 bytes .../underwear_legs_keporiOLD.dmi} | Bin .../species/kepori/underwear_socks_kepori.dmi | Bin 0 -> 216 bytes .../underwear_socks_keporiOLD.dmi} | Bin .../species/kepori/underwear_torso_kepori.dmi | Bin 0 -> 216 bytes .../underwear_torso_keporiOLD.dmi} | Bin icons/mob/species/kepori/kepori_eyes.dmi | Bin 308 -> 361 bytes 13 files changed, 9 insertions(+), 11 deletions(-) create mode 100644 icons/mob/augmentation/augments_keporiOLD.dmi create mode 100644 icons/mob/clothing/underwear/species/kepori/underwear_legs_kepori.dmi rename icons/mob/clothing/underwear/species/{underwear_legs_kepori.dmi => kepori/underwear_legs_keporiOLD.dmi} (100%) create mode 100644 icons/mob/clothing/underwear/species/kepori/underwear_socks_kepori.dmi rename icons/mob/clothing/underwear/species/{underwear_socks_kepori.dmi => kepori/underwear_socks_keporiOLD.dmi} (100%) create mode 100644 icons/mob/clothing/underwear/species/kepori/underwear_torso_kepori.dmi rename icons/mob/clothing/underwear/species/{underwear_torso_kepori.dmi => kepori/underwear_torso_keporiOLD.dmi} (100%) diff --git a/code/__DEFINES/species_clothing_defines.dm b/code/__DEFINES/species_clothing_defines.dm index 3cfbadad6824..a5da82dad554 100644 --- a/code/__DEFINES/species_clothing_defines.dm +++ b/code/__DEFINES/species_clothing_defines.dm @@ -35,7 +35,7 @@ #define KEPORI_HEAD_PATH 'icons/mob/species/kepori/onmob_head_kepori.dmi' #define KEPORI_EYES_PATH 'icons/mob/species/kepori/onmob_eyes_kepori.dmi' #define KEPORI_GLOVES_PATH 'icons/mob/species/kepori/onmob_hands_kepori.dmi' -//#define KEPORI_BELT_PATH 'icons/mob/species/kepori/onmob_belt_kepori.dmi' -#define KEPORI_UNDERWEAR_TORSO_PATH 'icons/mob/clothing/underwear/species/underwear_torso_kepori.dmi' -#define KEPORI_UNDERWEAR_LEGS_PATH 'icons/mob/clothing/underwear/species/underwear_legs_kepori.dmi' -#define KEPORI_UNDERWEAR_SOCKS_PATH 'icons/mob/clothing/underwear/species/underwear_socks_kepori.dmi' +#define KEPORI_BELT_PATH 'icons/mob/species/kepori/onmob_belt_kepori.dmi' +#define KEPORI_UNDERWEAR_TORSO_PATH 'icons/mob/clothing/underwear/species/kepori/underwear_torso_kepori.dmi' +#define KEPORI_UNDERWEAR_LEGS_PATH 'icons/mob/clothing/underwear/species/kepori/underwear_legs_kepori.dmi' +#define KEPORI_UNDERWEAR_SOCKS_PATH 'icons/mob/clothing/underwear/species/kepori/underwear_socks_kepori.dmi' diff --git a/code/modules/mob/living/carbon/human/species_types/kepori.dm b/code/modules/mob/living/carbon/human/species_types/kepori.dm index 11acbe133ffe..f1d7ad298c7d 100644 --- a/code/modules/mob/living/carbon/human/species_types/kepori.dm +++ b/code/modules/mob/living/carbon/human/species_types/kepori.dm @@ -57,6 +57,8 @@ species_robotic_l_leg = /obj/item/bodypart/leg/left/robot/surplus/kepori species_robotic_r_leg = /obj/item/bodypart/leg/right/robot/surplus/kepori + robotic_eyes = /obj/item/organ/eyes/robotic/kepori + /datum/species/kepori/New() . = ..() // This is in new because "[HEAD_LAYER]" etc. is NOT a constant compile-time value. For some reason. diff --git a/code/modules/surgery/bodyparts/robot_bodyparts.dm b/code/modules/surgery/bodyparts/robot_bodyparts.dm index 398d937cc586..61bbb88ab545 100644 --- a/code/modules/surgery/bodyparts/robot_bodyparts.dm +++ b/code/modules/surgery/bodyparts/robot_bodyparts.dm @@ -137,7 +137,6 @@ var/wired = FALSE var/obj/item/stock_parts/cell/cell = null - /obj/item/bodypart/chest/robot/handle_atom_del(atom/A) if(A == cell) cell = null @@ -191,7 +190,6 @@ cell.forceMove(drop_location()) cell = null - /obj/item/bodypart/chest/robot/examine(mob/user) . = ..() if(cell) @@ -214,7 +212,6 @@ cell = null ..() - /obj/item/bodypart/head/robot name = "cyborg head" desc = "A standard reinforced braincase, with spine-plugged neural socket and sensor gimbals." @@ -304,7 +301,6 @@ to_chat(user, "There is no flash to remove from [src].") return TRUE - /obj/item/bodypart/head/robot/drop_organs(mob/user, violent_removal) if(flash1) flash1.forceMove(user.loc) @@ -314,9 +310,6 @@ flash2 = null ..() - - - /obj/item/bodypart/l_arm/robot/surplus name = "surplus prosthetic left arm" desc = "A skeletal, robotic limb. Outdated and fragile, but it's still better than nothing." diff --git a/code/modules/surgery/organs/eyes.dm b/code/modules/surgery/organs/eyes.dm index 0c200df9f6b1..283ee77971eb 100644 --- a/code/modules/surgery/organs/eyes.dm +++ b/code/modules/surgery/organs/eyes.dm @@ -149,6 +149,9 @@ /obj/item/organ/eyes/robotic/lizard eye_icon_state = "eyes_synth" +/obj/item/organ/eyes/robotic/kepori + eye_icon_state = "eyes_kepori_synth" + /obj/item/organ/eyes/robotic/emp_act(severity) . = ..() if(!owner || . & EMP_PROTECT_SELF) diff --git a/icons/mob/augmentation/augments_kepori.dmi b/icons/mob/augmentation/augments_kepori.dmi index 56e56dd22db531ee29944f06bdfde5ee4f9bb47a..e86bdfd9cf2dee0a4989142a33240dcd7686c9c7 100644 GIT binary patch literal 1520 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 L`njxgN@xNAFT6=( literal 0 HcmV?d00001 diff --git a/icons/mob/clothing/underwear/species/underwear_legs_kepori.dmi b/icons/mob/clothing/underwear/species/kepori/underwear_legs_keporiOLD.dmi similarity index 100% rename from icons/mob/clothing/underwear/species/underwear_legs_kepori.dmi rename to icons/mob/clothing/underwear/species/kepori/underwear_legs_keporiOLD.dmi diff --git a/icons/mob/clothing/underwear/species/kepori/underwear_socks_kepori.dmi b/icons/mob/clothing/underwear/species/kepori/underwear_socks_kepori.dmi new file mode 100644 index 0000000000000000000000000000000000000000..78b33771c5b5254100aa2dae275dca28048fa843 GIT binary patch literal 216 zcmeAS@N?(olHy`uVBq!ia0vp^2|($S;_| z;n|HeASb;lB%;J6wK%ybv!En1KaYW-Voq>aK~d@VFTn*Lzdq6O*3~+9=6vvmP=kxc z4<6~9_t8AbP^h!R!Z^tIvawf#OtSL2N0W|B3Q-95?CdsH-Mm6#NlUl!S`9;U(IaM0 zg2D>E7BkM~V3;#aLiF@p83mw~0-i38AsQ2t6C_v{Cx}eoW?*(;VAQ+1%mFCJ;OXk; Jvd$@?2>|PBM~DCb literal 0 HcmV?d00001 diff --git a/icons/mob/clothing/underwear/species/underwear_socks_kepori.dmi b/icons/mob/clothing/underwear/species/kepori/underwear_socks_keporiOLD.dmi similarity index 100% rename from icons/mob/clothing/underwear/species/underwear_socks_kepori.dmi rename to icons/mob/clothing/underwear/species/kepori/underwear_socks_keporiOLD.dmi diff --git a/icons/mob/clothing/underwear/species/kepori/underwear_torso_kepori.dmi b/icons/mob/clothing/underwear/species/kepori/underwear_torso_kepori.dmi new file mode 100644 index 0000000000000000000000000000000000000000..1cd287411171528c02e31b3764085268e0abe009 GIT binary patch literal 216 zcmeAS@N?(olHy`uVBq!ia0vp^2|(%Op_2jJy%8nXr+Lsi(`n!#N-4C*2M`T6Sx_e9T*t(t}b%`$}xDl L`njxgN@xNAFT6=( literal 0 HcmV?d00001 diff --git a/icons/mob/clothing/underwear/species/underwear_torso_kepori.dmi b/icons/mob/clothing/underwear/species/kepori/underwear_torso_keporiOLD.dmi similarity index 100% rename from icons/mob/clothing/underwear/species/underwear_torso_kepori.dmi rename to icons/mob/clothing/underwear/species/kepori/underwear_torso_keporiOLD.dmi diff --git a/icons/mob/species/kepori/kepori_eyes.dmi b/icons/mob/species/kepori/kepori_eyes.dmi index 21e9dbedb0def71fa871bf7007dad8aa909f631c..3e16173157552b4def34ca2c12d2a049742e52a7 100644 GIT binary patch delta 265 zcmdnO^pYu{Gr-TCmrII^fq{Y7)59eQNKXLb1{P)@DYoyg0FV+2@Ck7}aNs~!_uP!k z+W-HK{CwDV@#2j?uF{P_S;mqezhDN3XE)M-oR*2cS@j-sZoRqE^k>nTACFG$nZy%g zHAOV$Z_I%_Hip`6vkP0TntuRQmU_B4hGaCpy=KVOV8GM*FzW3+<&?tj9CC^r_x@{@ zX^I?K!MgF$|J0Y+o-ZVxH@F>*xP0~PdY3G=pR?3}?rV>j9XS7$k>S0z5TIfAji(;G z)w4(M*@B%s*9_81%s3br7WlqS+>xo{EId1qLs35T>)H7X2jX*!^H~}hQ%1;vcbP0 Hl+XkKOgK%g From 4e53dea791ca6b284568c25fade5a8c0503d71e7 Mon Sep 17 00:00:00 2001 From: thgvr Date: Tue, 14 May 2024 05:30:50 -0700 Subject: [PATCH 06/14] Socks --- .../species/kepori/underwear_socks_kepori.dmi | Bin 216 -> 3276 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/mob/clothing/underwear/species/kepori/underwear_socks_kepori.dmi b/icons/mob/clothing/underwear/species/kepori/underwear_socks_kepori.dmi index 78b33771c5b5254100aa2dae275dca28048fa843..6fe4e042f679f121f956f8a657f52bddf3df6b50 100644 GIT binary patch literal 3276 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 literal 216 zcmeAS@N?(olHy`uVBq!ia0vp^2|($S;_| z;n|HeASb;lB%;J6wK%ybv!En1KaYW-Voq>aK~d@VFTn*Lzdq6O*3~+9=6vvmP=kxc z4<6~9_t8AbP^h!R!Z^tIvawf#OtSL2N0W|B3Q-95?CdsH-Mm6#NlUl!S`9;U(IaM0 zg2D>E7BkM~V3;#aLiF@p83mw~0-i38AsQ2t6C_v{Cx}eoW?*(;VAQ+1%mFCJ;OXk; Jvd$@?2>|PBM~DCb From b2a6192715dd20415d9613ce1a7175acf6af9ece Mon Sep 17 00:00:00 2001 From: thgvr Date: Tue, 14 May 2024 05:51:24 -0700 Subject: [PATCH 07/14] Shirts --- .../species/kepori/underwear_legs_kepori.dmi | Bin 216 -> 330 bytes .../species/kepori/underwear_torso_kepori.dmi | Bin 216 -> 1112 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/mob/clothing/underwear/species/kepori/underwear_legs_kepori.dmi b/icons/mob/clothing/underwear/species/kepori/underwear_legs_kepori.dmi index 1cd287411171528c02e31b3764085268e0abe009..166e1a7624d989077a4ed74d75d14280c7debb9b 100644 GIT binary patch delta 321 zcmcb?c#6rTGr-TCmrII^fq{Y7)59f*fq_v0h#eT2fg)-Y0)R zP=v80$S;_|;n|HeAm`{rN8$S3NqhMY8Su0`f2O&p%>56qj?N0vR}S%vORwbe_y(zp zEzS4ul9*9oKL5+fay!e(%OAyr8SS6)h|_Mt=1&^mS8w%j%ken>NI{7AMrK#icF{%= zN14mFl(#5~dN$jgS>O@1p6ATxXY9r6cg#4-R4LPNl*erGtcW$`+jd*$R>t$5DiO|K z{f1e0)13u6iXYa+zgtyxZ+3}I+xvW%Nbe&l?O;Xl`@l)$I+^{bgH zZ*5*!mh#~O&%Op_2jJy%8nXr+Lsi(`n!#N-4C*2M`T6Sx_e9T*t(t}b%`$}xDl L`njxgN@xNAFT6=( diff --git a/icons/mob/clothing/underwear/species/kepori/underwear_torso_kepori.dmi b/icons/mob/clothing/underwear/species/kepori/underwear_torso_kepori.dmi index 1cd287411171528c02e31b3764085268e0abe009..1a6a59cd52410068d42af2bf76912e1a6bfd8057 100644 GIT binary patch literal 1112 zcmbtQjWgQ^82)8SZ>W-WHU#5z>KN6`_w;APh)sNj)KN>~iWK=MN(|9imkFI#Dn8=l z*cJpK*<=}NxK>Ub&ZP(mQHmka;o_qa7JtLuyXW5LdEdL|-uEeuM1@>3v@`?&;1V(v z5e)#49vy}*=;*TS%_mpl6$&N8j)~YYN9U5#=hw-M+Kjq)yu_iij63d%6N1!u5|0uxur8m0avF0kM=qST2X4 zKbd25oP)vy$3n#w7@Bh=&e{i^7A7nBz@?-W#>hnjx(Bzm;y5vC(1}oCIIS7aYFR-3W+-Lkj07ikqQDz?VQm1KAWD^W6DwQ``fb0aHn;nKDk@yOu=NL+IIHy!@)!v z78jHc$(o@_Wyeq86YYEcSw1s~Y7BF#eX#$x)s~q7<;WXdssPaa`ap`>wN#v3=^yjO z9~OMeW8s(sGL3LzC$Lk|jrtmPd2L@Mof3vGsgl`X@m}bpkR_76jizVf3zdS+I2gz0 zR#EO8RFhn7_+8N}ZNu+ze{Kw~mmj4>nK+ip7Cp6(QKzVFsiN^>KU2Z8KcM46GvZ+= znrE$?Cp%o*;WjTF_Gc@4pDz+{VwqR`7bN`puL*q8{pzN-FL>#VL@_tA$>wrWP8)mm zg-MQ>Qy^5{IF*d_WfuO$mPHbqlvPKyjwHp-!%Op_2jJy%8nXr+Lsi(`n!#N-4C*2M`T6Sx_e9T*t(t}b%`$}xDl L`njxgN@xNAFT6=( From 2875e0cf612dc6a3f861bcb34140b7bf61d0c188 Mon Sep 17 00:00:00 2001 From: thgvr Date: Tue, 14 May 2024 16:33:48 -0700 Subject: [PATCH 08/14] no height --- code/modules/mob/living/carbon/human/species_types/kepori.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/carbon/human/species_types/kepori.dm b/code/modules/mob/living/carbon/human/species_types/kepori.dm index f1d7ad298c7d..82cf43da5b7b 100644 --- a/code/modules/mob/living/carbon/human/species_types/kepori.dm +++ b/code/modules/mob/living/carbon/human/species_types/kepori.dm @@ -5,7 +5,7 @@ species_traits = list(SCLERA, MUTCOLORS, EYECOLOR, MUTCOLORS_SECONDARY) inherent_traits = list(TRAIT_SCOOPABLE) mutant_bodyparts = list("kepori_body_feathers", "kepori_head_feathers", "kepori_tail_feathers", "kepori_feathers") - default_features = list("mcolor" = "0F0", "wings" = "None", "kepori_feathers" = "None", "kepori_head_feathers" = "None", "kepori_body_feathers" = "None", "kepori_tail_feathers" = "None", "body_size" = "Normal") + default_features = list("mcolor" = "0F0", "wings" = "None", "kepori_feathers" = "None", "kepori_head_feathers" = "None", "kepori_body_feathers" = "None", "kepori_tail_feathers" = "None") meat = /obj/item/reagent_containers/food/snacks/meat/slab/chicken disliked_food = FRIED | GROSS | CLOTH liked_food = MEAT | GORE From bc3b0c57502808e6168320c25f25a8bd0eab11b8 Mon Sep 17 00:00:00 2001 From: retlaw34 <58402542+retlaw34@users.noreply.github.com> Date: Fri, 24 May 2024 16:37:30 -0700 Subject: [PATCH 09/14] fuck it, good enough --- code/__DEFINES/species_clothing_defines.dm | 5 +- .../carbon/human/species_types/kepori.dm | 6 + .../mob/living/carbon/human/update_icons.dm | 139 +++++++++++++----- .../mob/species/kepori/onmob_ears_kepori.dmi | Bin 0 -> 184 bytes 4 files changed, 107 insertions(+), 43 deletions(-) create mode 100644 icons/mob/species/kepori/onmob_ears_kepori.dmi diff --git a/code/__DEFINES/species_clothing_defines.dm b/code/__DEFINES/species_clothing_defines.dm index 64f5469daf91..517579192634 100644 --- a/code/__DEFINES/species_clothing_defines.dm +++ b/code/__DEFINES/species_clothing_defines.dm @@ -31,13 +31,12 @@ #define KEPORI_UNIFORM_PATH 'icons/mob/species/kepori/onmob_uniform_kepori.dmi' #define KEPORI_SHOES_PATH 'icons/mob/species/kepori/onmob_feet_kepori.dmi' #define KEPORI_SUIT_PATH 'icons/mob/species/kepori/onmob_suit_kepori.dmi' -//#define KEPORI_EARS_PATH 'icons/mob/species/kepori/onmob_ears_kepori.dmi' +#define KEPORI_EARS_PATH 'icons/mob/species/kepori/onmob_ears_kepori.dmi' #define KEPORI_MASK_PATH 'icons/mob/species/kepori/onmob_mask_kepori.dmi' #define KEPORI_HEAD_PATH 'icons/mob/species/kepori/onmob_head_kepori.dmi' -#define KEPORI_EYES_PATH 'icons/mob/species/kepori/onmob_eyes_kepori.dmi' +#define KEPORI_GLASSES_PATH 'icons/mob/species/kepori/onmob_eyes_kepori.dmi' #define KEPORI_GLOVES_PATH 'icons/mob/species/kepori/onmob_hands_kepori.dmi' #define KEPORI_BELT_PATH 'icons/mob/species/kepori/onmob_belt_kepori.dmi' -//#define KEPORI_GLASSES_PATH 'icons/mob/species/kepori/onmob_eyes_kepori.dmi' #define KEPORI_UNDERWEAR_TORSO_PATH 'icons/mob/clothing/underwear/species/kepori/underwear_torso_kepori.dmi' #define KEPORI_UNDERWEAR_LEGS_PATH 'icons/mob/clothing/underwear/species/kepori/underwear_legs_kepori.dmi' #define KEPORI_UNDERWEAR_SOCKS_PATH 'icons/mob/clothing/underwear/species/kepori/underwear_socks_kepori.dmi' diff --git a/code/modules/mob/living/carbon/human/species_types/kepori.dm b/code/modules/mob/living/carbon/human/species_types/kepori.dm index 82cf43da5b7b..3b384dc8d94b 100644 --- a/code/modules/mob/living/carbon/human/species_types/kepori.dm +++ b/code/modules/mob/living/carbon/human/species_types/kepori.dm @@ -83,6 +83,12 @@ "[SOUTH]" = list("x" = 0, "y" = -5), "[WEST]" = list("x" = -4, "y" = -5) ), + "[BELT_LAYER]" = list( + "[NORTH]" = list("x" = 8, "y" = -1), + "[EAST]" = list("x" = 8, "y" = -1), + "[SOUTH]" = list("x" = 8, "y" = -1), + "[WEST]" = list("x" = -8, "y" = -1) + ), ) // First list is left hand, second list is right hand. This is used for inhand offsets. diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index be99a1e4d547..a7325421038c 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -111,9 +111,6 @@ There are several things that need to be remembered: if(wear_suit && (wear_suit.flags_inv & HIDEJUMPSUIT)) return - var/target_overlay = U.icon_state - if(U.adjusted == ALT_STYLE) - target_overlay = "[target_overlay]_d" var/t_color = U.item_color @@ -122,10 +119,18 @@ There are several things that need to be remembered: if(U.adjusted == ALT_STYLE) t_color = "[t_color]_d" + ///The final thing we overlay. Set on build_worn_icon. var/mutable_appearance/uniform_overlay + ///icon file of the clothing var/icon_file = U.mob_overlay_icon - var/handled_by_bodytype = TRUE + ///The icon state to overlay + var/target_overlay = U.icon_state + if(U.adjusted == ALT_STYLE) + target_overlay = "[target_overlay]_d" + /// Does this clothing need to be generated via greyscale? + var/handled_by_bodytype = FALSE + if(!uniform_overlay) //Kapu's autistic attempt at digitigrade handling //Hi Kapu @@ -146,9 +151,10 @@ There are several things that need to be remembered: icon_file = U.kepoi_override_icon if(!(icon_exists(icon_file, RESOLVE_ICON_STATE(U)))) - handled_by_bodytype = FALSE + handled_by_bodytype = TRUE icon_file = U.mob_overlay_icon || DEFAULT_UNIFORM_PATH + uniform_overlay = U.build_worn_icon(default_layer = UNIFORM_LAYER, default_icon_file = icon_file, override_file = icon_file, isinhands = FALSE, override_file = icon_file, override_state = target_overlay, mob_species = CHECK_USE_AUTOGEN) if(!uniform_overlay) @@ -206,13 +212,18 @@ There are several things that need to be remembered: //Bloody hands end - var/mutable_appearance/gloves_overlay + if(gloves) var/obj/item/I = gloves update_hud_gloves(I) - var/handled_by_bodytype = TRUE + ///The final thing we overlay. Set on build_worn_icon. + var/mutable_appearance/gloves_overlay + + ///icon file of the clothing var/icon_file = I.mob_overlay_icon + /// Does this clothing need to be generated via greyscale? + var/handled_by_bodytype = FALSE if((dna.species.bodytype & BODYTYPE_VOX) && (I.supports_variations & VOX_VARIATION)) icon_file = VOX_GLOVES_PATH @@ -225,7 +236,7 @@ There are several things that need to be remembered: icon_file = I.kepoi_override_icon if(!(icon_exists(icon_file, RESOLVE_ICON_STATE(I)))) - handled_by_bodytype = FALSE + handled_by_bodytype = TRUE icon_file = DEFAULT_GLOVES_PATH gloves_overlay = I.build_worn_icon(default_layer = GLOVES_LAYER, default_icon_file = icon_file, override_file = icon_file, mob_species = CHECK_USE_AUTOGEN) @@ -250,22 +261,27 @@ There are several things that need to be remembered: var/obj/item/I = glasses update_hud_glasses(I) if(!(head?.flags_inv & HIDEEYES) && !(wear_mask?.flags_inv & HIDEEYES)) + ///The final thing we overlay. Set on build_worn_icon. var/mutable_appearance/glasses_overlay - var/handled_by_bodytype = TRUE + + ///icon file of the clothing var/icon_file = I.mob_overlay_icon + /// Does this clothing need to be generated via greyscale? + var/handled_by_bodytype = FALSE + if((dna.species.bodytype & BODYTYPE_VOX) && (I.supports_variations & VOX_VARIATION)) icon_file = VOX_GLASSES_PATH if(I.vox_override_icon) icon_file = I.vox_override_icon -/*uncomment post kepori resprite + if((dna.species.bodytype & BODYTYPE_KEPORI) && (I.supports_variations & KEPORI_VARIATION)) icon_file = KEPORI_GLASSES_PATH if(I.kepoi_override_icon) icon_file = I.kepoi_override_icon -*/ + if(!(icon_exists(icon_file, RESOLVE_ICON_STATE(I)))) - handled_by_bodytype = FALSE + handled_by_bodytype = TRUE icon_file = DEFAULT_GLASSES_PATH glasses_overlay = I.build_worn_icon(default_layer = GLASSES_LAYER, default_icon_file = icon_file, override_file = icon_file, mob_species = CHECK_USE_AUTOGEN) @@ -288,24 +304,28 @@ There are several things that need to be remembered: if(ears) var/obj/item/I = ears - var/mutable_appearance/ears_overlay update_hud_ears(I) - var/handled_by_bodytype = TRUE + ///The final thing we overlay. Set on build_worn_icon. + var/mutable_appearance/ears_overlay + + ///icon file of the clothing var/icon_file = I.mob_overlay_icon + /// Does this clothing need to be generated via greyscale? + var/handled_by_bodytype = FALSE if((dna.species.bodytype & BODYTYPE_VOX) && (I.supports_variations & VOX_VARIATION)) icon_file = VOX_EARS_PATH if(I.vox_override_icon) icon_file = I.vox_override_icon -/*uncomment post kepori resprite + if((dna.species.bodytype & BODYTYPE_KEPORI) && (I.supports_variations & KEPORI_VARIATION)) icon_file = KEPORI_EARS_PATH if(I.kepoi_override_icon) icon_file = I.kepoi_override_icon -*/ + if(!(icon_exists(icon_file, RESOLVE_ICON_STATE(I)))) - handled_by_bodytype = FALSE + handled_by_bodytype = TRUE icon_file = DEFAULT_EARS_PATH ears_overlay = I.build_worn_icon(default_layer = EARS_LAYER, override_file = icon_file, mob_species = CHECK_USE_AUTOGEN) @@ -328,11 +348,17 @@ There are several things that need to be remembered: if(shoes) var/obj/item/I = shoes + update_hud_shoes(I) + ///The final thing we overlay. Set on build_worn_icon. var/mutable_appearance/shoes_overlay + + ///icon file of the clothing var/icon_file = I.mob_overlay_icon + ///The icon state to overlay var/target_overlay = I.icon_state - update_hud_shoes(I) - var/handled_by_bodytype = TRUE + + /// Does this clothing need to be generated via greyscale? + var/handled_by_bodytype = FALSE if((dna.species.bodytype & BODYTYPE_DIGITIGRADE) && ((I.supports_variations & DIGITIGRADE_VARIATION) || (I.supports_variations & DIGITIGRADE_VARIATION_SAME_ICON_FILE))) var/obj/item/bodypart/leg = src.get_bodypart(BODY_ZONE_L_LEG) @@ -353,7 +379,7 @@ There are several things that need to be remembered: icon_file = I.kepoi_override_icon if(!(icon_exists(icon_file, RESOLVE_ICON_STATE(I)))) - handled_by_bodytype = FALSE + handled_by_bodytype = TRUE icon_file = DEFAULT_SHOES_PATH shoes_overlay = I.build_worn_icon(default_layer = SHOES_LAYER, default_icon_file = icon_file, override_file = icon_file, isinhands = FALSE, mob_species = CHECK_USE_AUTOGEN, override_state = target_overlay) @@ -394,12 +420,18 @@ There are several things that need to be remembered: inv.update_appearance() if(head) var/obj/item/I = head - var/mutable_appearance/head_overlay update_hud_head(I) - var/handled_by_bodytype = TRUE + ///The final thing we overlay. Set on build_worn_icon. + var/mutable_appearance/head_overlay + + ///icon file of the clothing var/icon_file = I.mob_overlay_icon + ///The icon state to overlay var/target_overlay = I.icon_state + /// Does this clothing need to be generated via greyscale? + var/handled_by_bodytype = FALSE + var/obj/item/bodypart/head_bodypart = src.get_bodypart(BODY_ZONE_HEAD) if((head_bodypart.bodytype & BODYTYPE_SNOUT) && (I.supports_variations & SNOUTED_VARIATION)) target_overlay = "[target_overlay]_snouted" @@ -415,7 +447,7 @@ There are several things that need to be remembered: icon_file = I.kepoi_override_icon if(!(icon_exists(icon_file, RESOLVE_ICON_STATE(I)))) - handled_by_bodytype = FALSE + handled_by_bodytype = TRUE icon_file = DEFAULT_HEAD_PATH head_overlay = I.build_worn_icon(default_layer = HEAD_LAYER, default_icon_file = icon_file, override_file = icon_file, isinhands = FALSE, mob_species = CHECK_USE_AUTOGEN, override_state = target_overlay) @@ -436,23 +468,29 @@ There are several things that need to be remembered: if(belt) var/obj/item/I = belt - var/mutable_appearance/belt_overlay update_hud_belt(I) - var/handled_by_bodytype + ///The final thing we overlay. Set on build_worn_icon. + var/mutable_appearance/belt_overlay + + ///icon file of the clothing var/icon_file = I.mob_overlay_icon + /// Does this clothing need to be generated via greyscale? + var/handled_by_bodytype = FALSE + + if((I.supports_variations & VOX_VARIATION) && (dna.species.bodytype & BODYTYPE_VOX)) icon_file = VOX_BELT_PATH if(I.vox_override_icon) icon_file = I.vox_override_icon - //if((I.supports_variations & KEPORI_VARIATION) && (dna.species.bodytype & BODYTYPE_KEPORI)) - //icon_file = KEPORI_BELT_PATH - //if(I.kepoi_override_icon) -// icon_file = I.kepoi_override_icon + if((I.supports_variations & KEPORI_VARIATION) && (dna.species.bodytype & BODYTYPE_KEPORI)) + icon_file = KEPORI_BELT_PATH + if(I.kepoi_override_icon) + icon_file = I.kepoi_override_icon if(!(icon_exists(icon_file, RESOLVE_ICON_STATE(I)))) - handled_by_bodytype = FALSE + handled_by_bodytype = TRUE icon_file = DEFAULT_BELT_PATH belt_overlay = I.build_worn_icon(default_layer = BELT_LAYER, default_icon_file = icon_file, override_file = icon_file, mob_species = CHECK_USE_AUTOGEN) @@ -474,12 +512,18 @@ There are several things that need to be remembered: if(wear_suit) var/obj/item/I = wear_suit - var/mutable_appearance/suit_overlay update_hud_wear_suit(I) + ///The final thing we overlay. Set on build_worn_icon. + var/mutable_appearance/suit_overlay + + ///icon file of the clothing var/icon_file = I.mob_overlay_icon + ///The icon state to overlay var/target_overlay = I.icon_state - var/handled_by_bodytype = TRUE + /// Does this clothing need to be generated via greyscale? + var/handled_by_bodytype = FALSE + if((dna.species.bodytype & BODYTYPE_DIGITIGRADE) && ((I.supports_variations & DIGITIGRADE_VARIATION) || (I.supports_variations & DIGITIGRADE_VARIATION_SAME_ICON_FILE))) icon_file = DIGITIGRADE_SUIT_PATH if((I.supports_variations & DIGITIGRADE_VARIATION_SAME_ICON_FILE)) @@ -497,7 +541,7 @@ There are several things that need to be remembered: icon_file = I.kepoi_override_icon if(!(icon_exists(icon_file, RESOLVE_ICON_STATE(I)))) - handled_by_bodytype = FALSE + handled_by_bodytype = TRUE icon_file = I.mob_overlay_icon suit_overlay = wear_suit.build_worn_icon(default_layer = SUIT_LAYER, override_file = icon_file, mob_species = CHECK_USE_AUTOGEN, override_state = target_overlay) @@ -546,10 +590,16 @@ There are several things that need to be remembered: if(wear_mask) var/obj/item/I = wear_mask update_hud_wear_mask(I) + ///The final thing we overlay. Set on build_worn_icon. var/mutable_appearance/mask_overlay + + ///icon file of the clothing var/icon_file = I.mob_overlay_icon + ///The icon state to overlay var/target_overlay = I.icon_state - var/handled_by_bodytype = TRUE + + /// Does this clothing need to be generated via greyscale? + var/handled_by_bodytype = FALSE if(!(ITEM_SLOT_MASK in check_obscured_slots())) var/obj/item/bodypart/head_bodypart = src.get_bodypart(BODY_ZONE_HEAD) @@ -568,7 +618,7 @@ There are several things that need to be remembered: if(!(icon_exists(icon_file, RESOLVE_ICON_STATE(I)))) icon_file = DEFAULT_MASK_PATH - handled_by_bodytype = FALSE + handled_by_bodytype = TRUE mask_overlay = I.build_worn_icon(default_layer = FACEMASK_LAYER, default_icon_file = icon_file, override_file = icon_file, mob_species = CHECK_USE_AUTOGEN, override_state = target_overlay) @@ -590,11 +640,13 @@ There are several things that need to be remembered: var/obj/item/I = wear_neck update_hud_neck(I) if(!(ITEM_SLOT_NECK in check_obscured_slots())) + ///icon file of the clothing var/icon_file = I.mob_overlay_icon - var/handled_by_bodytype = TRUE + /// Does this clothing need to be generated via greyscale? + var/handled_by_bodytype = FALSE if(!(icon_exists(icon_file, RESOLVE_ICON_STATE(I)))) - handled_by_bodytype = FALSE + handled_by_bodytype = TRUE icon_file = DEFAULT_NECK_PATH overlays_standing[NECK_LAYER] = wear_neck.build_worn_icon(default_layer = NECK_LAYER, default_icon_file = icon_file, override_file = icon_file, mob_species = CHECK_USE_AUTOGEN) @@ -611,16 +663,22 @@ There are several things that need to be remembered: if(back) var/obj/item/I = back - var/mutable_appearance/back_overlay update_hud_back(I) + ///The final thing we overlay. Set on build_worn_icon. + var/mutable_appearance/back_overlay + + ///icon file of the clothing var/icon_file = I.mob_overlay_icon - var/handled_by_bodytype = TRUE + + /// Does this clothing need to be generated via greyscale + var/handled_by_bodytype = FALSE + if((dna.species.bodytype & BODYTYPE_VOX) && (I.supports_variations & VOX_VARIATION)) icon_file = VOX_BACK_PATH if(!icon_exists(icon_file, RESOLVE_ICON_STATE(I))) icon_file = DEFAULT_BACK_PATH - handled_by_bodytype = FALSE + handled_by_bodytype = TRUE back_overlay = I.build_worn_icon(default_layer = BACK_LAYER, default_icon_file = icon_file, override_file = icon_file, isinhands = FALSE, override_file = icon_file, mob_species = CHECK_USE_AUTOGEN) @@ -768,6 +826,7 @@ in this situation default_icon_file is expected to match either the lefthand_ or ^this female part sucks and will be fully ripped out ideally */ +// Note: if handled_by_bodytype is TRUE before calling this, the CHECK_USE_AUTOGEN macro makes species use greyscale /obj/item/proc/build_worn_icon(default_layer = 0, default_icon_file = null, isinhands = FALSE, override_state = null, override_file = null, datum/species/mob_species = null, direction = null) // WS Edit Start - Worn Icon State diff --git a/icons/mob/species/kepori/onmob_ears_kepori.dmi b/icons/mob/species/kepori/onmob_ears_kepori.dmi new file mode 100644 index 0000000000000000000000000000000000000000..4a5a4ba7b32a424e1d1997c33d98c6cbc5e66041 GIT binary patch literal 184 zcmeAS@N?(olHy`uVBq!ia0vp^20*O9$P6U&q%z}y6mx)2h%1m@US)d=NHLZK`2{mL zJiCzw=P@u;%n1%FC@TH_CAi?@*C$%ux?1PXoDbd*YH-o` z!6TjXKAI;P3Uzi^7zY_&Huh?eNmkZNWev9%-@wN3shhuKN_zPkps_rjE{-7_Gm{e} Z?g4oZ7#Nx4F1rI+44$rjF6*2UngC^=H`D+C literal 0 HcmV?d00001 From 5969b9ec3dea133a7273d1be88a979297e0a6981 Mon Sep 17 00:00:00 2001 From: retlaw34 <58402542+retlaw34@users.noreply.github.com> Date: Sun, 26 May 2024 22:33:59 -0700 Subject: [PATCH 10/14] fuck --- .../carbon/human/species_types/kepori.dm | 29 +- .../living/carbon/human/species_types/vox.dm | 17 ++ .../mob/living/carbon/human/update_icons.dm | 287 ++++++++++++------ 3 files changed, 227 insertions(+), 106 deletions(-) diff --git a/code/modules/mob/living/carbon/human/species_types/kepori.dm b/code/modules/mob/living/carbon/human/species_types/kepori.dm index 3b384dc8d94b..5cc9b380792b 100644 --- a/code/modules/mob/living/carbon/human/species_types/kepori.dm +++ b/code/modules/mob/living/carbon/human/species_types/kepori.dm @@ -61,6 +61,7 @@ /datum/species/kepori/New() . = ..() + FACEMASK_LAYER // This is in new because "[HEAD_LAYER]" etc. is NOT a constant compile-time value. For some reason. // Why not just use HEAD_LAYER? Well, because HEAD_LAYER is a number, and if you try to use numbers as indexes, // BYOND will try to make it an ordered list. So, we have to use a string. This is annoying, but it's the only way to do it smoothly. @@ -72,18 +73,30 @@ "[WEST]" = list("x" = -3, "y" = -3) ), "[GLASSES_LAYER]" = list( - "[NORTH]" = list("x" = 0, "y" = -4), - "[EAST]" = list("x" = 4, "y" = -4), - "[SOUTH]" = list("x" = 0, "y" = -4), - "[WEST]" = list("x" = -4, "y" = -4) + "[NORTH]" = list("x" = 8, "y" = -3), + "[EAST]" = list("x" = 19, "y" = -3), + "[SOUTH]" = list("x" = 8, "y" = -3), + "[WEST]" = list("x" = -3, "y" = -3) ), "[FACEMASK_LAYER]" = list( - "[NORTH]" = list("x" = 0, "y" = -5), - "[EAST]" = list("x" = 4, "y" = -5), - "[SOUTH]" = list("x" = 0, "y" = -5), - "[WEST]" = list("x" = -4, "y" = -5) + "[NORTH]" = list("x" = 8, "y" = -3), + "[EAST]" = list("x" = 19, "y" = -3), + "[SOUTH]" = list("x" = 8, "y" = -3), + "[WEST]" = list("x" = -3, "y" = -3) ), "[BELT_LAYER]" = list( + "[NORTH]" = list("x" = 8, "y" = -1), + "[EAST]" = list("x" = 8, "y" = -1), + "[SOUTH]" = list("x" = 8, "y" = -1), + "[WEST]" = list("x" = 9, "y" = -1) + ), + "[EARS_LAYER]" = list( + "[NORTH]" = list("x" = 8, "y" = -3), + "[EAST]" = list("x" = 19, "y" = -3), + "[SOUTH]" = list("x" = 8, "y" = -3), + "[WEST]" = list("x" = -3, "y" = -3) + ), + "[SUIT_STORE_LAYER]" = list( "[NORTH]" = list("x" = 8, "y" = -1), "[EAST]" = list("x" = 8, "y" = -1), "[SOUTH]" = list("x" = 8, "y" = -1), diff --git a/code/modules/mob/living/carbon/human/species_types/vox.dm b/code/modules/mob/living/carbon/human/species_types/vox.dm index 24c766dec257..b9cc8306762e 100644 --- a/code/modules/mob/living/carbon/human/species_types/vox.dm +++ b/code/modules/mob/living/carbon/human/species_types/vox.dm @@ -67,6 +67,23 @@ /datum/species/vox/New() . = ..() + // This is in new because "[HEAD_LAYER]" etc. is NOT a constant compile-time value. For some reason. + // Why not just use HEAD_LAYER? Well, because HEAD_LAYER is a number, and if you try to use numbers as indexes, + // BYOND will try to make it an ordered list. So, we have to use a string. This is annoying, but it's the only way to do it smoothly. + offset_clothing = list( + "[SUIT_STORE_LAYER]" = list( + "[NORTH]" = list("x" = 8, "y" = 0), + "[EAST]" = list("x" = 8, "y" = 0), + "[SOUTH]" = list("x" = 8, "y" = 0), + "[WEST]" = list("x" = -8, "y" = 0) + ), + "[EARS_LAYER]" = list( + "[NORTH]" = list("x" = 8, "y" = 0), + "[EAST]" = list("x" = 8, "y" = 0), + "[SOUTH]" = list("x" = 8, "y" = 0), + "[WEST]" = list("x" = -8, "y" = 0) + ), + ) /datum/species/vox/random_name(gender,unique,lastname) if(unique) diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index a7325421038c..495f6f123be1 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -1,5 +1,4 @@ #define RESOLVE_ICON_STATE(I) (I.mob_overlay_state || I.icon_state) -#define CHECK_USE_AUTOGEN (handled_by_bodytype ? null : dna.species) //Is this gross overuse of macros? Yes. Fuck you. /////////////////////// //UPDATE_ICONS SYSTEM// @@ -140,22 +139,30 @@ There are several things that need to be remembered: icon_file = U.mob_overlay_icon target_overlay = "[target_overlay]_digi" - else if((dna.species.bodytype & BODYTYPE_VOX) && (U.supports_variations & VOX_VARIATION)) - icon_file = VOX_UNIFORM_PATH - if(U.vox_override_icon) - icon_file = U.vox_override_icon + else if(dna.species.bodytype & BODYTYPE_VOX) + if(U.supports_variations & VOX_VARIATION) + icon_file = VOX_UNIFORM_PATH + if(U.vox_override_icon) + icon_file = U.vox_override_icon + else + handled_by_bodytype = TRUE + + else if(dna.species.bodytype & BODYTYPE_KEPORI) + if(U.supports_variations & KEPORI_VARIATION) + icon_file = KEPORI_UNIFORM_PATH + if(U.kepoi_override_icon) + icon_file = U.kepoi_override_icon + else + handled_by_bodytype = TRUE - else if((dna.species.bodytype & BODYTYPE_KEPORI) && (U.supports_variations & KEPORI_VARIATION)) - icon_file = KEPORI_UNIFORM_PATH - if(U.kepoi_override_icon) - icon_file = U.kepoi_override_icon if(!(icon_exists(icon_file, RESOLVE_ICON_STATE(U)))) handled_by_bodytype = TRUE icon_file = U.mob_overlay_icon || DEFAULT_UNIFORM_PATH - - uniform_overlay = U.build_worn_icon(default_layer = UNIFORM_LAYER, default_icon_file = icon_file, override_file = icon_file, isinhands = FALSE, override_file = icon_file, override_state = target_overlay, mob_species = CHECK_USE_AUTOGEN) + var/use_autogen = handled_by_bodytype ? dna.species : null + message_admins("BODYTYPE [handled_by_bodytype] AUTOGEN [use_autogen]") + uniform_overlay = U.build_worn_icon(default_layer = UNIFORM_LAYER, default_icon_file = icon_file, override_file = icon_file, isinhands = FALSE, override_file = icon_file, override_state = target_overlay, mob_species = use_autogen) if(!uniform_overlay) return @@ -182,7 +189,9 @@ There are several things that need to be remembered: var/handled_by_bodytype //TODO: add an icon file for ID slot stuff, so it's less snowflakey - id_overlay = I.build_worn_icon(default_layer = ID_LAYER, default_icon_file = 'icons/mob/mob.dmi', mob_species = CHECK_USE_AUTOGEN) + var/use_autogen = handled_by_bodytype ? dna.species : null + message_admins("BODYTYPE [handled_by_bodytype] AUTOGEN [use_autogen]") + id_overlay = I.build_worn_icon(default_layer = ID_LAYER, default_icon_file = 'icons/mob/mob.dmi', mob_species = use_autogen) if(!id_overlay) return @@ -225,21 +234,29 @@ There are several things that need to be remembered: /// Does this clothing need to be generated via greyscale? var/handled_by_bodytype = FALSE - if((dna.species.bodytype & BODYTYPE_VOX) && (I.supports_variations & VOX_VARIATION)) - icon_file = VOX_GLOVES_PATH - if(I.vox_override_icon) - icon_file = I.vox_override_icon + if(dna.species.bodytype & BODYTYPE_VOX) + if(I.supports_variations & VOX_VARIATION) + icon_file = VOX_GLOVES_PATH + if(I.vox_override_icon) + icon_file = I.vox_override_icon + else + handled_by_bodytype = TRUE - if((dna.species.bodytype & BODYTYPE_KEPORI) && (I.supports_variations & KEPORI_VARIATION)) - icon_file = KEPORI_GLOVES_PATH - if(I.kepoi_override_icon) - icon_file = I.kepoi_override_icon + else if(dna.species.bodytype & BODYTYPE_KEPORI) + if(I.supports_variations & KEPORI_VARIATION) + icon_file = KEPORI_GLOVES_PATH + if(I.kepoi_override_icon) + icon_file = I.kepoi_override_icon + else + handled_by_bodytype = TRUE if(!(icon_exists(icon_file, RESOLVE_ICON_STATE(I)))) handled_by_bodytype = TRUE icon_file = DEFAULT_GLOVES_PATH - gloves_overlay = I.build_worn_icon(default_layer = GLOVES_LAYER, default_icon_file = icon_file, override_file = icon_file, mob_species = CHECK_USE_AUTOGEN) + var/use_autogen = handled_by_bodytype ? dna.species : null + message_admins("BODYTYPE [handled_by_bodytype] AUTOGEN [use_autogen]") + gloves_overlay = I.build_worn_icon(default_layer = GLOVES_LAYER, default_icon_file = icon_file, override_file = icon_file, mob_species = use_autogen) if(!gloves_overlay) return @@ -270,21 +287,29 @@ There are several things that need to be remembered: /// Does this clothing need to be generated via greyscale? var/handled_by_bodytype = FALSE - if((dna.species.bodytype & BODYTYPE_VOX) && (I.supports_variations & VOX_VARIATION)) - icon_file = VOX_GLASSES_PATH - if(I.vox_override_icon) - icon_file = I.vox_override_icon - - if((dna.species.bodytype & BODYTYPE_KEPORI) && (I.supports_variations & KEPORI_VARIATION)) - icon_file = KEPORI_GLASSES_PATH - if(I.kepoi_override_icon) - icon_file = I.kepoi_override_icon + if(dna.species.bodytype & BODYTYPE_VOX) + if(I.supports_variations & VOX_VARIATION) + icon_file = VOX_GLASSES_PATH + if(I.vox_override_icon) + icon_file = I.vox_override_icon + else + handled_by_bodytype = TRUE + + else if(dna.species.bodytype & BODYTYPE_KEPORI) + if(I.supports_variations & KEPORI_VARIATION) + icon_file = KEPORI_GLASSES_PATH + if(I.kepoi_override_icon) + icon_file = I.kepoi_override_icon + else + handled_by_bodytype = TRUE if(!(icon_exists(icon_file, RESOLVE_ICON_STATE(I)))) handled_by_bodytype = TRUE icon_file = DEFAULT_GLASSES_PATH - glasses_overlay = I.build_worn_icon(default_layer = GLASSES_LAYER, default_icon_file = icon_file, override_file = icon_file, mob_species = CHECK_USE_AUTOGEN) + var/use_autogen = handled_by_bodytype ? dna.species : null + message_admins("BODYTYPE [handled_by_bodytype] AUTOGEN [use_autogen]") + glasses_overlay = I.build_worn_icon(default_layer = GLASSES_LAYER, default_icon_file = icon_file, override_file = icon_file, mob_species = use_autogen) if(!glasses_overlay) return @@ -314,21 +339,29 @@ There are several things that need to be remembered: /// Does this clothing need to be generated via greyscale? var/handled_by_bodytype = FALSE - if((dna.species.bodytype & BODYTYPE_VOX) && (I.supports_variations & VOX_VARIATION)) - icon_file = VOX_EARS_PATH - if(I.vox_override_icon) - icon_file = I.vox_override_icon + if(dna.species.bodytype & BODYTYPE_VOX) + if(I.supports_variations & VOX_VARIATION) + icon_file = VOX_EARS_PATH + if(I.vox_override_icon) + icon_file = I.vox_override_icon + else + handled_by_bodytype = TRUE - if((dna.species.bodytype & BODYTYPE_KEPORI) && (I.supports_variations & KEPORI_VARIATION)) - icon_file = KEPORI_EARS_PATH - if(I.kepoi_override_icon) - icon_file = I.kepoi_override_icon + else if(dna.species.bodytype & BODYTYPE_KEPORI) + if(I.supports_variations & KEPORI_VARIATION) + icon_file = KEPORI_EARS_PATH + if(I.kepoi_override_icon) + icon_file = I.kepoi_override_icon + else + handled_by_bodytype = TRUE if(!(icon_exists(icon_file, RESOLVE_ICON_STATE(I)))) handled_by_bodytype = TRUE icon_file = DEFAULT_EARS_PATH - ears_overlay = I.build_worn_icon(default_layer = EARS_LAYER, override_file = icon_file, mob_species = CHECK_USE_AUTOGEN) + var/use_autogen = handled_by_bodytype ? dna.species : null + message_admins("BODYTYPE [handled_by_bodytype] AUTOGEN [use_autogen]") + ears_overlay = I.build_worn_icon(default_layer = EARS_LAYER, override_file = icon_file, mob_species = use_autogen) if(!ears_overlay) return @@ -368,21 +401,29 @@ There are several things that need to be remembered: icon_file = I.mob_overlay_icon target_overlay = "[target_overlay]_digi" - if((dna.species.bodytype & BODYTYPE_VOX) && (I.supports_variations & VOX_VARIATION)) - icon_file = VOX_SHOES_PATH - if(I.vox_override_icon) - icon_file = I.vox_override_icon + else if(dna.species.bodytype & BODYTYPE_VOX) + if(I.supports_variations & VOX_VARIATION) + icon_file = VOX_SHOES_PATH + if(I.vox_override_icon) + icon_file = I.vox_override_icon + else + handled_by_bodytype = TRUE - if((dna.species.bodytype & BODYTYPE_KEPORI) && (I.supports_variations & KEPORI_VARIATION)) - icon_file = KEPORI_SHOES_PATH - if(I.kepoi_override_icon) - icon_file = I.kepoi_override_icon + else if(dna.species.bodytype & BODYTYPE_KEPORI) + if(I.supports_variations & KEPORI_VARIATION) + icon_file = KEPORI_SHOES_PATH + if(I.kepoi_override_icon) + icon_file = I.kepoi_override_icon + else + handled_by_bodytype = TRUE if(!(icon_exists(icon_file, RESOLVE_ICON_STATE(I)))) handled_by_bodytype = TRUE icon_file = DEFAULT_SHOES_PATH - shoes_overlay = I.build_worn_icon(default_layer = SHOES_LAYER, default_icon_file = icon_file, override_file = icon_file, isinhands = FALSE, mob_species = CHECK_USE_AUTOGEN, override_state = target_overlay) + var/use_autogen = handled_by_bodytype ? dna.species : null + message_admins("BODYTYPE [handled_by_bodytype] AUTOGEN [use_autogen]") + shoes_overlay = I.build_worn_icon(default_layer = SHOES_LAYER, default_icon_file = icon_file, override_file = icon_file, isinhands = FALSE, mob_species = use_autogen, override_state = target_overlay) if(!shoes_overlay) return @@ -436,21 +477,29 @@ There are several things that need to be remembered: if((head_bodypart.bodytype & BODYTYPE_SNOUT) && (I.supports_variations & SNOUTED_VARIATION)) target_overlay = "[target_overlay]_snouted" - if((dna.species.bodytype & BODYTYPE_VOX) && (I.supports_variations & VOX_VARIATION)) - icon_file = VOX_HEAD_PATH - if(I.vox_override_icon) - icon_file = I.vox_override_icon + else if(dna.species.bodytype & BODYTYPE_VOX) + if(I.supports_variations & VOX_VARIATION) + icon_file = VOX_HEAD_PATH + if(I.vox_override_icon) + icon_file = I.vox_override_icon + else + handled_by_bodytype = TRUE - if((dna.species.bodytype & BODYTYPE_KEPORI) && (I.supports_variations & KEPORI_VARIATION)) - icon_file = KEPORI_HEAD_PATH - if(I.kepoi_override_icon) - icon_file = I.kepoi_override_icon + else if(dna.species.bodytype & BODYTYPE_KEPORI) + if(I.supports_variations & KEPORI_VARIATION) + icon_file = KEPORI_HEAD_PATH + if(I.kepoi_override_icon) + icon_file = I.kepoi_override_icon + else + handled_by_bodytype = TRUE if(!(icon_exists(icon_file, RESOLVE_ICON_STATE(I)))) handled_by_bodytype = TRUE icon_file = DEFAULT_HEAD_PATH - head_overlay = I.build_worn_icon(default_layer = HEAD_LAYER, default_icon_file = icon_file, override_file = icon_file, isinhands = FALSE, mob_species = CHECK_USE_AUTOGEN, override_state = target_overlay) + var/use_autogen = handled_by_bodytype ? dna.species : null + message_admins("BODYTYPE [handled_by_bodytype] AUTOGEN [use_autogen]") + head_overlay = I.build_worn_icon(default_layer = HEAD_LAYER, default_icon_file = icon_file, override_file = icon_file, isinhands = FALSE, mob_species = use_autogen, override_state = target_overlay) if(!head_overlay) return @@ -479,21 +528,29 @@ There are several things that need to be remembered: var/handled_by_bodytype = FALSE - if((I.supports_variations & VOX_VARIATION) && (dna.species.bodytype & BODYTYPE_VOX)) - icon_file = VOX_BELT_PATH - if(I.vox_override_icon) - icon_file = I.vox_override_icon + if(dna.species.bodytype & BODYTYPE_VOX) + if(I.supports_variations & VOX_VARIATION) + icon_file = VOX_BELT_PATH + if(I.vox_override_icon) + icon_file = I.vox_override_icon + else + handled_by_bodytype = TRUE - if((I.supports_variations & KEPORI_VARIATION) && (dna.species.bodytype & BODYTYPE_KEPORI)) - icon_file = KEPORI_BELT_PATH - if(I.kepoi_override_icon) - icon_file = I.kepoi_override_icon + else if(dna.species.bodytype & BODYTYPE_KEPORI) + if(I.supports_variations & KEPORI_VARIATION) + icon_file = KEPORI_BELT_PATH + if(I.kepoi_override_icon) + icon_file = I.kepoi_override_icon + else + handled_by_bodytype = TRUE if(!(icon_exists(icon_file, RESOLVE_ICON_STATE(I)))) handled_by_bodytype = TRUE icon_file = DEFAULT_BELT_PATH - belt_overlay = I.build_worn_icon(default_layer = BELT_LAYER, default_icon_file = icon_file, override_file = icon_file, mob_species = CHECK_USE_AUTOGEN) + var/use_autogen = handled_by_bodytype ? dna.species : null + message_admins("BODYTYPE [handled_by_bodytype] AUTOGEN [use_autogen]") + belt_overlay = I.build_worn_icon(default_layer = BELT_LAYER, default_icon_file = icon_file, override_file = icon_file, mob_species = use_autogen) if(!belt_overlay) return @@ -530,21 +587,29 @@ There are several things that need to be remembered: icon_file = I.mob_overlay_icon target_overlay = "[target_overlay]_digi" - else if((dna.species.bodytype & BODYTYPE_VOX) && (I.supports_variations & VOX_VARIATION)) - icon_file = VOX_SUIT_PATH - if(I.vox_override_icon) - icon_file = I.vox_override_icon + else if(dna.species.bodytype & BODYTYPE_VOX) + if(I.supports_variations & VOX_VARIATION) + icon_file = VOX_SUIT_PATH + if(I.vox_override_icon) + icon_file = I.vox_override_icon + else + handled_by_bodytype = TRUE - else if((dna.species.bodytype & BODYTYPE_KEPORI) && (I.supports_variations & KEPORI_VARIATION)) - icon_file = KEPORI_SUIT_PATH - if(I.kepoi_override_icon) - icon_file = I.kepoi_override_icon + else if(dna.species.bodytype & BODYTYPE_KEPORI) + if(I.supports_variations & KEPORI_VARIATION) + icon_file = KEPORI_SUIT_PATH + if(I.kepoi_override_icon) + icon_file = I.kepoi_override_icon + else + handled_by_bodytype = TRUE if(!(icon_exists(icon_file, RESOLVE_ICON_STATE(I)))) handled_by_bodytype = TRUE icon_file = I.mob_overlay_icon - suit_overlay = wear_suit.build_worn_icon(default_layer = SUIT_LAYER, override_file = icon_file, mob_species = CHECK_USE_AUTOGEN, override_state = target_overlay) + var/use_autogen = handled_by_bodytype ? dna.species : null + message_admins("BODYTYPE [handled_by_bodytype] AUTOGEN [use_autogen]") + suit_overlay = wear_suit.build_worn_icon(default_layer = SUIT_LAYER, override_file = icon_file, mob_species = use_autogen, override_state = target_overlay) if(!suit_overlay) return @@ -606,21 +671,29 @@ There are several things that need to be remembered: if((head_bodypart.bodytype & BODYTYPE_SNOUT) && (I.supports_variations & SNOUTED_VARIATION)) target_overlay = "[target_overlay]_snouted" - if((dna.species.bodytype & BODYTYPE_VOX) && (I.supports_variations & VOX_VARIATION)) - icon_file = VOX_MASK_PATH - if(I.vox_override_icon) - icon_file = I.vox_override_icon - - if((dna.species.bodytype & BODYTYPE_KEPORI) && (I.supports_variations & KEPORI_VARIATION)) - icon_file = KEPORI_MASK_PATH - if(I.kepoi_override_icon) - icon_file = I.kepoi_override_icon + if(dna.species.bodytype & BODYTYPE_VOX) + if(I.supports_variations & VOX_VARIATION) + icon_file = VOX_MASK_PATH + if(I.vox_override_icon) + icon_file = I.vox_override_icon + else + handled_by_bodytype = TRUE + + else if(dna.species.bodytype & BODYTYPE_KEPORI) + if(I.supports_variations & KEPORI_VARIATION) + icon_file = KEPORI_MASK_PATH + if(I.kepoi_override_icon) + icon_file = I.kepoi_override_icon + else + handled_by_bodytype = TRUE if(!(icon_exists(icon_file, RESOLVE_ICON_STATE(I)))) icon_file = DEFAULT_MASK_PATH handled_by_bodytype = TRUE - mask_overlay = I.build_worn_icon(default_layer = FACEMASK_LAYER, default_icon_file = icon_file, override_file = icon_file, mob_species = CHECK_USE_AUTOGEN, override_state = target_overlay) + var/use_autogen = handled_by_bodytype ? dna.species : null + message_admins("BODYTYPE [handled_by_bodytype] AUTOGEN [use_autogen]") + mask_overlay = I.build_worn_icon(default_layer = FACEMASK_LAYER, default_icon_file = icon_file, override_file = icon_file, mob_species = use_autogen, override_state = target_overlay) if(!mask_overlay) return @@ -648,8 +721,12 @@ There are several things that need to be remembered: if(!(icon_exists(icon_file, RESOLVE_ICON_STATE(I)))) handled_by_bodytype = TRUE icon_file = DEFAULT_NECK_PATH + else + handled_by_bodytype = FALSE - overlays_standing[NECK_LAYER] = wear_neck.build_worn_icon(default_layer = NECK_LAYER, default_icon_file = icon_file, override_file = icon_file, mob_species = CHECK_USE_AUTOGEN) + var/use_autogen = handled_by_bodytype ? dna.species : null + message_admins("BODYTYPE [handled_by_bodytype] AUTOGEN [use_autogen]") + overlays_standing[NECK_LAYER] = wear_neck.build_worn_icon(default_layer = NECK_LAYER, default_icon_file = icon_file, override_file = icon_file, mob_species = use_autogen) apply_overlay(NECK_LAYER) @@ -673,19 +750,33 @@ There are several things that need to be remembered: /// Does this clothing need to be generated via greyscale var/handled_by_bodytype = FALSE - if((dna.species.bodytype & BODYTYPE_VOX) && (I.supports_variations & VOX_VARIATION)) - icon_file = VOX_BACK_PATH + if(!back_overlay) + if(dna.species.bodytype & BODYTYPE_VOX) + if(I.supports_variations & VOX_VARIATION) + icon_file = VOX_BACK_PATH + else + handled_by_bodytype = TRUE + + else if(dna.species.bodytype & BODYTYPE_KEPORI) +// if(I.supports_variations & KEPORI_VARIATION) +// icon_file = KEPORI_BACK_PATH +// else + handled_by_bodytype = TRUE - if(!icon_exists(icon_file, RESOLVE_ICON_STATE(I))) - icon_file = DEFAULT_BACK_PATH - handled_by_bodytype = TRUE + if(!icon_exists(icon_file, RESOLVE_ICON_STATE(I))) + icon_file = DEFAULT_BACK_PATH + handled_by_bodytype = TRUE - back_overlay = I.build_worn_icon(default_layer = BACK_LAYER, default_icon_file = icon_file, override_file = icon_file, isinhands = FALSE, override_file = icon_file, mob_species = CHECK_USE_AUTOGEN) + var/use_autogen = handled_by_bodytype ? dna.species : null + message_admins("BODYTYPE [handled_by_bodytype] AUTOGEN [use_autogen]") + back_overlay = I.build_worn_icon(default_layer = BACK_LAYER, default_icon_file = icon_file, override_file = icon_file, isinhands = FALSE, override_file = icon_file, mob_species = use_autogen) - if(!back_overlay) - return - overlays_standing[BACK_LAYER] = back_overlay - apply_overlay(BACK_LAYER) + if(!back_overlay) + return + overlays_standing[BACK_LAYER] = back_overlay + + if(back_overlay) //This is faster fuck you + apply_overlay(BACK_LAYER) /mob/living/carbon/human/update_inv_legcuffed() remove_overlay(LEGCUFF_LAYER) @@ -826,7 +917,7 @@ in this situation default_icon_file is expected to match either the lefthand_ or ^this female part sucks and will be fully ripped out ideally */ -// Note: if handled_by_bodytype is TRUE before calling this, the CHECK_USE_AUTOGEN macro makes species use greyscale +// Note: if handled_by_bodytype is TRUE before calling this, it makes species use greyscale /obj/item/proc/build_worn_icon(default_layer = 0, default_icon_file = null, isinhands = FALSE, override_state = null, override_file = null, datum/species/mob_species = null, direction = null) // WS Edit Start - Worn Icon State From 0f63d533874b802429fb66575f7e169b06c54a7b Mon Sep 17 00:00:00 2001 From: retlaw34 <58402542+retlaw34@users.noreply.github.com> Date: Sun, 26 May 2024 22:40:14 -0700 Subject: [PATCH 11/14] OH(UIJK*GY ^F& --- code/modules/mob/living/carbon/human/species_types/kepori.dm | 1 - 1 file changed, 1 deletion(-) diff --git a/code/modules/mob/living/carbon/human/species_types/kepori.dm b/code/modules/mob/living/carbon/human/species_types/kepori.dm index 5cc9b380792b..3278d3d77c1e 100644 --- a/code/modules/mob/living/carbon/human/species_types/kepori.dm +++ b/code/modules/mob/living/carbon/human/species_types/kepori.dm @@ -61,7 +61,6 @@ /datum/species/kepori/New() . = ..() - FACEMASK_LAYER // This is in new because "[HEAD_LAYER]" etc. is NOT a constant compile-time value. For some reason. // Why not just use HEAD_LAYER? Well, because HEAD_LAYER is a number, and if you try to use numbers as indexes, // BYOND will try to make it an ordered list. So, we have to use a string. This is annoying, but it's the only way to do it smoothly. From 8e572e6984473084349aa5a5ca2bfd897e45d5ff Mon Sep 17 00:00:00 2001 From: retlaw34 <58402542+retlaw34@users.noreply.github.com> Date: Sun, 26 May 2024 22:50:20 -0700 Subject: [PATCH 12/14] removes debugging helpers --- code/modules/mob/living/carbon/human/update_icons.dm | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index 495f6f123be1..d5562e6c0c45 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -161,7 +161,6 @@ There are several things that need to be remembered: icon_file = U.mob_overlay_icon || DEFAULT_UNIFORM_PATH var/use_autogen = handled_by_bodytype ? dna.species : null - message_admins("BODYTYPE [handled_by_bodytype] AUTOGEN [use_autogen]") uniform_overlay = U.build_worn_icon(default_layer = UNIFORM_LAYER, default_icon_file = icon_file, override_file = icon_file, isinhands = FALSE, override_file = icon_file, override_state = target_overlay, mob_species = use_autogen) if(!uniform_overlay) @@ -190,7 +189,6 @@ There are several things that need to be remembered: //TODO: add an icon file for ID slot stuff, so it's less snowflakey var/use_autogen = handled_by_bodytype ? dna.species : null - message_admins("BODYTYPE [handled_by_bodytype] AUTOGEN [use_autogen]") id_overlay = I.build_worn_icon(default_layer = ID_LAYER, default_icon_file = 'icons/mob/mob.dmi', mob_species = use_autogen) if(!id_overlay) @@ -255,7 +253,6 @@ There are several things that need to be remembered: icon_file = DEFAULT_GLOVES_PATH var/use_autogen = handled_by_bodytype ? dna.species : null - message_admins("BODYTYPE [handled_by_bodytype] AUTOGEN [use_autogen]") gloves_overlay = I.build_worn_icon(default_layer = GLOVES_LAYER, default_icon_file = icon_file, override_file = icon_file, mob_species = use_autogen) if(!gloves_overlay) @@ -308,7 +305,6 @@ There are several things that need to be remembered: icon_file = DEFAULT_GLASSES_PATH var/use_autogen = handled_by_bodytype ? dna.species : null - message_admins("BODYTYPE [handled_by_bodytype] AUTOGEN [use_autogen]") glasses_overlay = I.build_worn_icon(default_layer = GLASSES_LAYER, default_icon_file = icon_file, override_file = icon_file, mob_species = use_autogen) if(!glasses_overlay) @@ -360,7 +356,6 @@ There are several things that need to be remembered: icon_file = DEFAULT_EARS_PATH var/use_autogen = handled_by_bodytype ? dna.species : null - message_admins("BODYTYPE [handled_by_bodytype] AUTOGEN [use_autogen]") ears_overlay = I.build_worn_icon(default_layer = EARS_LAYER, override_file = icon_file, mob_species = use_autogen) if(!ears_overlay) @@ -422,7 +417,6 @@ There are several things that need to be remembered: icon_file = DEFAULT_SHOES_PATH var/use_autogen = handled_by_bodytype ? dna.species : null - message_admins("BODYTYPE [handled_by_bodytype] AUTOGEN [use_autogen]") shoes_overlay = I.build_worn_icon(default_layer = SHOES_LAYER, default_icon_file = icon_file, override_file = icon_file, isinhands = FALSE, mob_species = use_autogen, override_state = target_overlay) if(!shoes_overlay) @@ -498,7 +492,6 @@ There are several things that need to be remembered: icon_file = DEFAULT_HEAD_PATH var/use_autogen = handled_by_bodytype ? dna.species : null - message_admins("BODYTYPE [handled_by_bodytype] AUTOGEN [use_autogen]") head_overlay = I.build_worn_icon(default_layer = HEAD_LAYER, default_icon_file = icon_file, override_file = icon_file, isinhands = FALSE, mob_species = use_autogen, override_state = target_overlay) if(!head_overlay) @@ -549,7 +542,6 @@ There are several things that need to be remembered: icon_file = DEFAULT_BELT_PATH var/use_autogen = handled_by_bodytype ? dna.species : null - message_admins("BODYTYPE [handled_by_bodytype] AUTOGEN [use_autogen]") belt_overlay = I.build_worn_icon(default_layer = BELT_LAYER, default_icon_file = icon_file, override_file = icon_file, mob_species = use_autogen) if(!belt_overlay) @@ -608,7 +600,6 @@ There are several things that need to be remembered: icon_file = I.mob_overlay_icon var/use_autogen = handled_by_bodytype ? dna.species : null - message_admins("BODYTYPE [handled_by_bodytype] AUTOGEN [use_autogen]") suit_overlay = wear_suit.build_worn_icon(default_layer = SUIT_LAYER, override_file = icon_file, mob_species = use_autogen, override_state = target_overlay) if(!suit_overlay) @@ -692,7 +683,6 @@ There are several things that need to be remembered: handled_by_bodytype = TRUE var/use_autogen = handled_by_bodytype ? dna.species : null - message_admins("BODYTYPE [handled_by_bodytype] AUTOGEN [use_autogen]") mask_overlay = I.build_worn_icon(default_layer = FACEMASK_LAYER, default_icon_file = icon_file, override_file = icon_file, mob_species = use_autogen, override_state = target_overlay) if(!mask_overlay) @@ -725,7 +715,6 @@ There are several things that need to be remembered: handled_by_bodytype = FALSE var/use_autogen = handled_by_bodytype ? dna.species : null - message_admins("BODYTYPE [handled_by_bodytype] AUTOGEN [use_autogen]") overlays_standing[NECK_LAYER] = wear_neck.build_worn_icon(default_layer = NECK_LAYER, default_icon_file = icon_file, override_file = icon_file, mob_species = use_autogen) @@ -768,7 +757,6 @@ There are several things that need to be remembered: handled_by_bodytype = TRUE var/use_autogen = handled_by_bodytype ? dna.species : null - message_admins("BODYTYPE [handled_by_bodytype] AUTOGEN [use_autogen]") back_overlay = I.build_worn_icon(default_layer = BACK_LAYER, default_icon_file = icon_file, override_file = icon_file, isinhands = FALSE, override_file = icon_file, mob_species = use_autogen) if(!back_overlay) From eb9f7f2f88c4749276c30102c3464748cfbe7de1 Mon Sep 17 00:00:00 2001 From: CoreyLee Hassell Date: Mon, 27 May 2024 03:46:31 -0400 Subject: [PATCH 13/14] edited prefs layout to show missing preferences that may or may not show depending on species (ex phobias and character adjective missing for kepori) --- code/modules/client/preferences.dm | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 1e230f586f2b..9cafaa753f69 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -244,7 +244,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) return #define APPEARANCE_CATEGORY_COLUMN "" -#define MAX_MUTANT_ROWS 4 +#define MAX_MUTANT_ROWS 5 /datum/preferences/proc/ShowChoices(mob/user) show_loadout = (current_tab != 1) ? show_loadout : FALSE @@ -849,10 +849,17 @@ GLOBAL_LIST_EMPTY(preferences_datums) //Adds a thing to select which phobia because I can't be assed to put that in the quirks window if("Phobia" in all_quirks) + if(!mutant_category) + dat += APPEARANCE_CATEGORY_COLUMN dat += "

Phobia

" dat += "[phobia]
" + mutant_category++ + if(mutant_category >= MAX_MUTANT_ROWS) + dat += "" + mutant_category = 0 + if("body_size" in pref_species.default_features) if(!mutant_category) dat += APPEARANCE_CATEGORY_COLUMN @@ -861,6 +868,14 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "[features["body_size"]]
" + mutant_category++ + if(mutant_category >= MAX_MUTANT_ROWS) + dat += "" + mutant_category = 0 + + if(generic_adjective) + if(!mutant_category) + dat += APPEARANCE_CATEGORY_COLUMN dat += "

Character Adjective

" From 322ee00ac1ae504bb8785633b62cc48bdf81ce8f Mon Sep 17 00:00:00 2001 From: retlaw34 <58402542+retlaw34@users.noreply.github.com> Date: Fri, 7 Jun 2024 13:31:12 -0700 Subject: [PATCH 14/14] fixes neck --- .../mob/living/carbon/human/update_icons.dm | 40 +++++++++++++++---- 1 file changed, 33 insertions(+), 7 deletions(-) diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index d5562e6c0c45..beecda12b083 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -701,22 +701,48 @@ There are several things that need to be remembered: if(wear_neck) var/obj/item/I = wear_neck + ///The final thing we overlay. Set on build_worn_icon. + var/mutable_appearance/neck_overlay + + ///icon file of the clothing + var/icon_file = I.mob_overlay_icon + ///The icon state to overlay + var/target_overlay = I.icon_state + + /// Does this clothing need to be generated via greyscale? + var/handled_by_bodytype = FALSE + + update_hud_neck(I) if(!(ITEM_SLOT_NECK in check_obscured_slots())) - ///icon file of the clothing - var/icon_file = I.mob_overlay_icon - /// Does this clothing need to be generated via greyscale? - var/handled_by_bodytype = FALSE + + if(dna.species.bodytype & BODYTYPE_VOX) // there is neither a vox or kepori neck path, we just tell it to greyscale no matter what +// if(I.supports_variations & VOX_VARIATION) +// icon_file = VOX_NECK_PATH +// if(I.vox_override_icon) +// icon_file = I.vox_override_icon +// else + handled_by_bodytype = TRUE + + else if(dna.species.bodytype & BODYTYPE_KEPORI) +// if(I.supports_variations & KEPORI_VARIATION) +// icon_file = KEPORI_NECK_PATH +// if(I.kepoi_override_icon) +// icon_file = I.kepoi_override_icon +// else + handled_by_bodytype = TRUE if(!(icon_exists(icon_file, RESOLVE_ICON_STATE(I)))) handled_by_bodytype = TRUE icon_file = DEFAULT_NECK_PATH - else - handled_by_bodytype = FALSE var/use_autogen = handled_by_bodytype ? dna.species : null - overlays_standing[NECK_LAYER] = wear_neck.build_worn_icon(default_layer = NECK_LAYER, default_icon_file = icon_file, override_file = icon_file, mob_species = use_autogen) + neck_overlay = I.build_worn_icon(default_layer = NECK_LAYER, default_icon_file = icon_file, override_file = icon_file, isinhands = FALSE, mob_species = use_autogen, override_state = target_overlay) + + if(!neck_overlay) + return + overlays_standing[NECK_LAYER] = neck_overlay apply_overlay(NECK_LAYER)