From 1f46b4515dfd7c666bae45fbc0b0ad285a227d3e Mon Sep 17 00:00:00 2001 From: Spaghetti-bit Date: Thu, 27 Jun 2024 20:09:58 -0700 Subject: [PATCH] [FRAMEWORK / SPRITES] Species Specific Augments (Robotic Limbs) - Phase 1 - Vox (#25795) * Adds framework for species specific augments. Adds shellguard vox augment * Hesphiastos vox augments done. * Fixes heph not loading properly. * Update to hesphiastos * Updates hesphiastos and adds wardtakashi. Also sets the default for all vox augments to ward * Defaults to ward * Update code/modules/surgery/organs/organ_external.dm Co-authored-by: Ryan <80364400+Sirryan2002@users.noreply.github.com> Signed-off-by: Spaghetti-bit <60483458+Spaghetti-bit@users.noreply.github.com> --------- Signed-off-by: Spaghetti-bit <60483458+Spaghetti-bit@users.noreply.github.com> Co-authored-by: Ryan <80364400+Sirryan2002@users.noreply.github.com> --- code/modules/surgery/organs/organ_external.dm | 9 ++++++--- code/modules/surgery/organs/robolimbs.dm | 8 ++++++++ .../human_races/vox/cyberlimbs/hesphiastos.dmi | Bin 0 -> 4343 bytes .../human_races/vox/cyberlimbs/shellguard.dmi | Bin 0 -> 4573 bytes .../human_races/vox/cyberlimbs/wardtakahashi.dmi | Bin 0 -> 4508 bytes 5 files changed, 14 insertions(+), 3 deletions(-) create mode 100644 icons/mob/human_races/vox/cyberlimbs/hesphiastos.dmi create mode 100644 icons/mob/human_races/vox/cyberlimbs/shellguard.dmi create mode 100644 icons/mob/human_races/vox/cyberlimbs/wardtakahashi.dmi diff --git a/code/modules/surgery/organs/organ_external.dm b/code/modules/surgery/organs/organ_external.dm index f9eb942d7fa..023f5078947 100644 --- a/code/modules/surgery/organs/organ_external.dm +++ b/code/modules/surgery/organs/organ_external.dm @@ -831,7 +831,7 @@ Note that amputating the affected organ does in fact remove the infection from t AddComponent(/datum/component/surgery_initiator/limb, forced_surgery = /datum/surgery/reattach_synth) if(company && istext(company)) - set_company(company) + set_company(company, owner.dna.species.sprite_sheet_name) limb_flags |= CANNOT_BREAK get_icon() @@ -841,11 +841,14 @@ Note that amputating the affected organ does in fact remove the infection from t -/obj/item/organ/external/proc/set_company(company) +/obj/item/organ/external/proc/set_company(company, species_sheet_name) model = company var/datum/robolimb/R = GLOB.all_robolimbs[company] if(R) - force_icon = R.icon + if(length(R.sprite_sheets)) // Species specific augmented limbs + force_icon = R.sprite_sheets[species_sheet_name] + else + force_icon = R.icon name = "[R.company] [initial(name)]" desc = "[R.desc]" diff --git a/code/modules/surgery/organs/robolimbs.dm b/code/modules/surgery/organs/robolimbs.dm index d8037ad8066..28b257a35d4 100644 --- a/code/modules/surgery/organs/robolimbs.dm +++ b/code/modules/surgery/organs/robolimbs.dm @@ -6,6 +6,7 @@ GLOBAL_DATUM(basic_robolimb, /datum/robolimb) var/company = "Unbranded" // Shown when selecting the limb. var/desc = "A generic unbranded robotic prosthesis." // Seen when examining a limb. var/icon = 'icons/mob/human_races/robotic.dmi' // Icon base to draw from. + var/list/sprite_sheets = null // Species specific icons to draw from. Path formats is... [icons/mob/human_races/{species}/cyberlimbs/{company}.dmi] var/unavailable_at_chargen // If set, not available at chargen. var/selectable = 1 // If set, is it available for selection on attack_self with a robo limb? var/is_monitor // If set, limb is a monitor and should be getting monitor styles. @@ -16,6 +17,7 @@ GLOBAL_DATUM(basic_robolimb, /datum/robolimb) company = "Bishop Cybernetics" desc = "This limb has a white polymer casing with blue holo-displays." icon = 'icons/mob/human_races/cyberlimbs/bishop/bishop_main.dmi' + sprite_sheets = list("Vox" = 'icons/mob/human_races/vox/cyberlimbs/wardtakahashi.dmi') has_subtypes = 1 /datum/robolimb/bishop/alt1 @@ -37,6 +39,7 @@ GLOBAL_DATUM(basic_robolimb, /datum/robolimb) company = "Hesphiastos Industries" desc = "This limb has a militaristic black and green casing with gold stripes." icon = 'icons/mob/human_races/cyberlimbs/hesphiastos/hesphiastos_main.dmi' + sprite_sheets = list("Vox" = 'icons/mob/human_races/vox/cyberlimbs/hesphiastos.dmi') has_subtypes = 1 /datum/robolimb/hesphiastos/alt1 @@ -59,6 +62,7 @@ GLOBAL_DATUM(basic_robolimb, /datum/robolimb) company = "Morpheus Cyberkinetics" desc = "This limb is simple and functional; no effort has been made to make it look human." icon = 'icons/mob/human_races/cyberlimbs/morpheus/morpheus_main.dmi' + sprite_sheets = list("Vox" = 'icons/mob/human_races/vox/cyberlimbs/wardtakahashi.dmi') unavailable_at_chargen = 1 is_monitor = 1 has_subtypes = 1 @@ -77,6 +81,7 @@ GLOBAL_DATUM(basic_robolimb, /datum/robolimb) company = "Ward-Takahashi" desc = "This limb features sleek black and white polymers." icon = 'icons/mob/human_races/cyberlimbs/wardtakahashi/wardtakahashi_main.dmi' + sprite_sheets = list("Vox" = 'icons/mob/human_races/vox/cyberlimbs/wardtakahashi.dmi') has_subtypes = 1 /datum/robolimb/wardtakahashi/alt1 @@ -98,6 +103,7 @@ GLOBAL_DATUM(basic_robolimb, /datum/robolimb) company = "Xion Manufacturing Group" desc = "This limb has a minimalist black and red casing." icon = 'icons/mob/human_races/cyberlimbs/xion/xion_main.dmi' + sprite_sheets = list("Vox" = 'icons/mob/human_races/vox/cyberlimbs/wardtakahashi.dmi') has_subtypes = 1 /datum/robolimb/xion/alt1 @@ -119,12 +125,14 @@ GLOBAL_DATUM(basic_robolimb, /datum/robolimb) company = "Zeng-Hu Pharmaceuticals" desc = "This limb has a rubbery fleshtone covering with visible seams." icon = 'icons/mob/human_races/cyberlimbs/zenghu/zenghu_main.dmi' + sprite_sheets = list("Vox" = 'icons/mob/human_races/vox/cyberlimbs/wardtakahashi.dmi') has_subtypes = 2 /datum/robolimb/shellguard company = "Shellguard Munitions Standard Series" desc = "This limb features exposed robust steel and paint to match Shellguards motifs." icon = 'icons/mob/human_races/cyberlimbs/shellguard/shellguard_main.dmi' + sprite_sheets = list("Vox" = 'icons/mob/human_races/vox/cyberlimbs/shellguard.dmi') has_subtypes = 1 /datum/robolimb/shellguard/alt1 diff --git a/icons/mob/human_races/vox/cyberlimbs/hesphiastos.dmi b/icons/mob/human_races/vox/cyberlimbs/hesphiastos.dmi new file mode 100644 index 0000000000000000000000000000000000000000..f0d1fc6b7cd3623498d37fdf2649c635d246b91a GIT binary patch literal 4343 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 bYtf$L`SG5Ac_QdP84LzGrrNcd&N2T1K>olv literal 0 HcmV?d00001 diff --git a/icons/mob/human_races/vox/cyberlimbs/shellguard.dmi b/icons/mob/human_races/vox/cyberlimbs/shellguard.dmi new file mode 100644 index 0000000000000000000000000000000000000000..49bc6d8b43256db54b57f0a623fc02074c15dd77 GIT binary patch literal 4573 zcmb`LXHZjH+lEPlB!UE~N()T_g7l&ygessSAc#m8sY;Q6jTQtn^j@TBK;Y0sq>2a$ zNRuA%P(trY3lN2b`o?$Wo%#NJGhaDB_FjMXnl*c^=U(@9KT)P8SJ>cZ;7m+RY(|E9 z=8SRX&jV#Kym2okH7w z^C!@LYW+P`R*6SuHhLQcw?T`3d6D?E!(-BRy$=xL z+PrtA#YXz;*YEImWM#5YAD3ATDQ--Mg1)sT^}KIO-eO`xP>uAoEuN6qbA8Q4Gq<_nAQDwf`Ocw$O2+(n3`%H6ltSCEZkY z8ntrbbh|>X7h;W{Q!n#VYI1Vj*%S03<+0mYs&2c1zaC#`>iIT-d9zH8r52iy=R%9V)FM1B zdDsY)&OiIXIpD@r)1~6#VtF}B%U3TpHWaNS8y{1qm^$h7rt zEM2CyzrNf;S{=#V>7j*zTBz04Q7gyp2VwJ_2^kIEtAi_l4_DN41N2$Jb9*bElBee8 z68d^Gr!&$dOwgT0sELLXZ=-+HKUn9vn;#+DTd|L#$_tTqQOL+-d!py}N=0h?mA z%T01NtKirT^|M=ZJ%Pdk0?Kj^#$D|-LZ=q?zW2~;Yil7CWwq=pEX>z#-b^VeD^s$w zvl||t8acA9Bm}hz>^dFAD)d=un7i77JqMY|vkMmd^?1L!tE2va&DE=3u=~L|L1<%;siI$-_5K0TROVHuaOP z@d6i;4FO42{cfg@{Qbc!%S+eXtY7h-*7WpYH+g5nt7$@JeL~xuo!NR%c$Ci19e$2k zaNI-qro;@1OqK_nH<(qqKb+a$-`|Eqwfr;&#}d&Myub}|?fs>%TMv~!RXR@D)^=xO zjj{j=&^%%CdwaH&MWL)LKk1o@b5^~FO-;l0S}MS~xoPX0oN$_fZun_I!Rx)|7Rj}m z*7h3~U_;z0cN#m52O;jl+(!KD^yNjR9CBuPXy_Is3QlW_<6nxibr`>f&AAA0X-F%` z7W}Agm_ac|H_W5N9$H$ac{KS;9jMj()MfU#WYlwGEPM9z#plErtYNs%YSUi^=w8Ll zBaR0@){c&j+Hx9Y5*+$+N7mNLQ+{od(BVwKfB$B##`~Nu;A86si|Z59)6;z^Y})d= zjXy%$gqfS%{MJWpmx_#uKc>Wtl#t-IDzKP*DN6$xq=VLo?_Rb6T1Pon0?2A@aF(;Y zYQ|Wu*%mnKcw8^+HYzX1k#qMI!>G+h{6DE>!>_<9R{@c& z52DEUzo*Z7>L;-}ELH`HNmTM&HHdk}W^_Jx3EprN7Z=yjxu0=gUQzMX(K@CwlsEg#5A-mXqcOGQCPp%Hn8QKBub; zMAX6t&-QD_7hlhlI5r2RlpT!-tRd%i&q()@_xvyccUunb2Q|BImBVpwd$DyrYKH{X zLcS|jE`_^my-;-lvsg&`MeKV=V&F^vNVLxR!^6$-{x=aLgrbsf*Vy|a2M&wo-#-Hy zxS<_@qL=rXp@V~nVR$O3zB2yxRb+k#N~Ri*zp(Fe8pmg)AyTV^heGpD?Ug6tqq^R! zKoOU2)A>ZD^Ae&je-jc12WP8By0jE{O+`s~v}9qM?|0}IcCM)@C?s`#bBU1A{~8v3 z$y`0(H?M4^;HpTVX%fN|oy=o=(jxB8LsIbT?_M#(yse@rC4-yYAL$EuMsn-Z)DS!QqX)W2J_kIHrW-I9FE|-`aGje8 zp44JB5vG+sXc!nTDlC*hE0%9e+sUUnRH$L<6JCJ`Q=S(wiobSu138$sXQ2Q!O-pZ~ z{V!}{il2nQ@`E$bpHoMR(ir;h$V~;Dmb~=(I#&ks-R*k8eG}p5VQ* zva&sJ!^9*@x6JCLSXGZT0+7jx$X~n}hDH|vl9q#6nYQ_0L@)=_spcm~pHnbToW|>r znWBIXyF@=98Qx9NysmmpNpO1P`CV;<@9I*Yt0*rm@nnydObgOE z_&ik3_OpA?8c4*+(wmzpG4_OL$bo-k!*1t $HK6hbKiK{VqRa#;bwwd zOTt!xbrJ=$vbwcGYwA>cJLmoAkgTk%)}R8$&Ea$;I6))!LFxQ-qn9sUrFhI2qlE8Fq257c-xW8Mkk;Lq83(p{6&##8_?UDe6o6Ul|_? zOmQ2oD7sG*U0ag{SDf)CqGf#Hj7w; zDM`(g`5ejECg)jLssw*=3*(DZn44EZJ51}eu%fgj zaZpV+^h9u5^HoijHan*oXLg*}h6X6;B<`@dz7bEtUO{w|4CK?L+wVql+9B%s-pT@^ z6yCji7xo#?_!l%zbpS^b(KoBRE9!-!owo&0ENU}xxY^L+9DNS6QB@&A^(?%EN$=u{&mAD4sJ~c|sh~gs5W!meo<_Vh%UsIwe$6FwlR*C%7 z-a1+QuMceW94PLx;}!3$4v6mS5F21f(C(xY?A``|mjxue!aZvLJf8>1{Jno-waAGb zXFj$YvR9%6_yE=ygxiECaRNkGfq?8;b4Y5mawuW-JawayvR$z*`}|8C_9H!VL?10_ zht8phC1{*F_)$HuZJBHfb+1l%$5LbH?5xc5%4_nwbqW4WrHqa*UN7^VW^_EQE_@6U zsTTKu{mhf#R5x8)XDQG5+FY1BhA>DXapYVMOb4FV<>S5TFXJ;LKGUCjDZIbmM6$Ye zU2`cp{{N2Eukskx`FXR!_CU`4HRt~m)GOpojb+#h3%;tA-v($gD9%)(Hq}v2{_RBy z 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