From ca495b2b9b1c2935a4c24a858e95236a4e78efc4 Mon Sep 17 00:00:00 2001 From: KasparoVy <12377767+KasparoVy@users.noreply.github.com> Date: Sat, 10 Aug 2019 05:43:50 -0400 Subject: [PATCH] Adds Sprites for Some Armalis+Vox Gear & Species-fitting Inhand Icons, etc. Adds sprites for all Vox & Armalis earwear Adds sprites for Armalis default backpack, nitrogen tank (non-'emergency' back & belt) all breathmask variations Fixes an issue where Vox Armalis wouldn't be rendered with the proper in-hand icons for their massive noise cannons. Fixes an issue where you couldn't species-fit earwear. Fixes an issue where Vox Armalis couldn't wear the 'Vox' breath mask. --- .../objects/items/devices/radio/headset.dm | 4 +++ .../objects/items/weapons/storage/backpack.dm | 3 +- .../objects/items/weapons/tanks/tank_types.dm | 3 +- code/modules/clothing/clothing.dm | 4 +++ code/modules/clothing/ears/ears.dm | 2 +- code/modules/clothing/masks/breath.dm | 3 +- .../mob/living/carbon/human/update_icons.dm | 32 ++++++++++++------ code/modules/projectiles/guns/alien.dm | 1 + icons/mob/species/armalis/back.dmi | Bin 0 -> 2359 bytes icons/mob/species/armalis/belt.dmi | Bin 0 -> 837 bytes icons/mob/species/armalis/ears.dmi | Bin 0 -> 1869 bytes icons/mob/species/armalis/mask.dmi | Bin 0 -> 614 bytes icons/mob/species/vox/ears.dmi | Bin 0 -> 1889 bytes 13 files changed, 38 insertions(+), 14 deletions(-) create mode 100644 icons/mob/species/armalis/back.dmi create mode 100644 icons/mob/species/armalis/belt.dmi create mode 100644 icons/mob/species/armalis/ears.dmi create mode 100644 icons/mob/species/armalis/mask.dmi create mode 100644 icons/mob/species/vox/ears.dmi diff --git a/code/game/objects/items/devices/radio/headset.dm b/code/game/objects/items/devices/radio/headset.dm index 610c257b03f..27d27b11a9b 100644 --- a/code/game/objects/items/devices/radio/headset.dm +++ b/code/game/objects/items/devices/radio/headset.dm @@ -4,6 +4,10 @@ var/radio_desc = "" icon_state = "headset" item_state = "headset" + sprite_sheets = list( + "Vox" = 'icons/mob/species/vox/ears.dmi', + "Vox Armalis" = 'icons/mob/species/armalis/ears.dmi' + ) //We read you loud and skree-er. materials = list(MAT_METAL=75) subspace_transmission = TRUE canhear_range = 0 // can't hear headsets from very far away diff --git a/code/game/objects/items/weapons/storage/backpack.dm b/code/game/objects/items/weapons/storage/backpack.dm index bbf157ae4d7..ddae7d87f85 100644 --- a/code/game/objects/items/weapons/storage/backpack.dm +++ b/code/game/objects/items/weapons/storage/backpack.dm @@ -19,8 +19,9 @@ burntime = 20 sprite_sheets = list( "Vox" = 'icons/mob/species/vox/back.dmi', + "Vox Armalis" = 'icons/mob/species/armalis/back.dmi', "Grey" = 'icons/mob/species/grey/back.dmi' - ) + ) //For Armalis anything but this and the nitrogen tank will use the default backpack icon. /obj/item/storage/backpack/attackby(obj/item/W as obj, mob/user as mob, params) playsound(src.loc, "rustle", 50, 1, -5) diff --git a/code/game/objects/items/weapons/tanks/tank_types.dm b/code/game/objects/items/weapons/tanks/tank_types.dm index d3814b1af98..047f3d4ef3a 100644 --- a/code/game/objects/items/weapons/tanks/tank_types.dm +++ b/code/game/objects/items/weapons/tanks/tank_types.dm @@ -189,7 +189,7 @@ obj/item/tank/emergency_oxygen/double/empty/New() desc = "A tank of nitrogen." icon_state = "oxygen_fr" distribute_pressure = ONE_ATMOSPHERE*O2STANDARD - + sprite_sheets = list("Vox Armalis" = 'icons/mob/species/armalis/back.dmi') //Do it for Big Bird. /obj/item/tank/nitrogen/New() ..() @@ -206,6 +206,7 @@ obj/item/tank/emergency_oxygen/double/empty/New() desc = "A high-tech nitrogen tank designed specifically for Vox." icon_state = "emergency_vox" volume = 25 + sprite_sheets = list("Vox Armalis" = 'icons/mob/species/armalis/belt.dmi') //Do it for Big Bird. /obj/item/tank/emergency_oxygen/vox/New() ..() diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index 4bbf68b4b7f..bea1f7bfaf2 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -90,6 +90,10 @@ throwforce = 2 slot_flags = SLOT_EARS burn_state = FIRE_PROOF + sprite_sheets = list( + "Vox" = 'icons/mob/species/vox/ears.dmi', + "Vox Armalis" = 'icons/mob/species/armalis/ears.dmi' + ) //We read you loud and skree-er. /obj/item/clothing/ears/attack_hand(mob/user) if(!user) diff --git a/code/modules/clothing/ears/ears.dm b/code/modules/clothing/ears/ears.dm index 2e3a1d40bda..74164f0e245 100644 --- a/code/modules/clothing/ears/ears.dm +++ b/code/modules/clothing/ears/ears.dm @@ -14,7 +14,7 @@ desc = "Unce unce unce unce." var/on = 0 icon_state = "headphones0" - item_state = "earmuffs" + item_state = null actions_types = list(/datum/action/item_action/toggle_headphones) burn_state = FLAMMABLE diff --git a/code/modules/clothing/masks/breath.dm b/code/modules/clothing/masks/breath.dm index df229f5b9c3..638aa3c2c84 100644 --- a/code/modules/clothing/masks/breath.dm +++ b/code/modules/clothing/masks/breath.dm @@ -12,6 +12,7 @@ burn_state = FIRE_PROOF sprite_sheets = list( "Vox" = 'icons/mob/species/vox/mask.dmi', + "Vox Armalis" = 'icons/mob/species/armalis/mask.dmi', "Unathi" = 'icons/mob/species/unathi/mask.dmi', "Tajaran" = 'icons/mob/species/tajaran/mask.dmi', "Vulpkanin" = 'icons/mob/species/vulpkanin/mask.dmi', @@ -43,7 +44,7 @@ icon_state = "voxmask" item_state = "voxmask" permeability_coefficient = 0.01 - species_restricted = list("Vox") + species_restricted = list("Vox", "Vox Armalis") //These should fit the "Mega Vox" just fine. actions_types = list() /obj/item/clothing/mask/breath/vox/attack_self(var/mob/user) diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index d573d2a8191..83d77896459 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -717,12 +717,13 @@ var/global/list/damage_icon_parts = list() l_ear.screen_loc = ui_l_ear //...draw the item in the inventory screen client.screen += l_ear //Either way, add the item to the HUD - var/t_type = l_ear.icon_state + var/t_type = l_ear.item_state + if(!t_type) + t_type = l_ear.icon_state if(l_ear.icon_override) t_type = "[t_type]_l" overlays_standing[EARS_LAYER] = mutable_appearance(l_ear.icon_override, "[t_type]", layer = -EARS_LAYER) else if(l_ear.sprite_sheets && l_ear.sprite_sheets[dna.species.name]) - t_type = "[t_type]_l" overlays_standing[EARS_LAYER] = mutable_appearance(l_ear.sprite_sheets[dna.species.name], "[t_type]", layer = -EARS_LAYER) else overlays_standing[EARS_LAYER] = mutable_appearance('icons/mob/ears.dmi', "[t_type]", layer = -EARS_LAYER) @@ -733,12 +734,13 @@ var/global/list/damage_icon_parts = list() r_ear.screen_loc = ui_r_ear //...draw the item in the inventory screen client.screen += r_ear //Either way, add the item to the HUD - var/t_type = r_ear.icon_state + var/t_type = r_ear.item_state + if(!t_type) + t_type = r_ear.icon_state if(r_ear.icon_override) t_type = "[t_type]_r" overlays_standing[EARS_LAYER] = mutable_appearance(r_ear.icon_override, "[t_type]", layer = -EARS_LAYER) else if(r_ear.sprite_sheets && r_ear.sprite_sheets[dna.species.name]) - t_type = "[t_type]_r" overlays_standing[EARS_LAYER] = mutable_appearance(r_ear.sprite_sheets[dna.species.name], "[t_type]", layer = -EARS_LAYER) else overlays_standing[EARS_LAYER] = mutable_appearance('icons/mob/ears.dmi', "[t_type]", layer = -EARS_LAYER) @@ -1017,9 +1019,14 @@ var/global/list/damage_icon_parts = list() if(!t_state) t_state = r_hand.icon_state - var/mutable_appearance/I = mutable_appearance(r_hand.righthand_file, "[t_state]", layer = -R_HAND_LAYER) - I = center_image(I, r_hand.inhand_x_dimension, r_hand.inhand_y_dimension) - overlays_standing[R_HAND_LAYER] = I + var/mutable_appearance/standing + if(r_hand.sprite_sheets && r_hand.sprite_sheets[dna.species.name]) + t_state = "[t_state]_r" + standing = mutable_appearance(r_hand.sprite_sheets[dna.species.name], "[t_state]", layer = -R_HAND_LAYER) + else + standing = mutable_appearance(r_hand.righthand_file, "[t_state]", layer = -R_HAND_LAYER) + standing = center_image(standing, r_hand.inhand_x_dimension, r_hand.inhand_y_dimension) + overlays_standing[R_HAND_LAYER] = standing apply_overlay(R_HAND_LAYER) @@ -1031,9 +1038,14 @@ var/global/list/damage_icon_parts = list() if(!t_state) t_state = l_hand.icon_state - var/mutable_appearance/I = mutable_appearance(l_hand.lefthand_file, "[t_state]", layer = -L_HAND_LAYER) - I = center_image(I, l_hand.inhand_x_dimension, l_hand.inhand_y_dimension) - overlays_standing[L_HAND_LAYER] = I + var/mutable_appearance/standing + if(l_hand.sprite_sheets && l_hand.sprite_sheets[dna.species.name]) + t_state = "[t_state]_l" + standing = mutable_appearance(l_hand.sprite_sheets[dna.species.name], "[t_state]", layer = -L_HAND_LAYER) + else + standing = mutable_appearance(l_hand.lefthand_file, "[t_state]", layer = -L_HAND_LAYER) + standing = center_image(standing, l_hand.inhand_x_dimension, l_hand.inhand_y_dimension) + overlays_standing[L_HAND_LAYER] = standing apply_overlay(L_HAND_LAYER) //human HUD updates for items in our inventory diff --git a/code/modules/projectiles/guns/alien.dm b/code/modules/projectiles/guns/alien.dm index 2a20e7e6c81..36bba8f3112 100644 --- a/code/modules/projectiles/guns/alien.dm +++ b/code/modules/projectiles/guns/alien.dm @@ -80,6 +80,7 @@ ammo_type = list(/obj/item/ammo_casing/energy/sonic) cell_type = /obj/item/stock_parts/cell/super restricted_species = list(/datum/species/vox/armalis) + sprite_sheets = list("Vox Armalis" = 'icons/mob/species/armalis/held.dmi') /obj/item/gun/energy/noisecannon/update_icon() return diff --git a/icons/mob/species/armalis/back.dmi b/icons/mob/species/armalis/back.dmi new file mode 100644 index 0000000000000000000000000000000000000000..31f4f21f812187ddd9c267ada0e100e9f1128ab5 GIT binary patch literal 2359 zcmb_ec{J307ay8ovQDVbC_IC*7hz`Njd3=`RzY#|IoDxPfFYNTlrEn{gOL-u{m zka|+t#>l=*cA8<{U(Y%3`|tb5`~LC0_uPBWz4vqP{ho90eLEXdejafi5D3I?Zf0T+ za4hg{L%9H|&HmL4u#^}F=WrA6F!U|I&~U$yV8Dz|>8lb*QWb#=y=N!{qckPmCcP}I zxOX8}rVLL=7f=lMV@+kJ3vKUP##ZZE-So>ZXrm+%Y>&Qj5+!pJkvZ!^KEe-Qd zmxwP}7mlU*Z7o}#U*2{kIvRLC|5zpl1=DtzS^YDWb#**cWVjo*U4qmPY`>nwNB=ivB_>Id z5oOVQtti-CPn5Se#0VNnts2QTmd+aTsw%iDc=&hPw9dawqzNn4KU$EfFir&p1y#O7 zfJb`O>!dIELx>!6wVYlDmX&Od;kiQfkny^i-M(s3G4!#0$ep2+H% z4(4mpsTiEYl`lb4jB4ZeV|w2_YU|yOaO)l(7P5aOk_EiqkHHmwx4vCnXeHv*+>e^$uVEI zdPnHAN(`yHNH*7k1H{+fLNv`liC*f(XwI*!TvU#N-RzeNgH)7>j3VcHW^MsW(!zBL zB=dN~muZ`JWH*bY0{~KXt4juO?CnMOw_={_wyRcFS37R6=J$6H2vUPScLAydgFecY z1aiB&x~lRKUj_`@Nr6ByF)=Mj(}V>5q*lpaOlB+6)Ydj5AV@EsRlB?vsug&yOI1~s z7VRu5Dmo;J&O;VD7H4=_Vy$GaoCQ0$%4j7{GP-FrRBu&lYwP2Y#z=F7(BtwYZ?d1; zh;HLX#yNHM7rB<}!wc%+ZWU)dsQi&`EO6SNZ@ zaN%wxmUH9-OG1SYlUXkP0aEjUzY{68{On=Ji!G z!-xkTHPGVyzhTu7P2+ol&YHTimQ#5P{~`f_2#~}jjtcltX22%BsS55 z>+hDa-Lk@oiHq)m&v6l6((!DE1F*HlP^&iPJqg0dU>7Zd4_s!uOa}z_C7fZg&J!vq zOpt`cTVX4G?pDo3<#r(6qqyEQ>xP4_C%X*xyW61@vEm==jxxSI7KB?oc@)br@pJ{| zAV(w@Oiz(6DKf^~OD(&yRvSH7a;ju~e7s^aFRz9)QT(9WdatOIj!{$5SS!Bo&YHFT zhSM9tlHku=mN(=zY&sYLKn1J)%}QO~HC*g!*;Cuf;kob&IBSG>fqh?~4l$1hh zD3n4HDX5#8;Gna&!>g&^i6akutshDmd3?ulv{I(Ugw^D8z6YJ<`6+E7RPkKkghVZx z(?E7#2|U@d`QfbsPE}LS-yJ>Rd!WY)0_uJAK})Dr6CYgHL#0wEWHQP8h>Po}RZ~6F z@x6xkGBWvx#Ahdgada{?T@CVlc?)saPL6prFvEvRTO)797j${%(4Nn2K_`o{lztfL8b7fVy6#>0xLM*HqAGhb!=(PpZ_Kpj3zL+ zPBujdHw@GXmF1H?l!DeZ?xu!}cNk6b-_WmhThpO{%Z|-8_8n@V_Z@_V$7$f&Mkbwo ze*GQ*iA5A*G%%me@XPIT@pvTQ$_IU3&vH<*Tm1VaH1mz!$+eV+3FqCwp+CVx@*HnV zH?IcGb;{?MeA44x8HJp__yZC&5HS*feqW&*nSHZ=5RV z3!h4Nce>eSe$zOuhe{kT>6ne&e2=#8g8Iiajehtf>#X`{D2@)-K=d}FL`LR;4^InP zb_k@Zi_1;$>nP&#EhTBF#r-gvba|DJ;=RV#pWvR>?ZMoq9>%Hf%9VOTB=H0(O&oMi n@}E5o7c#*7XKDXeVejyKJ?ir{&k`Zv5(1fDv@t0+LM8nRTHjwG literal 0 HcmV?d00001 diff --git a/icons/mob/species/armalis/belt.dmi b/icons/mob/species/armalis/belt.dmi new file mode 100644 index 0000000000000000000000000000000000000000..2aba8e97d8acf27e772ced039a03dc35af0c2a0e GIT binary patch literal 837 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 literal 0 HcmV?d00001 diff --git a/icons/mob/species/armalis/mask.dmi b/icons/mob/species/armalis/mask.dmi new file mode 100644 index 0000000000000000000000000000000000000000..e97eb74f8e08e7260ccce3578f7372de7773e67c GIT binary patch literal 614 zcmV-s0-61ZP)005u_0{{R3dEt5<0000aP)t-sz`(#l zKtQazx=BYzkI2Z`#fDIi>00001bW%=J06^y0W&i*H zh!XtFJ-M)lZs@w%RV#igC6Uj9qH&_C7osM!odgSI#?j!8O#$S$*~V za>r;W#BN6}=k?CA`Uzdwm(^=tzw$v>)&l?l007M3H**P3IhSlMzn?4SlDPITrC~9b zEQI9cnoJ>=NV}cZuc&KhZdlFS4*&oF0RDq(b4j1fV=ftn$+=`{4#_9ES`SYum-IS2 zo}fP5e!TM5#;<28fYknpbKg>TVZ7kuJU!%sf8R2m4!0sYP#f9zEyR>8#eE3?0002| z9m}bOJyoymy<#K=@i_@% literal 0 HcmV?d00001 diff --git a/icons/mob/species/vox/ears.dmi b/icons/mob/species/vox/ears.dmi new file mode 100644 index 0000000000000000000000000000000000000000..b09c349cae92c1b7e548bcda5d986026bcd3a496 GIT binary patch literal 1889 zcmYimc{tk%HfpxWtWraYYNN$aSDO`g1#!d`MAX${8%L$9Vn+~H(uSdwI@+SBW2m@O zbxrGL>Q?7C>MTtibuBy4G6>Hq@q$?^~+ z$j`ILGjGQ5n3uhcqgh*9o4dQai;D{egVE8^@%Q(~;c#d)+S1bUX=}ZMgM+!CpqZIj z5*U12RMg1G$U{u*)vH(W@$n1>^bf--F{C@Lyupk)vU z1Plh_J#Mk3qFvDCj@{%q?~7IBVg(^@mP8T zO)~s^0fhJ`TIr)%3)LpnpMM3X4{3?2p~}WcHL{03&H#BDkQ(fN)m73xt-=MqJe8VC z-E0t25K*u{!ewAC8@nsC{1_+G-e02mHofgv{)({VvkFL8ZBJTJ&8^Ogv8y7p>(yUo zrH3OoXr;xLb7#4&G07HlQZ)Bz71L- zG63MI-X&|~2S0U6X}?+b-W9t63op}%Guw$zegLH}&m7QtVWSv_-elU+9V*#GddI{) zTN=2-RKY6df3;RJb+ba`y0s>c{DgK^7k-rIO%b9J=W*C$L8@WL!bF}4%Zk;5P=k}( zw;!xD`fDMhz`c#{ay`qUGgdI+23F}&Zhprq^sV3`dS9?Ie!YCSK6f!h--?cEe)!r> zW!&B3SY=eX7FChZfH>=4Jr_XhwnG$%BB!1&slRWo@KP@k;oahQ##nYLZcE{Mhxz*o`Q#5^`GmBg8h za#OMY3Ypmq>7cDH;0mmeE9Dem zvWYDL3?g(hxyT5b#{pDNCs^bCB*miX8vS32$S0T41Vt$Y_vyn6@HnsF!0UR!K}V#o zX1Y1vOk#@qU;?z%)}b9-x9BJN zTl6f>R)38=`>=$IJJZ2Zam6Dzzu!{U)$r+2advy@^P9C=)V|{?FAM@ERy}_Fxnzhd zzo0PLXsztg&cH$cIl5a>(aCV=4J!xVs8p_$RGLMSqvKuor&%diE@JLPJpcx{J0(dHC+G!O;GSB7%qh}GS;5%@1){C?6c^|$wtjV&%)KPrOBl6p(qW<9;W78s`q_I zj=LVSkpS(#w3z`+NW+^Y9JB@YJU8ZY&b?+Ejd66-(g$fwj$lyvvHFX{337`dh3tS#NoYw$LWLJGCaRT7#YC8iZ$EksM8G%SmmMLaIZjkT z)om0p4x~~RdOvWpog!BR@>j!1U|dT$Sctjxx3Iahi$nF6o4o;qnYxKK+=?f zPXbU<`gUY@z8y;lT#1qK9N|BPCEY}73s}ry-!eH3&z-ez5OyYAvq~r2w&j%VNXKZh zK^t^znB;#XoDexLt4{{BcGtTGM*9e-y+godf3p_yDl%Xa8xM{6@@kjKhw*o5!GJ#b?epbz9gF=5O;AaSZ&Rsx__~z^ZE6 zxU9ihWUly+n-I>znpxW2wT|NIp52MuzCy!K->$i6%Pw00GzsK5pqM;8-gHg$SlgC@ zxmeX`{)V>I7tmkGfd-qi0uKpgp;s!kRjEK1