Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Vox Race #977

Closed
wants to merge 14 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 14 additions & 1 deletion code/__DEFINES/DNA.dm
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@
#define DNA_UNI_IDENTITY_BLOCKS 7

/// This number needs to equal the total number of DNA blocks
#define DNA_FEATURE_BLOCKS 16
#define DNA_FEATURE_BLOCKS 22

#define DNA_MUTANT_COLOR_BLOCK 1
#define DNA_ETHEREAL_COLOR_BLOCK 2
Expand All @@ -58,6 +58,12 @@
#define DNA_MUSHROOM_CAPS_BLOCK 14
#define DNA_POD_HAIR_BLOCK 15
#define DNA_MUTANT_COLOR_SECONDARY 16
#define DNA_MUTANT_COLOR_TERTIARY 17
#define DNA_VOX_HAIR_BLOCK 18
#define DNA_VOX_FACIAL_HAIR_BLOCK 19
#define DNA_VOX_SPINES_BLOCK 20
#define DNA_VOX_BODY_MARKINGS_BLOCK 21
#define DNA_VOX_SKIN_TONE_BLOCK 22

#define DNA_SEQUENCE_LENGTH 4
#define DNA_MUTATION_BLOCKS 8
Expand Down Expand Up @@ -100,6 +106,10 @@
#define NOHUSK 24
#define NOMOUTH 25

#define MUTCOLORS_TERTIARY 26
#define HAIRCOLOR 27
#define FACEHAIRCOLOR 28

//organ slots
#define ORGAN_SLOT_ADAMANTINE_RESONATOR "adamantine_resonator"
#define ORGAN_SLOT_APPENDIX "appendix"
Expand Down Expand Up @@ -141,6 +151,9 @@
#define ORGAN_SLOT_EXTERNAL_ANIME_CHEST "anime_chest"
#define ORGAN_SLOT_EXTERNAL_ANIME_BOTTOM "anime_bottom"
#define ORGAN_SLOT_EXTERNAL_FLORAN_LEAVES "floran_leaves"
#define ORGAN_SLOT_EXTERNAL_VOX_HAIR "vox_hair"
#define ORGAN_SLOT_EXTERNAL_VOX_FACIAL_HAIR "vox_facial_hair"
#define ORGAN_SLOT_EXTERNAL_BEAK "beak"

/// Xenomorph organ slots
#define ORGAN_SLOT_XENO_ACIDGLAND "acid_gland"
Expand Down
3 changes: 3 additions & 0 deletions code/__DEFINES/external_organs.dm
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,9 @@
#define ORGAN_COLOR_ANIME (1<<3)
///uses the parents mutcolor secondary
#define ORGAN_COLOR_MUTSECONDARY (1<<4)
///uses the parents mutcolor tertiary
#define ORGAN_COLOR_MUTTERTIARY (1<<5)
#define ORGAN_COLOR_FACIAL_HAIR (1<<6)

///Tail wagging
#define WAG_ABLE (1<<0)
Expand Down
2 changes: 2 additions & 0 deletions code/__DEFINES/inventory.dm
Original file line number Diff line number Diff line change
Expand Up @@ -139,6 +139,8 @@
#define CLOTHING_MONKEY_VARIATION (1<<3)
///Has a sprite for snouted heads specifically.
#define CLOTHING_SNOUTED_VARIATION (1<<4)
///Has a sprite for voxes specifically.
#define CLOTHING_VOX_VARIATION (1<<5)

