From 46bd2ce7e6b7ec27a0ded3222eff430135de8b18 Mon Sep 17 00:00:00 2001 From: Ater Ignis Date: Fri, 16 Nov 2012 15:19:20 +0400 Subject: [PATCH] human icon generation update, tajarnan darkseeing *lying icon generated from standing one *sprites for dismembering major races (tajarnan,skrell,soghun) *tajarnans can see in darkness better than others --- code/datums/datacore.dm | 34 +-- code/defines/procs/icon_procs.dm | 10 + code/game/dna.dm | 20 +- code/modules/mob/living/carbon/human/human.dm | 23 ++- code/modules/mob/living/carbon/human/life.dm | 6 +- .../mob/living/carbon/human/update_icons.dm | 194 ++++++++++-------- icons/mob/human_races/r_human.dmi | Bin 0 -> 8316 bytes icons/mob/human_races/r_lizard.dmi | Bin 0 -> 5698 bytes icons/mob/human_races/r_skeleton.dmi | Bin 0 -> 2221 bytes icons/mob/human_races/r_skrell.dmi | Bin 0 -> 1873 bytes icons/mob/human_races/r_tajaran.dmi | Bin 0 -> 9309 bytes 11 files changed, 177 insertions(+), 110 deletions(-) create mode 100644 icons/mob/human_races/r_human.dmi create mode 100644 icons/mob/human_races/r_lizard.dmi create mode 100644 icons/mob/human_races/r_skeleton.dmi create mode 100644 icons/mob/human_races/r_skrell.dmi create mode 100644 icons/mob/human_races/r_tajaran.dmi diff --git a/code/datums/datacore.dm b/code/datums/datacore.dm index 7358096104d..2522523e4d7 100644 --- a/code/datums/datacore.dm +++ b/code/datums/datacore.dm @@ -111,29 +111,31 @@ proc/get_id_photo(var/mob/living/carbon/human/H) var/g = "m" if (H.gender == FEMALE) g = "f" + + var/icon/icobase switch(H.get_species()) if("Tajaran") - preview_icon = new /icon('icons/effects/species.dmi', "tajaran_[g]_s") - preview_icon.Blend(new /icon('icons/effects/species.dmi', "tajtail_s"), ICON_OVERLAY) + icobase = 'icons/mob/human_races/r_tajaran.dmi' if( "Soghun") - preview_icon = new /icon('icons/effects/species.dmi', "lizard_[g]_s") - preview_icon.Blend(new /icon('icons/effects/species.dmi', "sogtail_s"), ICON_OVERLAY) + icobase = 'icons/mob/human_races/r_lizard.dmi' if("Skrell") - preview_icon = new /icon('icons/effects/species.dmi', "skrell_[g]_s") + icobase = 'icons/mob/human_races/r_skrell.dmi' else - preview_icon = new /icon('human.dmi', "torso_[g]_s") - preview_icon.Blend(new /icon('human.dmi', "chest_[g]_s"), ICON_OVERLAY) - preview_icon.Blend(new /icon('human.dmi', "groin_[g]_s"), ICON_OVERLAY) - preview_icon.Blend(new /icon('human.dmi', "head_[g]_s"), ICON_OVERLAY) + icobase = 'icons/mob/human_races/r_human.dmi' - for(var/datum/organ/external/E in H.organs) - if(E.status & ORGAN_CUT_AWAY) continue + preview_icon = new /icon(icobase, "torso_[g]") + var/icon/temp + temp = new /icon(icobase, "groin_[g]") + preview_icon.Blend(temp, ICON_OVERLAY) + temp = new /icon(icobase, "head_[g]") + preview_icon.Blend(temp, ICON_OVERLAY) - var/icon/temp = new /icon('human.dmi', "[E.name]_s") - if(E.status & ORGAN_ROBOT) - temp.MapColors(rgb(77,77,77), rgb(150,150,150), rgb(28,28,28), rgb(0,0,0)) - - preview_icon.Blend(temp, ICON_OVERLAY) + for(var/datum/organ/external/E in H.organs) + if(E.status & ORGAN_CUT_AWAY || E.status & ORGAN_DESTROYED) continue + temp = new /icon(icobase, "[E.name]") + if(E.status & ORGAN_ROBOT) + temp.MapColors(rgb(77,77,77), rgb(150,150,150), rgb(28,28,28), rgb(0,0,0)) + preview_icon.Blend(temp, ICON_OVERLAY) // Skin tone if(H.get_species() == "Human") diff --git a/code/defines/procs/icon_procs.dm b/code/defines/procs/icon_procs.dm index c8d731bcde1..ce56408ead4 100644 --- a/code/defines/procs/icon_procs.dm +++ b/code/defines/procs/icon_procs.dm @@ -7,6 +7,16 @@ #define TO_HEX_DIGIT(n) ascii2text((n&15) + ((n&15)<10 ? 48 : 87)) icon + proc/MakeLying() + var/icon/I = new(src,dir=SOUTH) + I.BecomeLying() + return I + + proc/BecomeLying() + Turn(90) + Shift(SOUTH,6) + Shift(EAST,1) + // Multiply all alpha values by this float proc/ChangeOpacity(opacity = 1.0) MapColors(1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,opacity, 0,0,0,0) diff --git a/code/game/dna.dm b/code/game/dna.dm index d4628e6f9a7..80a250620f0 100644 --- a/code/game/dna.dm +++ b/code/game/dna.dm @@ -399,9 +399,17 @@ var/old_mutations = M.mutations M.mutations = list() - M.see_in_dark = 2 - M.see_invisible = 0 +// M.see_in_dark = 2 +// M.see_invisible = 0 + if(PLANT in old_mutations) + M.mutations.Add(PLANT) + if(SKELETON in old_mutations) + M.mutations.Add(SKELETON) + if(FAT in old_mutations) + M.mutations.Add(FAT) + if(HUSK in old_mutations) + M.mutations.Add(HUSK) if(ismuton(NOBREATHBLOCK,M)) if(probinj(45,inj) || (mNobreath in old_mutations)) @@ -478,9 +486,9 @@ if (isblockon(getblock(M.dna.struc_enzymes, XRAYBLOCK,3),XRAYBLOCK)) if(probinj(30,inj) || (XRAY in old_mutations)) M << "\blue The walls suddenly disappear." - M.sight |= (SEE_MOBS|SEE_OBJS|SEE_TURFS) - M.see_in_dark = 8 - M.see_invisible = 2 +// M.sight |= (SEE_MOBS|SEE_OBJS|SEE_TURFS) +// M.see_in_dark = 8 +// M.see_invisible = 2 M.mutations.Add(XRAY) if (isblockon(getblock(M.dna.struc_enzymes, NERVOUSBLOCK,3),NERVOUSBLOCK)) M.disabilities |= NERVOUS @@ -1648,4 +1656,4 @@ src.add_fingerprint(usr) src.updateUsrDialog() return -/////////////////////////// DNA MACHINES \ No newline at end of file +/////////////////////////// DNA MACHINES diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index a8f55c066f8..d164c4fb9d9 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -821,6 +821,12 @@ /mob/living/carbon/human/proc/morph() set name = "Morph" set category = "Superpower" + + if(stat!=CONSCIOUS) + reset_view(0) + remoteview_target = null + return + if(!(mMorph in mutations)) src.verbs -= /mob/living/carbon/human/proc/morph return @@ -894,6 +900,12 @@ /mob/living/carbon/human/proc/remotesay() set name = "Project mind" set category = "Superpower" + + if(stat!=CONSCIOUS) + reset_view(0) + remoteview_target = null + return + if(!(mRemotetalk in src.mutations)) src.verbs -= /mob/living/carbon/human/proc/remotesay return @@ -917,12 +929,19 @@ set name = "Remote View" set category = "Superpower" + if(stat!=CONSCIOUS) + remoteview_target = null + reset_view(0) + return + if(!(mRemote in src.mutations)) + remoteview_target = null reset_view(0) src.verbs -= /mob/living/carbon/human/proc/remoteobserve return if(client.eye != client.mob) + remoteview_target = null reset_view(0) return @@ -930,15 +949,17 @@ for(var/mob/living/carbon/h in world) var/turf/temp_turf = get_turf(h) - if(temp_turf.z != 1 && temp_turf.z != 5) //Not on mining or the station. + if((temp_turf.z != 1 && temp_turf.z != 5) || h.stat==DEAD) //Not on mining or the station. Or dead continue creatures += h var/mob/target = input ("Who do you want to project your mind to ?") as mob in creatures if (target) + remoteview_target = target reset_view(target) else + remoteview_target = null reset_view(0) /mob/living/carbon/human/proc/get_visible_gender() diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 92522f701be..6908d550ae4 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -1295,9 +1295,13 @@ sight &= ~(SEE_TURFS|SEE_MOBS|SEE_OBJS) if(dna) switch(dna.mutantrace) - if("lizard","metroid") + if("metroid") see_in_dark = 3 see_invisible = SEE_INVISIBLE_LEVEL_ONE + if("lizard") + see_in_dark = 3 + if("tajaran") + see_in_dark = 5 else see_in_dark = 2 diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index 13c2a87ac08..5de8d28fd18 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -218,107 +218,127 @@ proc/get_damage_icon_part(damage_state, body_part) /mob/living/carbon/human/proc/update_body(var/update_icons=1) if(stand_icon) del(stand_icon) if(lying_icon) del(lying_icon) - if(dna && dna.mutantrace) return + + var/husk_color_mod = rgb(96,88,80) + var/hulk_color_mod = rgb(24,72,24) + var/plant_color_mod = rgb(144,224,144) var/husk = (HUSK in src.mutations) //100% unnecessary -Agouri //nope, do you really want to iterate through src.mutations repeatedly? -Pete var/fat = (FAT in src.mutations) + var/hulk = (HULK in src.mutations) var/skeleton = (SKELETON in src.mutations) + var/plant = (PLANT in src.mutations) var/g = "m" if(gender == FEMALE) g = "f" - // whether to draw the individual limbs - var/individual_limbs = 0 - - //Base mob icon - if(husk) - stand_icon = new /icon('icons/mob/human.dmi', "husk_s") - lying_icon = new /icon('icons/mob/human.dmi', "husk_l") - else if(fat) - stand_icon = new /icon('icons/mob/human.dmi', "fatbody_s") - lying_icon = new /icon('icons/mob/human.dmi', "fatbody_l") - else if(skeleton) - stand_icon = new /icon('icons/mob/human.dmi', "skeleton_s") - lying_icon = new /icon('icons/mob/human.dmi', "skeleton_l") + var/icon/icobase + if(skeleton) + icobase = 'icons/mob/human_races/r_skeleton.dmi' + else if(dna) + switch(dna.mutantrace) + if("tajaran") + icobase = 'icons/mob/human_races/r_tajaran.dmi' + if("lizard") + icobase = 'icons/mob/human_races/r_lizard.dmi' + if("skrell") + icobase = 'icons/mob/human_races/r_skrell.dmi' + else + icobase = 'icons/mob/human_races/r_human.dmi' else - stand_icon = new /icon('icons/mob/human.dmi', "torso_[g]_s") - lying_icon = new /icon('icons/mob/human.dmi', "torso_[g]_l") - individual_limbs = 1 + icobase = 'icons/mob/human_races/r_human.dmi' - // Draw each individual limb - if(individual_limbs) - stand_icon.Blend(new /icon('icons/mob/human.dmi', "chest_[g]_s"), ICON_OVERLAY) - lying_icon.Blend(new /icon('icons/mob/human.dmi', "chest_[g]_l"), ICON_OVERLAY) + if(!skeleton) + stand_icon = new /icon(icobase, "torso_[g][fat?"_fat":""]") + if(husk) + stand_icon.ColorTone(husk_color_mod) + else if(hulk) + stand_icon.ColorTone(hulk_color_mod) + else if(plant) + stand_icon.ColorTone(plant_color_mod) + else + stand_icon = new /icon(icobase, "torso") - var/datum/organ/external/head = get_organ("head") - if(head && !(head.status & ORGAN_DESTROYED)) - stand_icon.Blend(new /icon('icons/mob/human.dmi', "head_[g]_s"), ICON_OVERLAY) - lying_icon.Blend(new /icon('icons/mob/human.dmi', "head_[g]_l"), ICON_OVERLAY) + var/datum/organ/external/head = get_organ("head") + var/has_head = 0 + if(head && !(head.status & ORGAN_DESTROYED)) + has_head = 1 - for(var/datum/organ/external/part in organs) - if(!istype(part, /datum/organ/external/groin) \ - && !istype(part, /datum/organ/external/chest) \ - && !istype(part, /datum/organ/external/head) \ - && !(part.status & ORGAN_DESTROYED)) - var/icon/temp = new /icon('human.dmi', "[part.icon_name]_s") - if(part.status & ORGAN_ROBOT) temp.MapColors(rgb(77,77,77), rgb(150,150,150), rgb(28,28,28), rgb(0,0,0)) + for(var/datum/organ/external/part in organs) + if(!istype(part, /datum/organ/external/chest) && !(part.status & ORGAN_DESTROYED)) + var/icon/temp + if(istype(part, /datum/organ/external/groin)) + if(skeleton) + temp = new /icon(icobase, "groin") + else + temp = new /icon(icobase, "groin_[g]") + else if(istype(part, /datum/organ/external/head)) + if(skeleton) + temp = new /icon(icobase, "head") + else + temp = new /icon(icobase, "head_[g]") + else + temp = new /icon(icobase, "[part.icon_name]") + if(part.status & ORGAN_ROBOT) + temp.GrayScale() + else if(!skeleton) + if(husk) + temp.ColorTone(husk_color_mod) + else if(hulk) + temp.ColorTone(hulk_color_mod) + else if(plant) + temp.ColorTone(plant_color_mod) + + if(part.icon_position&(LEFT|RIGHT)) + var/icon/temp2 = new('icons/mob/human.dmi',"blank") + temp2.Insert(new/icon(temp,dir=NORTH),dir=NORTH) + temp2.Insert(new/icon(temp,dir=SOUTH),dir=SOUTH) + if(!(part.icon_position & LEFT)) + temp2.Insert(new/icon(temp,dir=EAST),dir=EAST) + if(!(part.icon_position & RIGHT)) + temp2.Insert(new/icon(temp,dir=WEST),dir=WEST) + stand_icon.Blend(temp2, ICON_OVERLAY) + temp2 = new('icons/mob/human.dmi',"blank") + if(part.icon_position & LEFT) + temp2.Insert(new/icon(temp,dir=EAST),dir=EAST) + if(part.icon_position & RIGHT) + temp2.Insert(new/icon(temp,dir=WEST),dir=WEST) + stand_icon.Blend(temp2, ICON_UNDERLAY) + else stand_icon.Blend(temp, ICON_OVERLAY) - temp = new /icon('human.dmi', "[part.icon_name]_l") - if(part.status & ORGAN_ROBOT) temp.MapColors(rgb(77,77,77), rgb(150,150,150), rgb(28,28,28), rgb(0,0,0)) - lying_icon.Blend(temp , ICON_OVERLAY) - - stand_icon.Blend(new /icon('human.dmi', "groin_[g]_s"), ICON_OVERLAY) - lying_icon.Blend(new /icon('human.dmi', "groin_[g]_l"), ICON_OVERLAY) - - if (husk) - var/icon/husk_s = new /icon('human.dmi', "husk_s") - var/icon/husk_l = new /icon('human.dmi', "husk_l") - - for(var/datum/organ/external/part in organs) - if(!istype(part, /datum/organ/external/groin) \ - && !istype(part, /datum/organ/external/chest) \ - && !istype(part, /datum/organ/external/head) \ - && (part.status & ORGAN_DESTROYED)) - husk_s.Blend(new /icon('dam_mask.dmi', "[part.icon_name]"), ICON_SUBTRACT) - husk_l.Blend(new /icon('dam_mask.dmi', "[part.icon_name]2"), ICON_SUBTRACT) - - stand_icon.Blend(husk_s, ICON_OVERLAY) - lying_icon.Blend(husk_l, ICON_OVERLAY) //Skin tone - if(!skeleton) + if(!skeleton && !husk && !hulk && !plant) if(s_tone >= 0) stand_icon.Blend(rgb(s_tone, s_tone, s_tone), ICON_ADD) - lying_icon.Blend(rgb(s_tone, s_tone, s_tone), ICON_ADD) else stand_icon.Blend(rgb(-s_tone, -s_tone, -s_tone), ICON_SUBTRACT) - lying_icon.Blend(rgb(-s_tone, -s_tone, -s_tone), ICON_SUBTRACT) - //Eyes - if(!skeleton) - var/icon/eyes_s = new/icon('icons/mob/human_face.dmi', "eyes_s") - var/icon/eyes_l = new/icon('icons/mob/human_face.dmi', "eyes_l") - eyes_s.Blend(rgb(r_eyes, g_eyes, b_eyes), ICON_ADD) - eyes_l.Blend(rgb(r_eyes, g_eyes, b_eyes), ICON_ADD) - stand_icon.Blend(eyes_s, ICON_OVERLAY) - lying_icon.Blend(eyes_l, ICON_OVERLAY) - // Note: These used to be in update_face(), and the fact they're here will make it difficult to create a disembodied head - var/icon/eyes_s = new/icon('icons/mob/human_face.dmi', "eyes_s") - var/icon/eyes_l = new/icon('icons/mob/human_face.dmi', "eyes_l") - eyes_s.Blend(rgb(r_eyes, g_eyes, b_eyes), ICON_ADD) - eyes_l.Blend(rgb(r_eyes, g_eyes, b_eyes), ICON_ADD) - stand_icon.Blend(eyes_s, ICON_OVERLAY) - lying_icon.Blend(eyes_l, ICON_OVERLAY) + if(husk) + var/icon/mask = new(stand_icon) + var/icon/husk_over = new(icobase,"overlay_husk") + mask.MapColors(0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,0) + husk_over.Blend(mask, ICON_ADD) + stand_icon.Blend(husk_over, ICON_OVERLAY) + + if(has_head) + //Eyes + if(!skeleton) + var/icon/eyes_s = new/icon('icons/mob/human_face.dmi', "eyes_s") + eyes_s.Blend(rgb(r_eyes, g_eyes, b_eyes), ICON_ADD) + stand_icon.Blend(eyes_s, ICON_OVERLAY) //Mouth (lipstick!) if(lip_style) //skeletons are allowed to wear lipstick no matter what you think, agouri. stand_icon.Blend(new/icon('icons/mob/human_face.dmi', "lips_[lip_style]_s"), ICON_OVERLAY) - lying_icon.Blend(new/icon('icons/mob/human_face.dmi', "lips_[lip_style]_l"), ICON_OVERLAY) //Underwear if(underwear >0 && underwear < 12) if(!fat && !skeleton) stand_icon.Blend(new /icon('icons/mob/human.dmi', "underwear[underwear]_[g]_s"), ICON_OVERLAY) + + lying_icon = stand_icon.MakeLying() + if(update_icons) update_icons() @@ -417,27 +437,29 @@ proc/get_damage_icon_part(damage_state, body_part) var/fat if( FAT in mutations ) fat = "fat" - var/g = "m" - if (gender == FEMALE) g = "f" +// var/g = "m" +// if (gender == FEMALE) g = "f" //BS12 EDIT if(dna) switch(dna.mutantrace) if("golem","metroid") - overlays_lying[MUTANTRACE_LAYER] = image("icon" = 'icons/effects/genetics.dmi', "icon_state" = "[dna.mutantrace][fat]_l") - overlays_standing[MUTANTRACE_LAYER] = image("icon" = 'icons/effects/genetics.dmi', "icon_state" = "[dna.mutantrace][fat]_s") - if("lizard", "tajaran", "skrell") - overlays_lying[MUTANTRACE_LAYER] = image("icon" = 'icons/effects/species.dmi', "icon_state" = "[dna.mutantrace]_[g]_l") - overlays_standing[MUTANTRACE_LAYER] = image("icon" = 'icons/effects/species.dmi', "icon_state" = "[dna.mutantrace]_[g]_s") - if("plant") - if(stat == DEAD) //TODO - overlays_lying[MUTANTRACE_LAYER] = image("icon" = 'icons/effects/genetics.dmi', "icon_state" = "[dna.mutantrace]_d") - else - overlays_lying[MUTANTRACE_LAYER] = image("icon" = 'icons/effects/genetics.dmi', "icon_state" = "[dna.mutantrace][fat]_[gender]_l") - overlays_standing[MUTANTRACE_LAYER] = image("icon" = 'icons/effects/genetics.dmi', "icon_state" = "[dna.mutantrace][fat]_[gender]_s") + var/icon/I = new('icons/effects/genetics.dmi',"[dna.mutantrace][fat]_s") + overlays_standing[MUTANTRACE_LAYER] = image(I) + overlays_lying[MUTANTRACE_LAYER] = image(I.MakeLying()) +// if("lizard", "tajaran", "skrell") +// overlays_lying[MUTANTRACE_LAYER] = image("icon" = 'icons/effects/species.dmi', "icon_state" = "[dna.mutantrace]_[g]_l") +// overlays_standing[MUTANTRACE_LAYER] = image("icon" = 'icons/effects/species.dmi', "icon_state" = "[dna.mutantrace]_[g]_s") +// if("plant") +// if(stat == DEAD) //TODO +// overlays_lying[MUTANTRACE_LAYER] = image("icon" = 'icons/effects/genetics.dmi', "icon_state" = "[dna.mutantrace]_d") +// else +// overlays_lying[MUTANTRACE_LAYER] = image("icon" = 'icons/effects/genetics.dmi', "icon_state" = "[dna.mutantrace][fat]_[gender]_l") +// overlays_standing[MUTANTRACE_LAYER] = image("icon" = 'icons/effects/genetics.dmi', "icon_state" = "[dna.mutantrace][fat]_[gender]_s") else overlays_lying[MUTANTRACE_LAYER] = null overlays_standing[MUTANTRACE_LAYER] = null - update_body(0) + if(!dna || !(dna.mutantrace in list("golem","metroid"))) + update_body(0) update_hair(0) if(update_icons) update_icons() diff --git a/icons/mob/human_races/r_human.dmi b/icons/mob/human_races/r_human.dmi new file mode 100644 index 0000000000000000000000000000000000000000..3fec1061f6478eacfe9f7fbc006b74f38acc4d4a GIT binary patch literal 8316 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 literal 0 HcmV?d00001 diff --git a/icons/mob/human_races/r_lizard.dmi b/icons/mob/human_races/r_lizard.dmi new file mode 100644 index 0000000000000000000000000000000000000000..70d29e573eb76229f2d7e739005e086b2cbea5d6 GIT binary patch literal 5698 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 N40Nt(zrSQ3^FJxv#Q6XK literal 0 HcmV?d00001 diff --git a/icons/mob/human_races/r_skeleton.dmi b/icons/mob/human_races/r_skeleton.dmi new file mode 100644 index 0000000000000000000000000000000000000000..cbf854161d9918c83fe3689728227c9d1ab417cd GIT binary patch literal 2221 zcmbtWc{JNu8%{82EQ1kL6)n>u*0wXKwDu*fp+c!+iBi9)iY`Kt=1Ynhrb-npa~P?j zwI}4nGNg3c(b^JA5s5vW#M;nIg4(|HkNLjud^0_#=gc4XKIc96-uJ%ed7iucc+SgR z38D=Ffj~+K4;Q2aXFfK0SxK*L7CkEgQnKF#tV?8E#Er|>u$QmKfJe44M>IYg4P8bD0i$)tac0-v)5e**SXm;^* z4@cydy^f_Nxb4provGVBZ`?u(xLX*YMAzDsHO>0LEs}fmH3%fvjc{@FODtZQw93?p z)OoeGmu4`bR_2wTrbIx|N}^6}lg>YG)P0Xg0cI z!W1^`ZiULzcYHZ}$`K1tifM0c|Bq>ES4yg4?y=ZxbNu9#h0=g+K$0M$?`tgqo~-vx zoB3O@_w_xyyA}SO-IsFTlzB%BSBeHW9nAHkXh(3Vl1K(Q%y;MJI31*lL@e^dwfpKs zWp79DAt{+Oc@>qz4h|Whe;62f5E-r2MiBEKq;!xJs3kMbz-i`MiVSO=DUf6TYV{vR zp4WfL8oeHduj1xsALo?B`KX^S;Uh44g-)@1O@dxSe+K~`iN4U=*cTo=1{Z&em_1#| z*NWc434-vCmTnQJaJ@o!6>PYR{w&uYAS=HHfliyB*Zx`D6uo{|oGE0sP|T;mj~TMYd_HQ498 zK^}3|n{Y!wfzkjhpr{ z=?%;Feu9|ZO8$k1kxj}G3EvfQ9@p4Y1F57U38zjv(*JWB2Zqp&x6OY#1=AKPVlm>1 zobF4F?>B0R9*pg?YInwnLU{9sn(n1snGD09ZR2>I>wc>GxmZ5qXX$C*->md=Pv9oT ze!tn>t|&-z%>Ct>+7V`)aLW4RzC5hN_-7i{+AN=aK$Au)TFZ}AfeMnU2YK0+xF#4= zxWl2ZZxLeON41#pgMX*nTc)$XeN&pE;EdJPT-$xV)3Z}J;gn!{JTedvVW@lcS!Pu}H zCg(S>d*gFZ%Tbd~2urWKmIwgcHJcjLcCB*|HYiAvN;dVjl5DCpY-StNK#_W4(F&zx z$Jprjiy$_*APy{y{=)2}g67gC8CV#>P;_!85zYVzTP)jv{^?QPhNQq3v#XsO!e*N7 z?&HmuI)c5fcRlVdgG#VSPaJ-KZrscln(a}d>A-v4NgaP==TpZM^yCn z^RdK5_Yl#B2Wkjh-=-z_1#wZ?`0Qe&{G+RX=WlH}R>cwxTot(4&oU;cK?k5Pxz`*D zk(av_Up~;(+&tpjsm(Q1{PVKS$_6`!7?{x-ZlCiH1v`ftm{l~~&hdv(l*2|hh5S^{ zsQtnS)k8?=vX&(;o{j7{qH`|DxN|e2o<+)OkAi1Q-+$~TNUI{<>G}{h!QOs)>?=Lw z$h>J(hJt$iV`cncgHcYd8@PJ<%buR}H)~GtKR5myKeGwP5(?miD}t?N?I~@+F5-GIf$;@xC*wKapyTk{pK@~i=1JnF>aSfOxt zW1_DXV)c$K$J)qNNJO(pN5l)7LhTyhzkX!~y%VAp2m;w1gLu{|5-+>g7`J6qfRD>;A?s literal 0 HcmV?d00001 diff --git a/icons/mob/human_races/r_skrell.dmi b/icons/mob/human_races/r_skrell.dmi new file mode 100644 index 0000000000000000000000000000000000000000..daf33ee223e48d80e0e53cc9d06ba8ca6e8b2016 GIT binary patch literal 1873 zcmZ8hX;_kp7XAoaP;eZ#QmpJz$ficA9JNIyTuR3+#j?@TqFhtlDpXY5MsX>Z)Uqhe zOdBjN5T(_SQIaCX*#bl+gP`R>%4lCtdEO`>oClhfl;E^h^LauMN=YbOZu% zdLQs-ql5Y1OhX)O9RbYDfX7Z!6^3&TF}o3r5AqHO@h12K0P%5Z_bHiXGz{Pj8pm6% zcJqb`wc=nM$|=mdez|5EZ+~u#pnA;VN^N3__7`91ul_34I}#?WR08XKdDi*1QK{TL zqpNjZJHDn#ScyD(hIXR#9JnJ(31#n^{Cp48<1IVkX|8ipWdaMGTk${>maJnpI`Uz_ zpLVxG{cQTa9~BE!labF8Q+_qLNbhk$yIy#bBrHS`eZ`4uQMDHqI3zJ2oa0&>Eolee z;V<#Z((DY5_;`UD5k8DkVo9j@a`lv74A$59FFdAC1yV_3f#aaRFR;tn`66`K6Jg$9qnvlC}n&`~saGtP@nC4e zvZ{04ONBIwNy}4(5h!$zKxN(1im5lMH*3y0jU?)W7I|QWG{XGHDn;a&;kHJUA@Q)5 z`?)RBLTeZXwT+H4)K^TiVRF!pL{<4Hf1`hJ|Hn*SLVHo#lec1!H{#81`#I>-Pu(TB z-QP6DzS~G#7xyX4Hs}d&vLJaHy9*aDhc{qb9_AG4CSYx?m=!NlLbKf9RY9*2S!+PJ z60fox^#!E!l+1?xrm2OyVpC$-VyGc|B7CJiSqDfJ{!9N z-I?RRno1v-ns;1xvT%$TO^zc*4d3Sn2C7N=lNW(?9qOUKx(t?#wJe6G@uiU-vq{#4 z{g|f8cRBV(R$glEx&Z0&LxQS?Tw@uNXRzQ4p{f}Dx%+!=g&j#`&gwYKr3w18Bo~Y>ZaX|W$S*p;1iDzFgVkng4n{1+-q&J@VZ`m*7z-(wY= zj@w?=tq_cskG(`Cd*Z#1p*m}QzTRmvmJb@$`Zmp2QHCV=&2s6rK}p=|I(plw;vTXDiz70*2ZS? zGiA%m%XsQx(sS6E#;T}Gn^z)@!epZiI5CpA-hOz?9G`ikpyF&^b!2)pBR`shSl3Wp z=OCo<3h1IpO7uN339?(xbS~vK#QI>QLw{dC+;w$&X?3;amH0@kEA>1cqXX`^df$k_z=^au z1ir4FVJ6M8_qtSIF*1ie{-mm{_u}l3L`Xn&iBoZz33P}=@(_O6_-B=~N!2kg^3*SA zYnPYY^WY+<1_-QxN2psrjLnKUS2^hDkEM`Afb4dg=d~lqABKR3|w3V)QEaMT{A&*Yft=5q7p^530FyDAkyw#;oMLw>lIzFakZK`d_*x#_lWQzI>ATm8+L zP|(T$Yl7c84Q0f(4*nc^l2kJ+ToC!+IheyMny2BO*e?|nmLH2m!2S8GrOPb^sFoal zC1gw{iz3>+GG+`OU<@^w*ND%)9yyM2^zpy0*l7&LBVNxz+_Sf!+xQ0)nxxjfc>}}q rsm?*m39emDn&WR+cKGdvV*=f5i(b&vTE_~?`; literal 0 HcmV?d00001 diff --git a/icons/mob/human_races/r_tajaran.dmi b/icons/mob/human_races/r_tajaran.dmi new file mode 100644 index 0000000000000000000000000000000000000000..def8ba83d27f225f199cb83902fa82c0289713b2 GIT binary patch literal 9309 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