From 2e0c12c7d10b6f09bbb8b7c0a144bcdad841e22c Mon Sep 17 00:00:00 2001 From: Intigracy Date: Wed, 13 Apr 2016 16:55:49 -0700 Subject: [PATCH] adds 2 more colors of vox (#9322) vox can choose to be these in their preferences --- code/__HELPERS/mobs.dm | 52 +++++++++++------- code/game/gamemodes/heist/heist.dm | 1 + code/game/turfs/simulated.dm | 4 +- code/modules/client/preferences.dm | 36 ++++++++---- code/modules/events/heist.dm | 1 + code/modules/mob/living/carbon/human/death.dm | 4 +- code/modules/mob/living/carbon/human/human.dm | 8 ++- .../mob/living/carbon/human/update_icons.dm | 2 + code/modules/mob/living/carbon/species.dm | 30 +++++++++- .../mob/new_player/preferences_setup.dm | 14 ++++- html/changelogs/Intipox.yml | 5 ++ icons/mob/human_races/r_def_vox.dmi | Bin 2036 -> 0 bytes icons/mob/human_races/r_vox.dmi | Bin 2653 -> 0 bytes icons/mob/human_races/vox/r_def_vox.dmi | Bin 0 -> 2053 bytes icons/mob/human_races/vox/r_def_voxbrn.dmi | Bin 0 -> 2053 bytes icons/mob/human_races/vox/r_def_voxgry.dmi | Bin 0 -> 2245 bytes icons/mob/human_races/vox/r_vox.dmi | Bin 0 -> 2678 bytes icons/mob/human_races/vox/r_voxbrn.dmi | Bin 0 -> 2678 bytes icons/mob/human_races/vox/r_voxgry.dmi | Bin 0 -> 2877 bytes 19 files changed, 118 insertions(+), 39 deletions(-) create mode 100644 html/changelogs/Intipox.yml delete mode 100644 icons/mob/human_races/r_def_vox.dmi delete mode 100644 icons/mob/human_races/r_vox.dmi create mode 100644 icons/mob/human_races/vox/r_def_vox.dmi create mode 100644 icons/mob/human_races/vox/r_def_voxbrn.dmi create mode 100644 icons/mob/human_races/vox/r_def_voxgry.dmi create mode 100644 icons/mob/human_races/vox/r_vox.dmi create mode 100644 icons/mob/human_races/vox/r_voxbrn.dmi create mode 100644 icons/mob/human_races/vox/r_voxgry.dmi diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm index 0446d99c20d..322f611710e 100644 --- a/code/__HELPERS/mobs.dm +++ b/code/__HELPERS/mobs.dm @@ -59,27 +59,39 @@ proc/random_name(gender, speciesName = "Human") -proc/random_skin_tone() - switch(pick(60;"caucasian", 15;"afroamerican", 10;"african", 10;"latino", 5;"albino")) - if("caucasian") . = -10 - if("afroamerican") . = -115 - if("african") . = -165 - if("latino") . = -55 - if("albino") . = 34 - else . = rand(-185,34) - return min(max( .+rand(-25, 25), -185),34) +proc/random_skin_tone(species = "Human") + if(species == "Human") + switch(pick(60;"caucasian", 15;"afroamerican", 10;"african", 10;"latino", 5;"albino")) + if("caucasian") . = -10 + if("afroamerican") . = -115 + if("african") . = -165 + if("latino") . = -55 + if("albino") . = 34 + else . = rand(-185,34) + return min(max( .+rand(-25, 25), -185),34) + else if(species == "Vox") + . = rand(1,3) + return . + else return 0 -proc/skintone2racedescription(tone) - switch (tone) - if(30 to INFINITY) return "albino" - if(20 to 30) return "pale" - if(5 to 15) return "light skinned" - if(-10 to 5) return "white" - if(-25 to -10) return "tan" - if(-45 to -25) return "darker skinned" - if(-65 to -45) return "brown" - if(-INFINITY to -65) return "black" - else return "unknown" +proc/skintone2racedescription(tone, species = "Human") + if(species == "Human") + switch (tone) + if(30 to INFINITY) return "albino" + if(20 to 30) return "pale" + if(5 to 15) return "light skinned" + if(-10 to 5) return "white" + if(-25 to -10) return "tan" + if(-45 to -25) return "darker skinned" + if(-65 to -45) return "brown" + if(-INFINITY to -65) return "black" + else return "unknown" + else if(species == "Vox") + switch(tone) + if(2) return "brown" + if(3) return "gray" + else return "green" + else return "unknown" proc/age2agedescription(age) switch(age) diff --git a/code/game/gamemodes/heist/heist.dm b/code/game/gamemodes/heist/heist.dm index 02170c987cd..42d8af23718 100644 --- a/code/game/gamemodes/heist/heist.dm +++ b/code/game/gamemodes/heist/heist.dm @@ -83,6 +83,7 @@ var/mob/living/carbon/human/vox = raider.current raider.name = vox.name vox.age = rand(12,20) + vox.s_tone = random_skin_tone("Vox") vox.dna.mutantrace = "vox" vox.set_species("Vox") vox.generate_name() diff --git a/code/game/turfs/simulated.dm b/code/game/turfs/simulated.dm index fa03c12546c..42ed3f456e3 100644 --- a/code/game/turfs/simulated.dm +++ b/code/game/turfs/simulated.dm @@ -53,13 +53,13 @@ H.track_blood = max(round(H.track_blood - 1, 1),0) if (bloodDNA) - if(istype(M,/mob/living/carbon/human/vox)) + if(H.species && istype(H.species,/datum/species/vox)) src.AddTracks(/obj/effect/decal/cleanable/blood/tracks/footprints/vox,bloodDNA,H.dir,0,bloodcolor) // Coming else src.AddTracks(/obj/effect/decal/cleanable/blood/tracks/footprints,bloodDNA,H.dir,0,bloodcolor) // Coming var/turf/simulated/from = get_step(H,reverse_direction(H.dir)) if(istype(from) && from) - if(istype(M,/mob/living/carbon/human/vox)) + if(H.species && istype(H.species,/datum/species/vox)) from.AddTracks(/obj/effect/decal/cleanable/blood/tracks/footprints/vox,bloodDNA,0,H.dir,bloodcolor) // Going else from.AddTracks(/obj/effect/decal/cleanable/blood/tracks/footprints,bloodDNA,0,H.dir,bloodcolor) // Going diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 1396fb6eb18..52e1368d4ab 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -212,7 +212,7 @@ var/const/MAX_SAVE_SLOTS = 8
Species: [species]
Secondary Language: [language]
- Skin Tone: [-s_tone + 35]/220

+ Skin Tone: [species == "Human" ? "[-s_tone + 35]/220" : "[s_tone]"]

Handicaps: Set
Limbs: Set
Organs: Set
@@ -928,7 +928,7 @@ NOTE: The change will take effect AFTER any current recruiting periods."} g_eyes = rand(0,255) b_eyes = rand(0,255) if("s_tone") - s_tone = random_skin_tone() + s_tone = random_skin_tone(species) if("bag") backbag = rand(1,4) /*if("skin_style") @@ -1079,11 +1079,12 @@ NOTE: The change will take effect AFTER any current recruiting periods."} h_style = new_h_style if("facial") - var/new_facial = input(user, "Choose your character's facial-hair colour:", "Character Preference") as color|null - if(new_facial) - r_facial = hex2num(copytext(new_facial, 2, 4)) - g_facial = hex2num(copytext(new_facial, 4, 6)) - b_facial = hex2num(copytext(new_facial, 6, 8)) + if(species == "Human" || species == "Unathi") + var/new_facial = input(user, "Choose your character's facial-hair colour:", "Character Preference") as color|null + if(new_facial) + r_facial = hex2num(copytext(new_facial, 2, 4)) + g_facial = hex2num(copytext(new_facial, 4, 6)) + b_facial = hex2num(copytext(new_facial, 6, 8)) if("f_style") var/list/valid_facialhairstyles = list() @@ -1122,11 +1123,24 @@ NOTE: The change will take effect AFTER any current recruiting periods."} b_eyes = hex2num(copytext(new_eyes, 6, 8)) if("s_tone") - if(species != "Human") + if(species == "Human") + var/new_s_tone = input(user, "Choose your character's skin-tone:\n(Light 1 - 220 Dark)", "Character Preference") as num|null + if(new_s_tone) + s_tone = 35 - max(min(round(new_s_tone),220),1) + else if(species == "Vox")//Can't reference species flags here, sorry. + var/skin_c = input(user, "Choose your Vox's skin color:\n(1 = Green, 2 = Brown, 3 = Gray)", "Character Preference") as num|null + if(skin_c) + s_tone = max(min(round(skin_c),3),1) + switch(s_tone) + if(3) + to_chat(src,"Your vox will now be gray.") + if(2) + to_chat(src,"Your vox will now be brown.") + else + to_chat(src,"Your vox will now be green.") + else + to_chat(src,"Your species doesn't have different skin tones. Yet?") return - var/new_s_tone = input(user, "Choose your character's skin-tone:\n(Light 1 - 220 Dark)", "Character Preference") as num|null - if(new_s_tone) - s_tone = 35 - max(min( round(new_s_tone), 220),1) if("ooccolor") var/new_ooccolor = input(user, "Choose your OOC colour:", "Game Preference") as color|null diff --git a/code/modules/events/heist.dm b/code/modules/events/heist.dm index 3c19e99e207..75348bca56f 100644 --- a/code/modules/events/heist.dm +++ b/code/modules/events/heist.dm @@ -82,6 +82,7 @@ var/global/list/datum/mind/raiders = list() //Antags. var/mob/living/carbon/human/vox = raider.current vox.age = rand(12,20) + vox.s_tone = random_skin_tone("Vox") vox.dna.mutantrace = "vox" vox.set_species("Vox") vox.generate_name() diff --git a/code/modules/mob/living/carbon/human/death.dm b/code/modules/mob/living/carbon/human/death.dm index a09e28c775e..72d9b9f5b6a 100644 --- a/code/modules/mob/living/carbon/human/death.dm +++ b/code/modules/mob/living/carbon/human/death.dm @@ -41,9 +41,11 @@ for(var/obj/Overlays/O in obj_overlays) returnToPool(O) - + obj_overlays = null + species = null + ..() /mob/living/carbon/human/death(gibbed) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index ef88c36279a..d843934bbea 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -77,9 +77,14 @@ /mob/living/carbon/human/New(var/new_loc, var/new_species_name = null, var/delay_ready_dna=0) if(!hair_styles_list.len) buildHairLists() if(!all_species.len) buildSpeciesLists() + + if(new_species_name) + s_tone = random_skin_tone(new_species_name) + if(!src.species) if(new_species_name) src.set_species(new_species_name) else src.set_species() + default_language = get_default_language() create_reagents(1000) @@ -1395,6 +1400,7 @@ var/datum/species/S = all_species[new_species_name] src.species = new S.type + src.species.myhuman = src if(species.language) add_language(species.language) @@ -1414,8 +1420,8 @@ src.do_deferred_species_setup = 1 spawn() src.dna.species = new_species_name + src.species.handle_post_spawn(src) src.update_icons() - src.species.handle_post_spawn(src) return 1 /mob/living/carbon/human/proc/bloody_doodle() diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index ac1092b94c5..38488ad6d40 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -413,6 +413,8 @@ var/global/list/damage_icon_parts = list() race_icon = 'icons/mob/human_races/r_skeleton.dmi' else //Icon data is kept in species datums within the mob. + if(species && istype(species, /datum/species)) + species.updatespeciescolor(src) race_icon = species.icobase deform_icon = species.deform overlays -= obj_overlays[MUTANTRACE_LAYER] diff --git a/code/modules/mob/living/carbon/species.dm b/code/modules/mob/living/carbon/species.dm index 811f2a11ce4..e642b79ec1e 100644 --- a/code/modules/mob/living/carbon/species.dm +++ b/code/modules/mob/living/carbon/species.dm @@ -45,6 +45,7 @@ var/global/list/whitelisted_species = list("Human") var/punch_throw_range = 0 var/punch_throw_speed = 1 var/mutantrace // Safeguard due to old code. + var/myhuman // mob reference var/breath_type = "oxygen" // Non-oxygen gas breathed, if any. var/survival_gear = /obj/item/weapon/storage/box/survival // For spawnin'. @@ -133,6 +134,11 @@ var/global/list/whitelisted_species = list("Human") default_blocks = globalspeciesholder.default_blocks.Copy() default_mutations = globalspeciesholder.default_mutations.Copy() +/datum/species/Destroy() + if(myhuman) + myhuman = null + ..() + /datum/species/proc/handle_speech(var/datum/speech/speech, mob/living/carbon/human/H) if(H.dna) if(length(speech.message) >= 2) @@ -199,6 +205,9 @@ var/global/list/whitelisted_species = list("Human") /datum/species/proc/handle_post_spawn(var/mob/living/carbon/human/H) //Handles anything not already covered by basic species assignment. return +/datum/species/proc/updatespeciescolor(var/mob/living/carbon/human/H) //Handles changing icobase for species that have multiple skin colors. + return + // Sent from /datum/lung_gas/metabolizable. /datum/species/proc/receiveGas(var/gas_id, var/ratio, var/moles, var/mob/living/carbon/human/H) //testing("receiveGas: [gas_id] ? [breath_type] - ratio=[ratio], moles=[moles]") @@ -465,8 +474,8 @@ var/global/list/whitelisted_species = list("Human") /datum/species/vox name = "Vox" - icobase = 'icons/mob/human_races/r_vox.dmi' - deform = 'icons/mob/human_races/r_def_vox.dmi' + icobase = 'icons/mob/human_races/vox/r_vox.dmi' + deform = 'icons/mob/human_races/vox/r_def_vox.dmi' language = "Vox-pidgin" survival_gear = /obj/item/weapon/storage/box/survival/vox @@ -610,6 +619,23 @@ var/global/list/whitelisted_species = list("Human") newname += pick(vox_name_syllables) return capitalize(newname) +/datum/species/vox/handle_post_spawn(var/mob/living/carbon/human/H) + if(myhuman != H) return + updatespeciescolor(H) + H.update_icon() + +/datum/species/vox/updatespeciescolor(var/mob/living/carbon/human/H) + switch(H.s_tone) + if(3) + icobase = 'icons/mob/human_races/vox/r_voxgry.dmi' + deform = 'icons/mob/human_races/vox/r_def_voxgry.dmi' + if(2) + icobase = 'icons/mob/human_races/vox/r_voxbrn.dmi' + deform = 'icons/mob/human_races/vox/r_def_voxbrn.dmi' + else + icobase = 'icons/mob/human_races/vox/r_vox.dmi' + deform = 'icons/mob/human_races/vox/r_def_vox.dmi' + /datum/species/diona name = "Diona" icobase = 'icons/mob/human_races/r_plant.dmi' diff --git a/code/modules/mob/new_player/preferences_setup.dm b/code/modules/mob/new_player/preferences_setup.dm index 5be5931ef71..94ff529d2b9 100644 --- a/code/modules/mob/new_player/preferences_setup.dm +++ b/code/modules/mob/new_player/preferences_setup.dm @@ -6,7 +6,7 @@ datum/preferences gender = MALE else gender = FEMALE - s_tone = random_skin_tone() + s_tone = random_skin_tone(species) h_style = random_hair_style(gender, species) f_style = random_facial_hair_style(gender, species) randomize_hair_color("hair") @@ -149,8 +149,18 @@ datum/preferences var/icon/icobase var/datum/species/current_species = all_species[species] + //icon based species color if(current_species) - icobase = current_species.icobase + if(current_species.name == "Vox") + switch(s_tone) + if(3) + icobase = 'icons/mob/human_races/vox/r_voxgry.dmi' + if(2) + icobase = 'icons/mob/human_races/vox/r_voxbrn.dmi' + else + icobase = 'icons/mob/human_races/vox/r_vox.dmi' + else + icobase = current_species.icobase else icobase = 'icons/mob/human_races/r_human.dmi' diff --git a/html/changelogs/Intipox.yml b/html/changelogs/Intipox.yml new file mode 100644 index 00000000000..440ef5e3de2 --- /dev/null +++ b/html/changelogs/Intipox.yml @@ -0,0 +1,5 @@ +author: Intigracy +delete-after: True +changes: +- imageadd: "Vox are now able to choose from 3 colors of skin (the current green has been darkened, a reddish-brown, and gray) in their preferences. Gray is the obvious best choice." +- tweak: "Vox raiders and adminspawned vox now get a random skin color. Admins are able to varedit vox skin colors by changing s_tone and regenerating icons." \ No newline at end of file diff --git a/icons/mob/human_races/r_def_vox.dmi b/icons/mob/human_races/r_def_vox.dmi deleted file mode 100644 index 2024f52583b50e825812a2bc3ec746d95564adb2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2036 zcmY*Yc{J3E7ypi7CNtLX$Py#XWFO-27>s4I#f&Y|VzLw!Geub&imcgX30c!>X_4Jb z$eNi@M)5247%^EQ%QVCMy!ZRPbKd*sem?h}dp`Gm&OJAU;A|@jlZOESAZl-C;|c(v zT?zvBfOp}-6EF8&z!8qR<7hORm#;`%x+E!D+&5VC>?N_Q#QpUd+KgJ8RI=I`{Jz~r z8Ch_YpR)5YxGw?&Z#E)D%DALi=p24GneXLpn4D0iQmO06ty%mqg3o_16Bz2X1-i5=MKwltD( z@=i5bF!$8YFShAgsV|Z~pc9`qTt~l&nrtLzWQV)}A5ctEU6hdWlY=|jN$yjS4&ka6 zmJt&&HyB$J2^~V+E2p1Q#~aUc&u&w7=Sj`iXOne30RU2DZ)52mQL~UvlZ}kGoLyORZ79-TBv5AT+kUS=$LP`vCe%o|-9|3V! zkJ!M{GsCh`^2A$8u2kh-82CsHj9Wfz;KE0n_XE#vMX^)as^clGESGIJmCT_6|&@~;j5708Tuh&To{LVVm+WC^J% zY_(#Z+V=S6FEemPE523{krPI27?sFQU8g>#x|UUU)!g&Uz+UQzP8v@WvH2Sp=_PA9yRS;vp1gXUv2UG?_*m{>+ewtG1_B~GSltfy$m%{Er& z8~0c!dIU$D!^%8MH9?3EwaZej+x%-Y09d&gco(Op7e8=Acui0}vQoNM#I!g|HwUQ^ zR7$Pt^xV<>J&mDA%yUH^c7a*AxrNl+8|TDtcHngjZF*-`NflRivJi)TJnDE&bN@Te zKL%icM&96mMGK+WOvi+7G_@s0)whPD1q`@$e?cm6cPCCi=f2x)p6NxX^&s!b0GRl{YRgE$-}_uT?Wo? z5|Fvi=?;Eg{W9MLYFzHI!`-sY^@Otvz7?LY$<}NU3oXeQ@T70l(?(i({^*O_0l!Y3 z2AeV&?gqEt^b8fwOd+Dp!Sz=CJfi479RE$X82bCuAa*M*QxiqHutejdeKU{CXWod9 zpj)lLijUDoTdE2w?|o`W9f|R#{*VGK#mp%?Wh0Kmme92`DcyZx2kA;_KW7c!b-2U- z(u~`iY!`K?OV&Kx`As@!xM_J{mU;~jmD8q2IrKtTW^32DueZYyR+}B;X8h^n{q>C| zmu6A-8q3SC?9_?x1dcstoGp#gtvJWdge1-76ehbxR5}D!j&n>GI;_2)W@d0;zVJP; z_73kK0(l$hFD7}fh_ilPY1TrWQlFTyFdI-}g1KC@%CP7PDO+iFQ-Jl`v{1rt%|=`P zw~AsNE8vdW62FYK`GzcH-IbjQ!8@e55)jro$z^U;QPrQqN- zZq)->6~#l`34tc=13CPW>}B_gTzh<7uUM4H$ZEu_lRumHN(-IAZL}= zV_Dz3JM;nHh~`S?tye~YxLDYmj#Q95_e8fftYh64Kn#`nEpo z&D|K3m*6%SA5^;e-l(2rAi@;t#**rhURfU?A8RS?&jW0SKDSmj%M6)$d@k~XXL*(_A$su9TYLz!^?PkJUTe8(OC$7m)A>A&su}*83QHi5T3y( z7s8i50&|qt_pr-x#&fDEwgVR+8_>j>Vm=BN>TI60#{8kX*u&H-30*jBWh~iR7wGf7 z68eHQHJb?*n(Ja0{0Fozef8mG9hJ5)>-@FNsmPUQkSXX5IU2>gSrEE${?!u`l{Hw`~hGD0^IA%Z7{)<902J!V^YUV$cG%3P;jd)d6J zFBoANN~auHykVt|Y%0i#rcsJ5E`M4KlHZaXl#lIx_;o4TGlk}Kf3PhaJ5$o8QlifH zr=qNXf2jmosPraiUA(6Id9f9$K_6q*&D1e1eh!zy1p!Ra#^&7Q=*~{eiL2z;PHod> zi_iIHQ)Q$a2)2 F{tM$rtF8b5 diff --git a/icons/mob/human_races/r_vox.dmi b/icons/mob/human_races/r_vox.dmi deleted file mode 100644 index 28b083fd51eda7a189276e2c53ace241bb445913..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2653 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 SuH~A)-jIcfExHoregA){r1q!) diff --git a/icons/mob/human_races/vox/r_def_vox.dmi b/icons/mob/human_races/vox/r_def_vox.dmi new file mode 100644 index 0000000000000000000000000000000000000000..2692ed5eb0e87a43f0cb6ea29e3643937a51ebcd GIT binary patch literal 2053 zcmZ8i2{hCT7ypmJlqF>eZ!9HSg^{5}W2a`!SO$Z_7|nR)l`(cP_GLs8BTBr6@+wb; zGNHy8OL^3@mL+?oDbmQk4D;!I-*?V?@1A?^a_+gmd+)jToO{LD@wBwWPZ9tCNTZOp zE&u@9HbKA+@V2^G;pw)m9Gx+4c3dtOg_XM$rt0ml5o*9Tl;U^0@E>);TpV2i z%TI$pZ##9-Zk}Pb{-MN>07_Uu5E%fXin4OeBw7rmQqOP5YY(A?{RUbkqzjb<(Wk^d zO_8C%FS9ePHuq%%o#s${)C2c{<^HAe`p9|zgW^SR?TRB~4vsZx-pTC4N(8k`xE?&0 zM0!$z1UuZ2*LL zXyhJcs62T?R?KPSj!x~y0M@2%f`=}jj%64b%|5yFb@C_FG1N_xkVMt z7E2QE9@?F%x_i&cSgU62SD~;>(Qx$WPIv+;V>E{IEuz++bPYna-Sd3c_T&JNAcVX* zYk5(A#Uaeoyt8K>3%878bRa|{v<{x^g9`Il}_G^v$(1teifszY;`-Jbjy!=9Yj)I>Q@+; zJTB9Aqf}y=*`s4k>`m~icsL%c?KopQHN))FIa21;rSs@P$`$`#Ds^zeyHZgM%wHY; zLrmmDq}8GvOPkzN;mJ}jeS57Ho{^`Sy*k>3xh}p;&nXHiZmh{H5blpd(^%`wKJW(2BB4fDS3XQ=tW-8`dPS6o(a6^6j|S)J-^er$A; zrjd4mQ0**FM%icqH`Ngz9rrifzf3OJnb&Ax-u`ZbeorBuFT`HvJA^QI>(@DD#J2a0 zUPjZA2Q=-+Yu=!Dp}(M^w3uwV!5&@ho!`M9&8#NyAHdwH!-d zZ|SG6k6jOj!(XJi65EZ{`;H%xE5vk~9?tUH?@=Xr^VE&XaRIDV-FTmXwXPnws0S-Gn zuCY#NVEdUf@QkO9kX&QALn;M~n!WNho#RVQ>VeVALlriBt;I{5Jri@@vU0&YoZNOg zyfKYG-4Ka9yxeod*Xk0;DzVn%Fg~G|lXLX8g;E7o>SFK%Ze;WDx=f-j_j)&kD08n2 zw59jBM1be^im(&9MQX*>uO4|7bTG{Cp_sM${e}3f`izUk7Dp35K?zvOFjz)D(xL=! z8kKovd}mJf$?j5Pz3>l~!-6f{X|WxU4)dqnCG$fs>DZ4aai2-O^xvzK)pmu&vF8sx z4&PcGe7G2PenkB3(uX!Qu4E=vC$y{ugTT;cy^AC52E>g!)%E&&!5t0uEbhF~Ox;>) zOBGe4w99Yte3SlEmuy5|k!8mH{X?`EV)wg+$^Nwlku5!~U(*%cy!Wzt1pnLGoRsbY zO3Opd=Bl5$Y}zr_lsQCobHHpW1W67s>OeC4yv*k^W-NKHG-|bY=>3nuZFFI7M{Fyq z!b;*qF$vPV4sA+|dT}iD#Q|@3X%F`x6+?BcQZRl46~?8Jo&(TauROuJSBr0-ayLw*ncX(`_fc zB5DMW4rh2(v*q@wnmI?XDFmfQ85i#qcQYS?-d+1};Y`*mJK|-RW=b-bzoVE{AnrNi zRyENc^p!0aG6wjWa=XRs-J61DJAHnd7|E`a|E#*3=dJl&_i{UTi`yNxAY@$VZ0At~ zh^?~XRYY2-W325C9qR&xz)Xk5gnpIhf?&pkchu%%=)SvHb6lqwset^)n!qeljfw|< z16xTEEcA<#z+Nl@wwPW3XS{+|of?Ux>|K5;;C4`-r#nKBrxR;U-f^;tD+XlIm3$t! za9%BXj=u`?*g8q|#(Rx5(6WcElRl|zo_Z&i>VhG|_OB$&9*zH4H`Hf5r=MrCrFuW( zHs41}gl~!)V}mu?M#LsDYmi|x<&NO-Jq&|#u@}w#EAxL=#xUL^VrT8i(VI5oBXyPl zmmUxw&(WXdch&lXS9rsZ6E_wDhnhFne!KL3i;AYitF7>EkKGv;mF9Q-_~ZX4PO=af Xe{#&kH6ZQB_XSXPj<%K7grxrfI;gbq literal 0 HcmV?d00001 diff --git a/icons/mob/human_races/vox/r_def_voxbrn.dmi b/icons/mob/human_races/vox/r_def_voxbrn.dmi new file mode 100644 index 0000000000000000000000000000000000000000..54bc29d92e737b7f7c970ff56ce53cdeb08bc3c1 GIT binary patch literal 2053 zcmZ8i2UL^E8vR2kN?D`{Y$%E}6$nx+n9$KcLX%JwOo9oksDx015PAuMh!6xtSOdzc zED}&6pdo~!Ea*~|B3;EOh{@7RLLTmW@0@+_o;h>BZ|2OM@1AeYnX4XdC*`DnmIeSo z&Kco&3IIUcAqdz3-lj`ce&}s-^FX1UI2;ZZ4!P=UNJi;gbkriA+=GN$#}I623Gg#6 z@M9+11C~NXBaqPT6Dq1;R~u_DOSN+VKm!2el{{79rl%nQfk0qdz_wIajiJJidm>M{ zc>%Vchkw~l8e-9Yk&ZzT`0!v-WN;`E0AfmV^5N2Lrn2ehH}*( z$$Y5{{@#II>6*I~RwvqZvA;*x2NAAIQ5+Rs{Iu;H0Fp#f zZ_n6XQl7J|wQP6FuPpQ`OLO(7e%7F~>#}}*lu~f`cZ+dd#5?y&KYC`M1|6e1)N*u6 z&XD0?Z=ezLc7t4OPPd2QIk-RZu}OpO796$X_Y-WcsYqT!sjS%D2`=9Xq}%`z)RzZU zhNh3ocib$Oo@MkI*yHiYk=w=0+Nt z=89x!B!75yc6O-EP|af?V+c=(j@sT(GJk%)a+DbD)t@9}G~IY!z7_o3Y)@&ZQ>Cz= zpn)eoGxOIuOH1|YgOzU$Dscrv`Df0lib!bYbPmY-j{~!5Fr!7EHIU+uNBa+Oo|Xme z&TE&|KaaX)fap}JxDYfvl19n1@N}LNXf8J`U^`D!3W0kCX1A}NTDx5wZf?x%)@JeI zV_S61^ovAVXSnj}W{ci4U5T*?|IqzAA}pRT6n3&nrCFaKJh>aQ(1ChPTlc(KDzf{H`H}t( zSGHn;9oFvyzofdou@QmAIE*8i|5i6l&b&|6p-e|`+gaw#>kIHkK@smOaPQ@5_s%td z&5BBBZV;I`eqj$i=W4@b)|oz1)dG6mZsoe}$>kR9kl2-xDhHn4(q&=a6hA;wDQt&3 zdZ+7KtHhH{WW>RhzC&2M%OJbtdf$VXq<(hZ;X5{JRTSAvVGlXv*3k|5WJAu4UMal% z{R+^Q(UUR(hSM*`O6nD>m(;#?=ymA+$iPPu_Sz2?6LT7~E|uCGPW}wRd6GuK^2%hJ zGK^JB_SMOqdAY}X%PoweKH827whU(_c1U$uKjSQ0A9zLc{B+#=3!$I(du^)LPmu|% zg#%Bbw$_FpEk&LmlYF=Qu>q&nq*^y1Ey*!2k3_uO7vLl3>l3PBs;yTJ#%wxAa;StC03_ePK(OK8h8>Vu zh1J3Iuoin7%i6JpY92KyJt-K>V<@n!C6Gx_=p7>Evv2dLtJ_^b6gc zT#^8`RZ+SI%ZPA`cidrMU!)R}?YfjSsPRG&MxP3Z5k7(Jx#wx^-7P^VBL1;1fRnW- z81Q$noh;7AxFiMa&%}9_(u&OKuOT%j#>k}IE6)U+F3O8cHz~x)|Fe+2~m8t zkP9we(2C{r)}X#y$0-3A|A{7Q?x=mrXAR+r_Y&!+P(pAm3wF6?xeUJujj`<{$H?D ZMZo0KBbHvl8BsshoSobptLbD5FRnENnN!X!T_$yV-{awm7Mid-ubN=!s9 zPY4^8T&5&pxop$0pZ9(Ldf)S$=iHv>obx&7InQ&F(dVtjgpUaW03e36K{x>bXx{_@ zg1r0cN}VfaU)7@RFqRYw<*bRdo9}sBM-D+6b{!nG0p}6B-$2TIBR05 z54A$w$dumYIGzGzWo1p|fPI`Mv`F`T5TFRB^A`ZKZ<81Ioz|Ne*9b(wHGKHxu!zfq zPymQ3PS1i0cSA(u138i^Qz$M~3tZuUslkWu1%6DKXDVcAWx2`_ zt(vy$>j7%~#S@k#*Q3?GbSammjyVbwx@Rw_`Q7nvs&y`d`dlo(nPHJ-y=i+Xs_7b6$^fgHv3jhLqNQ5~is(7VD1V5&KurDSnz~kcb%V!44zUog| zsYlp*Gr?IBr;rh<{gJ1ec4On=wHwno)$K#5ydwVn6#xK{D}eDZ3y~}${Tx3Sh^%ov zPm<6NmMI(rn%lJ8dk?6Es9ZJ@Ik@3)+M_(lSJ$lmJ+sT70#=wwjJxOW^W?WdAlZFvanAL#r}_%%WPILgKPD4gQ^nOOMJTMzsr7H1t*XEL)*V3ED5!lEZ#f zqsyxAIC|R#r`9qOE33tZCD3tof7-qC%cQ-rRyg!8fB@im>|>*ngj?4FWf9j(u=PG= zX}Y(r-e4yK*2H9`5inM_0wyQYB!0;Td3^2ovzE=*vG?s$-+=NF+c|8IZ9O?B&B5x4 zNH436;1#8aoQdHoOU3@t&-Nbz(>a34TQ#Lxn2aa%?1xgO z%udYbHuG=7qi`njnYLl!2?K*9Jqsn4J*qy(SM63PJ#6jj2Sc8>3NYjO$A*X8D^g@D zb2Er_awFkVVMT%858usj`WVc1@{Jr2aG~8wFt`{g&e-rT;44^8+W|)tGk_}S?&DJy z#c9u`Txq;)Lyep!fuq!cM=%RqHNVHVWA7%#ntBqPE#B+O(;>Pdg=sHZUh5^s2lp!a z9LId_Jkhk7Y@Sq%7;KdhXjqsW3OBM^EMCEt+7rf7yPocCY)+B+ng2uMsZP2lwedN4 z&i5t3c45W!H^=@v_rA|43z+n`&zP-mZ9BvAx4U}OU=(ZKpD8^GnH=JCb@2^axBOtX zURFhTnV=q>Ti_Y)(=>PS_vEPIoIymqq0E<_64zJ#AM&YarjzDB<--+}mMR3XQB!Ai z0(%YQZ`}{&cClJXqw_UY{>31iw{gd(&oR;(5ubvl*TqY>+3vNP*bZlR5#gXdf_s^K zh&ywtE@WAmT*uAu;d)BopKUo{gzPcKw=L=iGhBXF;@_KJ0-2LgjV|rLBd?S7`W+5W z!}WtxUh~p~hIa{2bE0B}c!Hb_hd-*bKV{w+#5pp1fPLhg1A}_BiL1G-rO`}WqerkC zbyOpp>4_>Mw|IX_6|*Rs@!j`XD35%?4upmtj#w%{9|Q>!Qv_E|RVv9~zw z-kKx>t2PHW>AqSzVN3t(ee4qjT;8Lai@5>ON!YgeJ~N*8`#AX;?%F^=_Bho)C)2yC zg-cPVl5(8xm+dm>H~QyXl8Q;w>71;AlDFyK&2`(_GSAE|6XHbUj60Hz<$i3Z=9}*B z3^sO_z)GdHD;KGq}B9i?~?R-NgyF zWK~s=j8wa1L^O@HJFQtn97%i&Uh;;hE6xVa zOF7!P7x??@)x%qFJ9r7m2T@`a z1o?kf#mknFnjiZ#8iBQQi7F*TwRyQacc0QY@~#gW@7K}!Ke)|qNrs5`HQYG4%6DyW zjNkbNJ(}@}p^e?6#(I{ze`)_E-x3c@OtqDee+h$&#vS3SpyiM~N@#QbX-hx)}yATt2vW(K+ge>hsEl^kG^6>DM+y zKjdQCFg8GnzHzpTZPL3~dvCb$P6~bFpF{dv5))@}Szz>*1zKnOuK?2WJfZ>abLany CvJ%<= literal 0 HcmV?d00001 diff --git a/icons/mob/human_races/vox/r_vox.dmi b/icons/mob/human_races/vox/r_vox.dmi new file mode 100644 index 0000000000000000000000000000000000000000..2e2427d7ebbb3c541720d499892ec6c28848e0cc GIT binary patch literal 2678 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 literal 0 HcmV?d00001 diff --git a/icons/mob/human_races/vox/r_voxbrn.dmi b/icons/mob/human_races/vox/r_voxbrn.dmi new file mode 100644 index 0000000000000000000000000000000000000000..01fe8a736140859b5359a3db90c942e1054f4768 GIT binary patch literal 2678 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 GjQ$UwYfP#D literal 0 HcmV?d00001