//flags for covering body parts
#define GLASSESCOVERSEYES (1<<0)
Expand Down
1 change: 1 addition & 0 deletions code/__DEFINES/is_helpers.dm
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,7 @@ GLOBAL_LIST_INIT(turfs_openspace, typecacheof(list(
#define islizard(A) (is_species(A, /datum/species/lizard))
#define isashwalker(A) (is_species(A, /datum/species/lizard/ashwalker))
#define isplasmaman(A) (is_species(A, /datum/species/plasmaman))
#define isvox(A) (is_species(A, /datum/species/vox))
#define issimian(A) (is_species(A, /datum/species/simian)) //Monkestation Addition
#define ispodperson(A) (is_species(A, /datum/species/pod))
#define isflyperson(A) (is_species(A, /datum/species/fly))
Expand Down
7 changes: 7 additions & 0 deletions code/__DEFINES/mobs.dm
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,12 @@
#define BODYTYPE_ALIEN (1<<7)
///The limb fits a modular custom shape
#define BODYTYPE_CUSTOM (1<<8)
///The limb is voxed
#define BODYTYPE_VOX_BEAK (1<<9)
///The limb is in the shape of a vox leg.
#define BODYTYPE_VOX_LEGS (1<<10)
///Vox limb that isnt a head or legs.
#define BODYTYPE_VOX_OTHER (1<<11)

//Species gib types
#define GIB_TYPE_HUMAN "human"
Expand Down Expand Up @@ -128,6 +134,7 @@
#define SPECIES_ZOMBIE_KROKODIL "krokodil_zombie"
#define SPECIES_OOZELING "oozeling"
#define SPECIES_IPC "ipc"
#define SPECIES_VOX "vox"
#define SPECIES_SIMIAN "simian" //Monkestation Addition
#define SPECIES_GOBLIN "goblin" //Monkestation Addition
#define SPECIES_FLORAN "floran" //Monkestation Addition
Expand Down
14 changes: 14 additions & 0 deletions code/__DEFINES/species_clothing_paths.dm
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,20 @@
///The dmi for monkey uniforms
#define MONKEY_UNIFORM_FILE 'icons/mob/species/monkey/uniform.dmi'

//VOX PATHS
#define VOX_MASK_FILE 'icons/mob/clothing/species/vox/mask.dmi'
#define VOX_HEAD_FILE 'icons/mob/clothing/species/vox/head.dmi'
#define VOX_BACK_FILE 'icons/mob/clothing/species/vox/back.dmi'
#define VOX_BELT_FILE 'icons/mob/clothing/species/vox/belt.dmi'
#define VOX_EARS_FILE 'icons/mob/clothing/species/vox/ears.dmi'
#define VOX_EYES_FILE 'icons/mob/clothing/species/vox/eyes.dmi'
#define VOX_SHOES_FILE 'icons/mob/clothing/species/vox/feet.dmi'
#define VOX_GLOVES_FILE 'icons/mob/clothing/species/vox/hands.dmi'
#define VOX_HELMET_FILE 'icons/mob/clothing/species/vox/helmet.dmi'
#define VOX_SUIT_FILE 'icons/mob/clothing/species/vox/suit.dmi'
#define VOX_UNIFORM_FILE 'icons/mob/clothing/species/vox/uniform.dmi'
#define VOX_GAGS_FILE 'icons/mob/clothing/species/vox/color_gags_vox.dmi'

//DIGITIGRADE PATHS
///The dmi containing digitigrade uniforms
#define DIGITIGRADE_UNIFORM_FILE 'monkestation/icons/mob/species/misc/uniform_digi.dmi'
Expand Down
6 changes: 6 additions & 0 deletions code/__HELPERS/global_lists.dm
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,12 @@
init_sprite_accessory_subtypes(/datum/sprite_accessory/arachnid_chelicerae, GLOB.arachnid_chelicerae_list) //Monkestation Addition
init_sprite_accessory_subtypes(/datum/sprite_accessory/goblin_ears, GLOB.goblin_ears_list) //Monkestation Addition
init_sprite_accessory_subtypes(/datum/sprite_accessory/floran_leaves, GLOB.floran_leaves_list) //Monkestation Addition
init_sprite_accessory_subtypes(/datum/sprite_accessory/vox_hair, GLOB.vox_hair_list, add_blank = TRUE)
init_sprite_accessory_subtypes(/datum/sprite_accessory/vox_spines, GLOB.spines_list_vox, add_blank = TRUE)
init_sprite_accessory_subtypes(/datum/sprite_accessory/vox_facial_hair, GLOB.vox_facial_hair_list, add_blank = TRUE)
init_sprite_accessory_subtypes(/datum/sprite_accessory/tails/vox, GLOB.tails_list_vox)
init_sprite_accessory_subtypes(/datum/sprite_accessory/beaks, GLOB.beaks_list)
init_sprite_accessory_subtypes(/datum/sprite_accessory/vox_body_markings, GLOB.vox_body_markings_list, add_blank = TRUE)

//Species
for(var/spath in subtypesof(/datum/species))
Expand Down
31 changes: 31 additions & 0 deletions code/__HELPERS/mobs.dm
Original file line number Diff line number Diff line change
Expand Up @@ -112,12 +112,25 @@
init_sprite_accessory_subtypes(/datum/sprite_accessory/goblin_ears, GLOB.goblin_ears_list)
if(!GLOB.floran_leaves_list.len)
init_sprite_accessory_subtypes(/datum/sprite_accessory/floran_leaves, GLOB.floran_leaves_list)
if(!GLOB.vox_hair_list.len)
init_sprite_accessory_subtypes(/datum/sprite_accessory/vox_hair, GLOB.vox_hair_list)
if(!GLOB.spines_list_vox.len)
init_sprite_accessory_subtypes(/datum/sprite_accessory/vox_spines, GLOB.spines_list_vox)
if(!GLOB.vox_facial_hair_list.len)
init_sprite_accessory_subtypes(/datum/sprite_accessory/vox_facial_hair, GLOB.vox_facial_hair_list)
if(!GLOB.tails_list_vox.len)
init_sprite_accessory_subtypes(/datum/sprite_accessory/tails/vox, GLOB.tails_list_vox)
if(!GLOB.beaks_list.len)
init_sprite_accessory_subtypes(/datum/sprite_accessory/beaks, GLOB.beaks_list)
if(!GLOB.vox_body_markings_list.len)
init_sprite_accessory_subtypes(/datum/sprite_accessory/vox_body_markings, GLOB.vox_body_markings_list)
//Monkestation Addition End

//For now we will always return none for tail_human and ears. | "For now" he says.
return(list(
"mcolor" = "#[pick("7F","FF")][pick("7F","FF")][pick("7F","FF")]",
"mcolor_secondary" = "#[pick("7F","FF")][pick("7F","FF")][pick("7F","FF")]",
"mcolor_tertiary" = "#[pick("7F","FF")][pick("7F","FF")][pick("7F","FF")]",
"ethcolor" = GLOB.color_list_ethereal[pick(GLOB.color_list_ethereal)],
"tail_cat" = "None",
"tail_lizard" = "Smooth",
Expand Down Expand Up @@ -146,6 +159,12 @@
"animecolor" = "#[pick("7F","FF")][pick("7F","FF")][pick("7F","FF")]", //Monkestation Addition
"goblin_ears" = pick(GLOB.goblin_ears_list), //Monkestation Addition
"floran_leaves" = pick(GLOB.floran_leaves_list), //Monkestation Addition
"beak" = pick(GLOB.beaks_list),
"spines_vox" = pick(GLOB.spines_list_vox),
"vox_skin_tone" = pick(GLOB.vox_skin_tones),
"vox_hair" = pick(GLOB.vox_hair_list),
"vox_facial_hair" = pick(GLOB.vox_facial_hair_list),
"vox_body_markings" = pick(GLOB.vox_body_markings_list),
))

/proc/random_hairstyle(gender)
Expand Down Expand Up @@ -194,6 +213,13 @@
if(!findname(.))
break

/proc/random_unique_vox_name(attempts_to_find_unique_name=10)
for(var/i in 1 to attempts_to_find_unique_name)
. = capitalize(vox_name())

if(!findname(.))
break

/proc/random_unique_ethereal_name(attempts_to_find_unique_name=10)
for(var/i in 1 to attempts_to_find_unique_name)
. = capitalize(ethereal_name())
Expand Down Expand Up @@ -226,6 +252,11 @@ GLOBAL_LIST_INIT(skin_tones, sort_list(list(
"african2"
)))

GLOBAL_LIST_INIT(vox_skin_tones, sort_list(list(
"green",
"crimson"
)))

GLOBAL_LIST_INIT(skin_tone_names, list(
"african1" = "Medium brown",
"african2" = "Dark brown",
Expand Down
11 changes: 11 additions & 0 deletions code/__HELPERS/names.dm
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,17 @@
/proc/moth_name()
return "[pick(GLOB.moth_first)] [pick(GLOB.moth_last)]"

/proc/vox_name()
var/sounds = rand(2, 8)
var/i = 0
var/newname = ""

while(i <= sounds)
i++
newname += pick(list("ti","hi","ki","ya","ta","ha","ka","ya","chi","cha","kah","ri","ra"))
newname = capitalize(newname)
return newname

GLOBAL_VAR(command_name)
/proc/command_name()
if (GLOB.command_name)
Expand Down
8 changes: 8 additions & 0 deletions code/_globalvars/lists/flavor_misc.dm
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,14 @@ GLOBAL_LIST_EMPTY(spines_list)
GLOBAL_LIST_EMPTY(legs_list)
GLOBAL_LIST_EMPTY(animated_spines_list)

//Vox bits (e)
GLOBAL_LIST_EMPTY(tails_list_vox)
GLOBAL_LIST_EMPTY(beaks_list)
GLOBAL_LIST_EMPTY(spines_list_vox)
GLOBAL_LIST_EMPTY(vox_hair_list)
GLOBAL_LIST_EMPTY(vox_facial_hair_list)
GLOBAL_LIST_EMPTY(vox_body_markings_list)

//Mutant Human bits
GLOBAL_LIST_EMPTY(tails_list)
GLOBAL_LIST_EMPTY(tails_list_human) //Only exists for preference choices. Use "tails_list" otherwise.
Expand Down
7 changes: 6 additions & 1 deletion code/datums/bodypart_overlays/bodypart_overlay.dm
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,9 @@
var/layers
///List of all possible layers. Used for looping through in drawing
var/static/list/all_layers = list(EXTERNAL_FRONT, EXTERNAL_ADJACENT, EXTERNAL_BEHIND)

var/override_layer
var/delayed_rendering = FALSE
var/color_blend_mode = "multiply"
///Key of the icon states of all the sprite_datums for easy caching
var/cache_key = ""

Expand All @@ -14,6 +16,9 @@
layer = bitflag_to_layer(layer)
. = get_image(layer, limb)
color_image(., layer, limb)
if(delayed_rendering)
limb?.delayed_renders += .
return

///Wrapper for getting the proper image, colored and everything
/datum/bodypart_overlay/proc/get_secondary_overlay(layer, obj/item/bodypart/limb)
Expand Down
21 changes: 17 additions & 4 deletions code/datums/bodypart_overlays/mutant_bodypart_overlay.dm
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

///Defines what kind of 'organ' we're looking at. Sprites have names like 'm_mothwings_firemoth_ADJ'. 'mothwings' would then be feature_key
var/feature_key = ""

var/feature_different_dna
///The color this organ draws with. Updated by bodypart/inherit_color()
var/draw_color
///Where does this organ inherit it's color from?
Expand Down Expand Up @@ -56,7 +56,7 @@

var/finished_icon_state = icon_state_builder.Join("_")

var/mutable_appearance/appearance = mutable_appearance(sprite_datum.icon, finished_icon_state, layer = image_layer)
var/mutable_appearance/appearance = mutable_appearance(sprite_datum.icon, finished_icon_state, layer = override_layer ? override_layer : image_layer)

if(sprite_datum.center)
center_image(appearance, sprite_datum.dimension_x, sprite_datum.dimension_y)
Expand Down Expand Up @@ -88,8 +88,11 @@
return appearance

/datum/bodypart_overlay/mutant/color_image(image/overlay, layer, obj/item/bodypart/limb)

overlay.color = sprite_datum.color_src ? draw_color : null
switch(color_blend_mode)
if("multiply")
overlay.color = sprite_datum.color_src ? draw_color : null
if("add")
overlay.color = list(null, null, null, null, sprite_datum.color_src ? draw_color : null)

/datum/bodypart_overlay/mutant/added_to_limb(obj/item/bodypart/limb)
inherit_color(limb)
Expand Down Expand Up @@ -135,6 +138,11 @@
return
var/mob/living/carbon/human/human_owner = ownerlimb.owner
draw_color = human_owner.hair_color
if(ORGAN_COLOR_FACIAL_HAIR)
if(!ishuman(ownerlimb.owner))
return
var/mob/living/carbon/human/human_owner = ownerlimb.owner
draw_color = human_owner.facial_hair_color
if(ORGAN_COLOR_ANIME)
if(!ishuman(ownerlimb.owner))
return
Expand All @@ -145,6 +153,11 @@
return
var/mob/living/carbon/human/human_owner = ownerlimb.owner
draw_color = human_owner.dna.features["mcolor_secondary"]
if(ORGAN_COLOR_MUTTERTIARY)
if(!ishuman(ownerlimb.owner))
return
var/mob/living/carbon/human/human_owner = ownerlimb.owner
draw_color = human_owner.dna.features["mcolor_tertiary"]

return TRUE

Expand Down
36 changes: 36 additions & 0 deletions code/datums/dna.dm
Original file line number Diff line number Diff line change
Expand Up @@ -198,6 +198,8 @@ GLOBAL_LIST_INIT(total_uf_len_by_block, populate_total_uf_len_by_block())
L[DNA_MUTANT_COLOR_BLOCK] = sanitize_hexcolor(features["mcolor"], include_crunch = FALSE)
if(features["mcolor_secondary"])
L[DNA_MUTANT_COLOR_SECONDARY] = sanitize_hexcolor(features["mcolor_secondary"], include_crunch = FALSE)
if(features["mcolor_secondary"])
L[DNA_MUTANT_COLOR_TERTIARY] = sanitize_hexcolor(features["mcolor_tertiary"], include_crunch = FALSE)
if(features["ethcolor"])
L[DNA_ETHEREAL_COLOR_BLOCK] = sanitize_hexcolor(features["ethcolor"], include_crunch = FALSE)
if(features["body_markings"])
Expand Down Expand Up @@ -226,6 +228,16 @@ GLOBAL_LIST_INIT(total_uf_len_by_block, populate_total_uf_len_by_block())
L[DNA_MUSHROOM_CAPS_BLOCK] = construct_block(GLOB.caps_list.Find(features["caps"]), GLOB.caps_list.len)
if(features["pod_hair"])
L[DNA_POD_HAIR_BLOCK] = construct_block(GLOB.pod_hair_list.Find(features["pod_hair"]), GLOB.pod_hair_list.len)
if(features["vox_hair"])
L[DNA_VOX_HAIR_BLOCK] = construct_block(GLOB.vox_hair_list.Find(features["vox_hair"]), GLOB.vox_hair_list.len)
if(features["vox_facial_hair"])
L[DNA_VOX_FACIAL_HAIR_BLOCK] = construct_block(GLOB.vox_facial_hair_list.Find(features["vox_facial_hair"]), GLOB.vox_facial_hair_list.len)
if(features["spines_vox"])
L[DNA_VOX_SPINES_BLOCK] = construct_block(GLOB.spines_list_vox.Find(features["spines_vox"]), GLOB.spines_list_vox.len)
if(features["vox_body_markings"])
L[DNA_VOX_BODY_MARKINGS_BLOCK] = construct_block(GLOB.vox_body_markings_list.Find(features["vox_body_markings"]), GLOB.vox_body_markings_list.len)
if(features["vox_skin_tone"])
L[DNA_VOX_SKIN_TONE_BLOCK] = construct_block(GLOB.vox_skin_tones.Find(features["vox_skin_tone"]), GLOB.vox_skin_tones.len)

for(var/blocknum in 1 to DNA_FEATURE_BLOCKS)
. += L[blocknum] || random_string(GET_UI_BLOCK_LEN(blocknum), GLOB.hex_characters)
Expand Down Expand Up @@ -334,6 +346,8 @@ GLOBAL_LIST_INIT(total_uf_len_by_block, populate_total_uf_len_by_block())
set_uni_feature_block(blocknumber, sanitize_hexcolor(features["mcolor"], include_crunch = FALSE))
if(DNA_MUTANT_COLOR_SECONDARY)
set_uni_feature_block(blocknumber, sanitize_hexcolor(features["mcolor_secondary"], include_crunch = FALSE))
if(DNA_MUTANT_COLOR_TERTIARY)
set_uni_feature_block(blocknumber, sanitize_hexcolor(features["mcolor_tertiary"], include_crunch = FALSE))
if(DNA_ETHEREAL_COLOR_BLOCK)
set_uni_feature_block(blocknumber, sanitize_hexcolor(features["ethcolor"], include_crunch = FALSE))
if(DNA_LIZARD_MARKINGS_BLOCK)
Expand All @@ -360,6 +374,16 @@ GLOBAL_LIST_INIT(total_uf_len_by_block, populate_total_uf_len_by_block())
set_uni_feature_block(blocknumber, construct_block(GLOB.caps_list.Find(features["caps"]), GLOB.caps_list.len))
if(DNA_POD_HAIR_BLOCK)
set_uni_feature_block(blocknumber, construct_block(GLOB.pod_hair_list.Find(features["pod_hair"]), GLOB.pod_hair_list.len))
if(DNA_VOX_HAIR_BLOCK)
set_uni_feature_block(blocknumber, construct_block(GLOB.vox_hair_list.Find(features["vox_hair"]), GLOB.vox_hair_list.len))
if(DNA_VOX_FACIAL_HAIR_BLOCK)
set_uni_feature_block(blocknumber, construct_block(GLOB.vox_facial_hair_list.Find(features["vox_facial_hair"]), GLOB.vox_facial_hair_list.len))
if(DNA_VOX_SPINES_BLOCK)
set_uni_feature_block(blocknumber, construct_block(GLOB.spines_list_vox.Find(features["spines_vox"]), GLOB.spines_list_vox.len))
if(DNA_VOX_BODY_MARKINGS_BLOCK)
set_uni_feature_block(blocknumber, construct_block(GLOB.vox_body_markings_list.Find(features["vox_body_markings"]), GLOB.vox_body_markings_list.len))
if(DNA_VOX_SKIN_TONE_BLOCK)
set_uni_feature_block(blocknumber, construct_block(GLOB.vox_skin_tones.Find(features["vox_skin_tone"]), GLOB.vox_skin_tones.len))

//Please use add_mutation or activate_mutation instead
/datum/dna/proc/force_give(datum/mutation/human/HM)
Expand Down Expand Up @@ -602,6 +626,8 @@ GLOBAL_LIST_INIT(total_uf_len_by_block, populate_total_uf_len_by_block())
dna.features["mcolor"] = sanitize_hexcolor(get_uni_feature_block(features, DNA_MUTANT_COLOR_BLOCK))
if(dna.features["mcolor_secondary"])
dna.features["mcolor_secondary"] = sanitize_hexcolor(get_uni_feature_block(features, DNA_MUTANT_COLOR_SECONDARY))
if(dna.features["mcolor_tertiary"])
dna.features["mcolor_tertiary"] = sanitize_hexcolor(get_uni_feature_block(features, DNA_MUTANT_COLOR_TERTIARY))
if(dna.features["ethcolor"])
dna.features["ethcolor"] = sanitize_hexcolor(get_uni_feature_block(features, DNA_ETHEREAL_COLOR_BLOCK))
if(dna.features["body_markings"])
Expand Down Expand Up @@ -634,6 +660,16 @@ GLOBAL_LIST_INIT(total_uf_len_by_block, populate_total_uf_len_by_block())
dna.features["caps"] = GLOB.caps_list[deconstruct_block(get_uni_feature_block(features, DNA_MUSHROOM_CAPS_BLOCK), GLOB.caps_list.len)]
if(dna.features["pod_hair"])
dna.features["pod_hair"] = GLOB.pod_hair_list[deconstruct_block(get_uni_feature_block(features, DNA_POD_HAIR_BLOCK), GLOB.pod_hair_list.len)]
if(dna.features["vox_hair"])
dna.features["vox_hair"] = GLOB.vox_hair_list[deconstruct_block(get_uni_feature_block(features, DNA_VOX_HAIR_BLOCK), GLOB.vox_hair_list.len)]
if(dna.features["vox_facial_hair"])
dna.features["vox_facial_hair"] = GLOB.vox_facial_hair_list[deconstruct_block(get_uni_feature_block(features, DNA_VOX_FACIAL_HAIR_BLOCK), GLOB.vox_facial_hair_list.len)]
if(dna.features["spines_vox"])
dna.features["spines_vox"] = GLOB.spines_list_vox[deconstruct_block(get_uni_feature_block(features, DNA_VOX_SPINES_BLOCK), GLOB.spines_list_vox.len)]
if(dna.features["vox_body_markings"])
dna.features["vox_body_markings"] = GLOB.vox_body_markings_list[deconstruct_block(get_uni_feature_block(features, DNA_VOX_BODY_MARKINGS_BLOCK), GLOB.vox_body_markings_list.len)]
if(dna.features["vox_skin_tone"])
dna.features["vox_skin_tone"] = GLOB.vox_skin_tones[deconstruct_block(get_uni_feature_block(features, DNA_VOX_SKIN_TONE_BLOCK), GLOB.vox_skin_tones.len)]

for(var/obj/item/organ/external/external_organ in organs)
external_organ.mutate_feature(features, src)
Expand Down
4 changes: 4 additions & 0 deletions code/datums/greyscale/config_types/greyscale_configs.dm
Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,10 @@
icon_file = 'icons/mob/clothing/under/color.dmi'
json_config = 'code/datums/greyscale/json_configs/jumpsuit_worn.json'

/datum/greyscale_config/jumpsuit_worn/vox
name = "Worn Jumpsuit - Vox"
icon_file = VOX_GAGS_FILE

/datum/greyscale_config/jumpsuit_inhand_left
name = "Held Jumpsuit, Left"
icon_file = 'icons/mob/inhands/clothing/suits_lefthand.dmi'
Expand Down
2 changes: 2 additions & 0 deletions code/game/objects/items.dm
Original file line number Diff line number Diff line change
Expand Up @@ -376,6 +376,8 @@
worn_icon_digitigrade = SSgreyscale.GetColoredIconByType(greyscale_config_worn_digitigrade, greyscale_colors)
if(greyscale_config_worn_snouted)
worn_icon_snouted = SSgreyscale.GetColoredIconByType(greyscale_config_worn_snouted, greyscale_colors)
if(greyscale_config_worn_vox)
worn_icon_vox = SSgreyscale.GetColoredIconByType(greyscale_config_worn_vox, greyscale_colors)
if(greyscale_config_inhand_left)
lefthand_file = SSgreyscale.GetColoredIconByType(greyscale_config_inhand_left, greyscale_colors)
if(greyscale_config_inhand_right)
Expand Down
Loading
Loading