From 9122be6af1e9701e00d418ac23cf4888af95532e Mon Sep 17 00:00:00 2001 From: portfiend <109661617+portfiend@users.noreply.github.com> Date: Fri, 15 May 2026 14:42:49 -0500 Subject: [PATCH 01/26] tajaran species prototype --- Resources/Locale/en-US/_DEN/species/species.ftl | 1 + Resources/Prototypes/_DEN/Species/tajaran.yml | 8 ++++++++ 2 files changed, 9 insertions(+) create mode 100644 Resources/Locale/en-US/_DEN/species/species.ftl create mode 100644 Resources/Prototypes/_DEN/Species/tajaran.yml diff --git a/Resources/Locale/en-US/_DEN/species/species.ftl b/Resources/Locale/en-US/_DEN/species/species.ftl new file mode 100644 index 0000000000..a2433c2399 --- /dev/null +++ b/Resources/Locale/en-US/_DEN/species/species.ftl @@ -0,0 +1 @@ +species-name-tajaran = Tajaran diff --git a/Resources/Prototypes/_DEN/Species/tajaran.yml b/Resources/Prototypes/_DEN/Species/tajaran.yml new file mode 100644 index 0000000000..efa011fc71 --- /dev/null +++ b/Resources/Prototypes/_DEN/Species/tajaran.yml @@ -0,0 +1,8 @@ +- type: species + id: Tajaran + name: species-name-tajaran # TODO + roundStart: true + prototype: MobReptilian # TODO + defaultSkinTone: "#c27c42" + dollPrototype: AppearanceReptilian # TODO + skinColoration: Hues From c359ee7a6a9fbb3d41e8ba8f75848f0ebdc8b754 Mon Sep 17 00:00:00 2001 From: portfiend <109661617+portfiend@users.noreply.github.com> Date: Fri, 15 May 2026 15:39:19 -0500 Subject: [PATCH 02/26] add tajaran body sprites Co-authored-by: SX-7 <92227810+SX-7@users.noreply.github.com> --- .../Mobs/Species/Tajaran/parts.rsi/head_f.png | Bin 0 -> 656 bytes .../Mobs/Species/Tajaran/parts.rsi/head_m.png | Bin 0 -> 656 bytes .../Mobs/Species/Tajaran/parts.rsi/l_arm.png | Bin 0 -> 387 bytes .../Mobs/Species/Tajaran/parts.rsi/l_foot.png | Bin 0 -> 411 bytes .../Mobs/Species/Tajaran/parts.rsi/l_hand.png | Bin 0 -> 380 bytes .../Mobs/Species/Tajaran/parts.rsi/l_leg.png | Bin 0 -> 394 bytes .../Mobs/Species/Tajaran/parts.rsi/meta.json | 59 ++++++++++++++++++ .../Mobs/Species/Tajaran/parts.rsi/r_arm.png | Bin 0 -> 397 bytes .../Mobs/Species/Tajaran/parts.rsi/r_foot.png | Bin 0 -> 403 bytes .../Mobs/Species/Tajaran/parts.rsi/r_hand.png | Bin 0 -> 370 bytes .../Mobs/Species/Tajaran/parts.rsi/r_leg.png | Bin 0 -> 392 bytes .../Species/Tajaran/parts.rsi/torso_f.png | Bin 0 -> 1983 bytes .../Species/Tajaran/parts.rsi/torso_m.png | Bin 0 -> 909 bytes 13 files changed, 59 insertions(+) create mode 100644 Resources/Textures/_EE/Mobs/Species/Tajaran/parts.rsi/head_f.png create mode 100644 Resources/Textures/_EE/Mobs/Species/Tajaran/parts.rsi/head_m.png create mode 100644 Resources/Textures/_EE/Mobs/Species/Tajaran/parts.rsi/l_arm.png create mode 100644 Resources/Textures/_EE/Mobs/Species/Tajaran/parts.rsi/l_foot.png create mode 100644 Resources/Textures/_EE/Mobs/Species/Tajaran/parts.rsi/l_hand.png create mode 100644 Resources/Textures/_EE/Mobs/Species/Tajaran/parts.rsi/l_leg.png create mode 100644 Resources/Textures/_EE/Mobs/Species/Tajaran/parts.rsi/meta.json create mode 100644 Resources/Textures/_EE/Mobs/Species/Tajaran/parts.rsi/r_arm.png create mode 100644 Resources/Textures/_EE/Mobs/Species/Tajaran/parts.rsi/r_foot.png create mode 100644 Resources/Textures/_EE/Mobs/Species/Tajaran/parts.rsi/r_hand.png create mode 100644 Resources/Textures/_EE/Mobs/Species/Tajaran/parts.rsi/r_leg.png create mode 100644 Resources/Textures/_EE/Mobs/Species/Tajaran/parts.rsi/torso_f.png create mode 100644 Resources/Textures/_EE/Mobs/Species/Tajaran/parts.rsi/torso_m.png diff --git a/Resources/Textures/_EE/Mobs/Species/Tajaran/parts.rsi/head_f.png b/Resources/Textures/_EE/Mobs/Species/Tajaran/parts.rsi/head_f.png new file mode 100644 index 0000000000000000000000000000000000000000..a89cf12a1fc65809516537305b8d14c0fa4b675a GIT binary patch literal 656 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85p>QK$!8;-MT+O4PQK6978JN-rlm$KI9<5_F;2fLziQV&!Qb2 ztDUFwEp49fIH#p<-leV0!Rg}S&+Ax^y0XM>>Nux2>6_)JF1P42((ji&XMZ?J`A+f9 zKhp1b1XuF3AFi;PdrV`p*7|o-<2_FKJo{W(VkYqHWcm_9c5b-K53iwWj8L$lJbIwJ-4fuS|#EFT342S6qLRF2!)*=%LTy z6=7a`vx^QEJzqMd>bcwEiM3qUUYGv)_bJ6&X0e^+QO!!OOS8YdJpG63!QS=PUoVSV zJL`JCfAk}Xuebc}c-`{9pKDn*x4vb;-@5ucdsx*cwA(YhtGQ?2`0I47l$8X}p1+J8 z9UUk3-v3{-$=wA4N;LcSp6ibIek#N_ZMvPf|@%pRJ3w7gXPt0aW+Z?$kYVDb{ z%^Q#JOY2ApTNSi&M%3E0TW`M^n!k2Pd1r9QdhWTKTeiIMR}+5T-0&xFd-iw#&5o1j zSJpO6kc@oUutxZUP0!=@r1m#9Ta`Vrg{~e>=z;kl4U4rxcNx?>ewHq#Q_S7xDxItd- z;ctD09}0TYy?00Tz7_%c3kv?Fp5b@Y2v~pqoOlH=Q80MA`njxgN@!vf6u^oa?Kx@~ Poff1iSDkYTLDm2O!?+@F literal 0 HcmV?d00001 diff --git a/Resources/Textures/_EE/Mobs/Species/Tajaran/parts.rsi/head_m.png b/Resources/Textures/_EE/Mobs/Species/Tajaran/parts.rsi/head_m.png new file mode 100644 index 0000000000000000000000000000000000000000..1d01e03523db9bdb70b0e1acfba926ade1ce4cf8 GIT binary patch literal 656 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85p>QK$!8;-MT+O4X-?1978JN-rm}nbtpiD?LoGztX7w|nq$n7 zs|&r`{p^}8IAwpC)G{wWr{`3t{Y6wnT(IP%lGSdHTmL60&$@I;ruhArdIk0Gi+)a? zJ%i`Fm6DNU|M8PGcK!jE*DdHerN7j4`qQGBbNtk==WV~6wYBJJ(almT*~|NM9$8GA zeDD4Db#d#x<3(JT{n@?cAGe#ddi>fj)gJ{G90f7{%yzjW^)LTz4v)UQ@AG+q5*xYm^AiqgK6%L7pk4oZ_JKc7_VLK}x*fd7;Ns%) z0Gx*T;R-QoW1uCd8_{atn8Y8--Mz2sM5_Gv%KxMJ*}_sOg!gh zD#d#}$1HaH?Wr-R6`uTKJygB--qkHz^3JCjzi)2%Q@3CL_Vk+xC(rM-b9mXaMy_F< zFo)yjt_bM_xrUq{&kf3&4<1N7+fY)`P^-)wIbkn{*fU0ky{v)RTW5W_%RhhVuLZx| zuBDb0Tz>f_tIqC;6=O=qJUM1Ni)CN5cg~QDu;5t3k-0VM(}Tc;_n8{lA64z0b~P(z zxdYHY5b#C)`921r+>pJ$KTMbgObQI1u6{1-oD!Nq&{R->5jSeI=cr+HT9Bq(b2BR01_nk` zPZ!6K3dXm$47r*e1X>?@dMMwBxDg#u#nu1lpiP(fhAYfBZgZJ6o#e>WVcLD}kkr4I zPB*r1zMp5_6~Lj;z`z705)?0Ndz&}0_#DU7-!}OrU&{kUlJ2f~mYLUK#D3y)%&JvJ z&KC}6&wJLUQQWZay{f0sRW8$`*?5ry}HP0n{sDgDSbQl z^Xr~x`VQu^mz{hgni5&|aDUjP6A literal 0 HcmV?d00001 diff --git a/Resources/Textures/_EE/Mobs/Species/Tajaran/parts.rsi/l_foot.png b/Resources/Textures/_EE/Mobs/Species/Tajaran/parts.rsi/l_foot.png new file mode 100644 index 0000000000000000000000000000000000000000..4fcc3ea79c2d5838fefb7add39b8744bacf4f027 GIT binary patch literal 411 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9GGLLkg|>2BR01_nl7 zPZ!6K3dXm$47-{gM2>yje!A@1w`)<=iu?~5Z92p^iL4cUvu5krXWTq2ijU5D+&EG1 z;9>N*I={~BU}YK)i+}?IBb2xyykb>W{;yxfxwqqrCf|22ziM*!;!^po?+gx@_{wiJ z>~dvjG-%wl?l4n7Fls z{rldu)Q!fUWa{KM=)U;5yDReg)lE9pA}_jXD0Bo(paA0O|jlX2HReaZS>eBfQdJ-=9= zRc=d^0Mbo;$ESvz6>JJ2BR01_nkw zPZ!6K3dXm$47r*OM2>w_U^PFlP_bF&Xmf>#{(~1!6fAb^+_^KO_loYsgn3Qh?k`o{ z_g(d8=&geqN4XhU1RNNkL?6p18~a^<{$-cO?k}1=@%_40t3K)0hRij0xc|NXmPEHJ zL!&|CA`L&*HMOUI^>3V#x^u?)mVf x*3ZAL8)G!nm}Sze6vYMxCJqH4@n7i!YhH5X{VA_kFam>QK$!8;-MT+O!QY-Pjv*CsZ*TeYIXj3P|Cm|M_drAMi3Z;z zt#3N94oBS9%t^?ab$waprC-MU2fuHgDbGDGU1gFaGf?k?^(vk!u_2MuCY^h#_jtu3 z4VAg4pRk$uDsvtXU6QHAd4MB(?a9w~_~!Rc4PISvUB2!_$a}+|_7CRkoX!zoDcWLp zR;|K3;qCT+-PdYE(+*tQwQlm0_Y-(u{EnNn-`UJTn0JC8&=v?tFP~g!v|UHm^`de8 zx=Uf9sgEq?)$Ua_$&Lv5P|g@__oq9ISEuikMRe@-N#7Q43``1Sz7vvt`&;Y*x!)bJ zym_~NUwiPCvn5d@(|(`n2787bM#*xzdbw=Hi60|CHh8-FxvX0N1w VECLgRelTp~$YT3>EZ7%W4FKExn0WvI literal 0 HcmV?d00001 diff --git a/Resources/Textures/_EE/Mobs/Species/Tajaran/parts.rsi/meta.json b/Resources/Textures/_EE/Mobs/Species/Tajaran/parts.rsi/meta.json new file mode 100644 index 0000000000..13e804ad54 --- /dev/null +++ b/Resources/Textures/_EE/Mobs/Species/Tajaran/parts.rsi/meta.json @@ -0,0 +1,59 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Creator was not supplied, oldest reference tracked to Cael Aislinn in commit https://github.com/ParadiseSS13/Paradise/commit/9e4539fdce01f00ed7e47ca1174a1470ac5fe77c. Small changes made by SX-7. Names are as provided, sans torso_f front which is a combined version of modified torso_m front, and modified torso_f", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "head_f", + "directions": 4 + }, + { + "name": "head_m", + "directions": 4 + }, + { + "name": "l_arm", + "directions": 4 + }, + { + "name": "l_foot", + "directions": 4 + }, + { + "name": "l_hand", + "directions": 4 + }, + { + "name": "l_leg", + "directions": 4 + }, + { + "name": "r_arm", + "directions": 4 + }, + { + "name": "r_foot", + "directions": 4 + }, + { + "name": "r_hand", + "directions": 4 + }, + { + "name": "r_leg", + "directions": 4 + }, + { + "name": "torso_f", + "directions": 4 + }, + { + "name": "torso_m", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/_EE/Mobs/Species/Tajaran/parts.rsi/r_arm.png b/Resources/Textures/_EE/Mobs/Species/Tajaran/parts.rsi/r_arm.png new file mode 100644 index 0000000000000000000000000000000000000000..f0449da6952b164a61a08172bd98b5654976390c GIT binary patch literal 397 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85p>QK$!8;-MT+O!H=FUjv*CsZ*LiLH9H8jKJ>IYcABvf_%s##8h8|z-{c8Wl>w-I$e*bYp%kSLI_2M9#K%im!4d%)I{JX0! zZV3GRT~}-Us#h0&D_YIrU6z@pJ+V+`@%dSP?Tas)c+PwNeRf0Tyz4t+lwZ^ryyA%Y z#_q=O!yar%fwhu;o?%qJ@wvmEAOTNTKbLh*2~CnaPCw->nBKaXk432BR01_nk~ zPZ!6K3dXm$Y*#f02(&%)^vF%mSKPs5{v;@-LweH|AswAJIxOZB?z}(5sp%wemCv)opj`p#Xi5@`2BR01_nkI zPZ!6K3dXm$7VW7eg#rs6$BlPwmgc;fHfg_S zX#eil><70TGZ1iKU}S+32h=7!--2c0Z&|RPnw{^ z0nZ0%-CA8qzL&4`JkI#F&pdKk)Z=R^R-Oa@Pdg-jE+p-J)?aMvP j#l)e|zyKl|^qKsl{sjL2>|2BR01_nke zPZ!6K3dXm$9EF@61RO4^ShH^^H*+r(2ruBDrk9YI{*)yt=&G33(zIO@CGMxGy_okd zd`Za1iVcbl3``sf5aPfzhd`0&_Q&?uw&hOo-B+_aYu2&vSG?yw=e_X#?^3D75i9~5 zIH#m$dOMgfedIi|{bba`ata6u6J9i>+kOPoxAoRi^6}#`&`!9^S81IABgnb#K*)TqxOMq16xF+&YYGX Qz@TODboFyt=akR{0Iy7y>;M1& literal 0 HcmV?d00001 diff --git a/Resources/Textures/_EE/Mobs/Species/Tajaran/parts.rsi/torso_f.png b/Resources/Textures/_EE/Mobs/Species/Tajaran/parts.rsi/torso_f.png new file mode 100644 index 0000000000000000000000000000000000000000..c18fc1458cec092a363ac7f2363e75a9d1bded3a GIT binary patch literal 1983 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 literal 0 HcmV?d00001 From e6e658f0a6961506f33fba1722f489cc6b0c53cf Mon Sep 17 00:00:00 2001 From: portfiend <109661617+portfiend@users.noreply.github.com> Date: Fri, 15 May 2026 16:22:58 -0500 Subject: [PATCH 03/26] add tajaran mob --- .../Prototypes/_DEN/Body/Species/tajaran.yml | 245 ++++++++++++++++++ Resources/Prototypes/_DEN/Species/tajaran.yml | 6 +- 2 files changed, 248 insertions(+), 3 deletions(-) create mode 100644 Resources/Prototypes/_DEN/Body/Species/tajaran.yml diff --git a/Resources/Prototypes/_DEN/Body/Species/tajaran.yml b/Resources/Prototypes/_DEN/Body/Species/tajaran.yml new file mode 100644 index 0000000000..50bbdafb28 --- /dev/null +++ b/Resources/Prototypes/_DEN/Body/Species/tajaran.yml @@ -0,0 +1,245 @@ +- type: markingsGroup + parent: Undergarments + id: Tajaran + onlyGroupWhitelisted: true + limits: + enum.HumanoidVisualLayers.Hair: + limit: 1 + required: false + enum.HumanoidVisualLayers.FacialHair: + limit: 1 + required: false + enum.HumanoidVisualLayers.Tail: # TODO: Default marking + limit: 1 + required: true + enum.HumanoidVisualLayers.Chest: + limit: 4 + required: false + enum.HumanoidVisualLayers.Snout: + limit: 1 + required: true + enum.HumanoidVisualLayers.HeadTop: # TODO: Default marking + limit: 4 + required: false + enum.HumanoidVisualLayers.HeadSide: + limit: 4 + required: false + enum.HumanoidVisualLayers.LArm: + limit: 4 + required: false + enum.HumanoidVisualLayers.RArm: + limit: 4 + required: false + enum.HumanoidVisualLayers.LHand: + limit: 4 + required: false + enum.HumanoidVisualLayers.RHand: + limit: 4 + required: false + enum.HumanoidVisualLayers.LLeg: + limit: 4 + required: false + enum.HumanoidVisualLayers.RLeg: + limit: 4 + required: false + enum.HumanoidVisualLayers.LFoot: + limit: 4 + required: false + enum.HumanoidVisualLayers.RFoot: + limit: 4 + required: false + +- type: entity + parent: BaseSpeciesAppearance + id: AppearanceTajaran + name: tajaran appearance + components: + - type: Inventory + speciesId: tajaran + # Tajaran currently do not have displacement maps. + - type: InitialBody + organs: + Torso: OrganTajaranTorso + Head: OrganTajaranHead + ArmLeft: OrganTajaranArmLeft + ArmRight: OrganTajaranArmRight + HandRight: OrganTajaranHandRight + HandLeft: OrganTajaranHandLeft + LegLeft: OrganTajaranLegLeft + LegRight: OrganTajaranLegRight + FootLeft: OrganTajaranFootLeft + FootRight: OrganTajaranFootRight + Brain: OrganTajaranBrain + Eyes: OrganTajaranEyes + Tongue: OrganTajaranTongue + Appendix: OrganTajaranAppendix + Ears: OrganTajaranEars + Lungs: OrganTajaranLungs + Heart: OrganTajaranHeart + Stomach: OrganTajaranStomach + Liver: OrganTajaranLiver + Kidneys: OrganTajaranKidneys + - type: HumanoidProfile + species: Tajaran + +- type: entity + parent: + - AppearanceTajaran + - BaseSpeciesMobOrganic + id: MobTajaran + name: Urist McPurrs + suffix: Tajaran + components: + - type: Speech + speechSounds: Alto + speechVerb: Tajaran # TODO + allowedEmotes: [] # TODO + - type: TypingIndicator + proto: default # TODO + - type: Vocal + sounds: + Male: MaleHuman # TODO + Female: FemaleHuman # TODO + Unsexed: MaleHuman # TODO + - type: MeleeWeapon + soundHit: + collection: AlienClaw + angle: 30 + animation: WeaponArcClaw + damage: + types: + Slash: 5 + - type: Wagging + # DEN start + - type: PhysiologyDescription + baseLabel: physiology-description-species-base-tajaran + # End DEN + +- type: entity + parent: OrganBase + id: OrganTajaran + abstract: true + suffix: Tajaran + +- type: entity + id: OrganTajaranMetabolizer + abstract: true + components: + - type: Metabolizer + metabolizerTypes: [ Animal ] + +- type: entity + parent: OrganTajaran + id: OrganTajaranInternal + abstract: true + components: + - type: Sprite + sprite: Mobs/Species/Human/organs.rsi + +- type: entity + parent: OrganTajaran + id: OrganTajaranExternal + abstract: true + components: + - type: Sprite + sprite: _EE/Mobs/Species/Tajaran/parts.rsi + - type: VisualOrgan + data: + sprite: _EE/Mobs/Species/Tajaran/parts.rsi + - type: VisualOrganMarkings + markingData: + group: Tajaran + +- type: entity + parent: [ OrganBaseTorsoSexed, OrganBaseTorso, OrganTajaranExternal ] + id: OrganTajaranTorso + components: + - type: VisualOrganMarkings + hideableLayers: + - enum.HumanoidVisualLayers.Tail + +- type: entity + parent: [ OrganBaseHeadSexed, OrganBaseHead, OrganTajaranExternal ] + id: OrganTajaranHead + components: + - type: VisualOrganMarkings + hideableLayers: + - enum.HumanoidVisualLayers.Snout + - enum.HumanoidVisualLayers.HeadTop + - enum.HumanoidVisualLayers.HeadSide + +- type: entity + parent: [ OrganBaseArmLeft, OrganTajaranExternal ] + id: OrganTajaranArmLeft + +- type: entity + parent: [ OrganBaseArmRight, OrganTajaranExternal ] + id: OrganTajaranArmRight + +- type: entity + parent: [ OrganBaseHandLeft, OrganTajaranExternal ] + id: OrganTajaranHandLeft + +- type: entity + parent: [ OrganBaseHandRight, OrganTajaranExternal ] + id: OrganTajaranHandRight + +- type: entity + parent: [ OrganBaseLegLeft, OrganTajaranExternal ] + id: OrganTajaranLegLeft + +- type: entity + parent: [ OrganBaseLegRight, OrganTajaranExternal ] + id: OrganTajaranLegRight + +- type: entity + parent: [ OrganBaseFootLeft, OrganTajaranExternal ] + id: OrganTajaranFootLeft + +- type: entity + parent: [ OrganBaseFootRight, OrganTajaranExternal ] + id: OrganTajaranFootRight + +- type: entity + parent: [ OrganBaseBrain, OrganSpriteHumanInternal, OrganTajaranInternal ] + id: OrganTajaranBrain + +- type: entity + parent: [ OrganBaseEyes, OrganTajaranInternal, OrganTajaranExternal ] + id: OrganTajaranEyes + components: + - type: VisualOrgan + data: + sprite: Mobs/Customization/eyes.rsi + +- type: entity + parent: [ OrganBaseTongue, OrganTajaranInternal ] + id: OrganTajaranTongue + +- type: entity + parent: [ OrganBaseAppendix, OrganSpriteHumanInternal, OrganTajaranInternal ] + id: OrganTajaranAppendix + +- type: entity + parent: [ OrganBaseEars, OrganSpriteHumanInternal, OrganTajaranInternal ] + id: OrganTajaranEars + +- type: entity + parent: [ OrganBaseLungs, OrganTajaranInternal, OrganTajaranMetabolizer ] + id: OrganTajaranLungs + +- type: entity + parent: [ OrganBaseHeart, OrganTajaranInternal, OrganTajaranMetabolizer ] + id: OrganTajaranHeart + +- type: entity + parent: [ OrganBaseStomach, OrganTajaranInternal, OrganTajaranMetabolizer ] + id: OrganTajaranStomach + +- type: entity + parent: [ OrganBaseLiver, OrganSpriteHumanInternal, OrganTajaranInternal, OrganTajaranMetabolizer ] + id: OrganTajaranLiver + +- type: entity + parent: [ OrganBaseKidneys, OrganSpriteHumanInternal, OrganTajaranInternal, OrganTajaranMetabolizer ] + id: OrganTajaranKidneys diff --git a/Resources/Prototypes/_DEN/Species/tajaran.yml b/Resources/Prototypes/_DEN/Species/tajaran.yml index efa011fc71..60a55da059 100644 --- a/Resources/Prototypes/_DEN/Species/tajaran.yml +++ b/Resources/Prototypes/_DEN/Species/tajaran.yml @@ -1,8 +1,8 @@ - type: species id: Tajaran - name: species-name-tajaran # TODO + name: species-name-tajaran roundStart: true - prototype: MobReptilian # TODO + prototype: MobTajaran defaultSkinTone: "#c27c42" - dollPrototype: AppearanceReptilian # TODO + dollPrototype: AppearanceTajaran skinColoration: Hues From 00052ae5b03dcf19c7d555677365aef6d9d3991b Mon Sep 17 00:00:00 2001 From: portfiend <109661617+portfiend@users.noreply.github.com> Date: Fri, 15 May 2026 16:23:25 -0500 Subject: [PATCH 04/26] add tajaran speech verb --- Resources/Locale/en-US/_DEN/chat/managers/chat-manager.ftl | 4 ++++ Resources/Prototypes/_DEN/Body/Species/tajaran.yml | 2 +- Resources/Prototypes/_DEN/Voice/speech_verbs.yml | 7 +++++++ 3 files changed, 12 insertions(+), 1 deletion(-) create mode 100644 Resources/Locale/en-US/_DEN/chat/managers/chat-manager.ftl create mode 100644 Resources/Prototypes/_DEN/Voice/speech_verbs.yml diff --git a/Resources/Locale/en-US/_DEN/chat/managers/chat-manager.ftl b/Resources/Locale/en-US/_DEN/chat/managers/chat-manager.ftl new file mode 100644 index 0000000000..d736c98b02 --- /dev/null +++ b/Resources/Locale/en-US/_DEN/chat/managers/chat-manager.ftl @@ -0,0 +1,4 @@ +chat-speech-verb-name-tajaran = Tajaran +chat-speech-verb-tajaran-1 = meows +chat-speech-verb-tajaran-2 = mews +chat-speech-verb-tajaran-3 = purrs diff --git a/Resources/Prototypes/_DEN/Body/Species/tajaran.yml b/Resources/Prototypes/_DEN/Body/Species/tajaran.yml index 50bbdafb28..a51dd1b98d 100644 --- a/Resources/Prototypes/_DEN/Body/Species/tajaran.yml +++ b/Resources/Prototypes/_DEN/Body/Species/tajaran.yml @@ -92,7 +92,7 @@ components: - type: Speech speechSounds: Alto - speechVerb: Tajaran # TODO + speechVerb: Tajaran allowedEmotes: [] # TODO - type: TypingIndicator proto: default # TODO diff --git a/Resources/Prototypes/_DEN/Voice/speech_verbs.yml b/Resources/Prototypes/_DEN/Voice/speech_verbs.yml new file mode 100644 index 0000000000..d30f7ce9a6 --- /dev/null +++ b/Resources/Prototypes/_DEN/Voice/speech_verbs.yml @@ -0,0 +1,7 @@ +- type: speechVerb + id: Tajaran + name: chat-speech-verb-name-tajaran + speechVerbStrings: + - chat-speech-verb-tajaran-1 + - chat-speech-verb-tajaran-2 + - chat-speech-verb-tajaran-3 From 6df59d95c7d39fffeb214c1945e2e6804c42d4c2 Mon Sep 17 00:00:00 2001 From: portfiend <109661617+portfiend@users.noreply.github.com> Date: Fri, 15 May 2026 16:24:10 -0500 Subject: [PATCH 05/26] add tajaran physiodesc --- Resources/Locale/en-US/_DEN/species/physiology-description.ftl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Resources/Locale/en-US/_DEN/species/physiology-description.ftl b/Resources/Locale/en-US/_DEN/species/physiology-description.ftl index e53a882208..48c75e3890 100644 --- a/Resources/Locale/en-US/_DEN/species/physiology-description.ftl +++ b/Resources/Locale/en-US/_DEN/species/physiology-description.ftl @@ -18,7 +18,7 @@ physiology-description-species-base-vox = vox physiology-description-species-base-vulpkanin = vulpkanin ## den species -# TODO +physiology-description-species-base-tajaran = tajaran # SPECIES PREFIXES # TODO From b442e35aa226dd36cefe91c74946f41330cbfb58 Mon Sep 17 00:00:00 2001 From: portfiend <109661617+portfiend@users.noreply.github.com> Date: Fri, 15 May 2026 16:35:20 -0500 Subject: [PATCH 06/26] mechanical notes --- Resources/Prototypes/_DEN/Species/tajaran.yml | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/Resources/Prototypes/_DEN/Species/tajaran.yml b/Resources/Prototypes/_DEN/Species/tajaran.yml index 60a55da059..22a2e131d4 100644 --- a/Resources/Prototypes/_DEN/Species/tajaran.yml +++ b/Resources/Prototypes/_DEN/Species/tajaran.yml @@ -6,3 +6,20 @@ defaultSkinTone: "#c27c42" dollPrototype: AppearanceTajaran skinColoration: Hues + +# Tajaran are a species of anthropomorphic cat-people. +# +# TODO: They have sensitive eyesight, allowing them to see in the dark (night vision) - +# however, this also makes them especially vulnerable to flashes. +# +# They have the digestion of a carnivorous animal, allowing them to consume raw +# meat safely - however, allicin (onions, garlic) and theobromine (coffee, chocolate, tea) +# will poison them. +# +# TODO: Tajaran have a light step - their bare footsteps have no sounds, and they can +# walk around barefoot without tripping mousetraps or hurting themselves on glass shards. +# +# Their unarmed attacks deal slash damage instead of blunt. +# TODO: Their fur coats make them more resistant to the cold, but more vulnerable to heat. +# +# TODO: Tajaran are flexible enough to be stored in duffel bags. From 91c9813b686d9e394e73c8887e8699d739acb618 Mon Sep 17 00:00:00 2001 From: portfiend <109661617+portfiend@users.noreply.github.com> Date: Tue, 19 May 2026 15:41:30 -0500 Subject: [PATCH 07/26] add tajaran marking sprites Co-authored-by: SX-7 <92227810+SX-7@users.noreply.github.com> Co-authored-by: Erol509 <81807356+Erol509@users.noreply.github.com> --- .../Tajaran/leotail.rsi/leopard_primary.png | Bin 0 -> 603 bytes .../Tajaran/leotail.rsi/leopard_tertiary.png | Bin 0 -> 647 bytes .../leotail.rsi/leotailanim_primary.png | Bin 0 -> 2791 bytes .../leotail.rsi/leotailanim_secondary.png | Bin 0 -> 2122 bytes .../Tajaran/leotail.rsi/meta.json | 39 +++++++++ .../Customization/Tajaran/ears.rsi/ears.png | Bin 0 -> 349 bytes .../Tajaran/ears.rsi/ears_near.png | Bin 0 -> 349 bytes .../Customization/Tajaran/ears.rsi/inears.png | Bin 0 -> 305 bytes .../Tajaran/ears.rsi/inears_near.png | Bin 0 -> 305 bytes .../Customization/Tajaran/ears.rsi/meta.json | 43 ++++++++++ .../Tajaran/ears.rsi/outears.png | Bin 0 -> 336 bytes .../Tajaran/ears.rsi/outears_near.png | Bin 0 -> 336 bytes .../Customization/Tajaran/ears.rsi/patch.png | Bin 0 -> 628 bytes .../Tajaran/ears.rsi/patch_near.png | Bin 0 -> 628 bytes .../Tajaran/felinid_ears.rsi/basic_inner.png | Bin 0 -> 312 bytes .../Tajaran/felinid_ears.rsi/basic_outer.png | Bin 0 -> 437 bytes .../Tajaran/felinid_ears.rsi/curled_inner.png | Bin 0 -> 279 bytes .../Tajaran/felinid_ears.rsi/curled_outer.png | Bin 0 -> 440 bytes .../Tajaran/felinid_ears.rsi/droopy_inner.png | Bin 0 -> 272 bytes .../Tajaran/felinid_ears.rsi/droopy_outer.png | Bin 0 -> 512 bytes .../Tajaran/felinid_ears.rsi/fuzzy_inner.png | Bin 0 -> 396 bytes .../Tajaran/felinid_ears.rsi/meta.json | 75 ++++++++++++++++++ .../Tajaran/felinid_ears.rsi/stubby_inner.png | Bin 0 -> 319 bytes .../Tajaran/felinid_ears.rsi/stubby_outer.png | Bin 0 -> 438 bytes .../Tajaran/felinid_ears.rsi/tall_fuzz.png | Bin 0 -> 280 bytes .../Tajaran/felinid_ears.rsi/tall_inner.png | Bin 0 -> 318 bytes .../Tajaran/felinid_ears.rsi/tall_outer.png | Bin 0 -> 452 bytes .../Tajaran/felinid_ears.rsi/torn_inner.png | Bin 0 -> 306 bytes .../Tajaran/felinid_ears.rsi/torn_outer.png | Bin 0 -> 422 bytes .../Tajaran/felinid_ears.rsi/wide_inner.png | Bin 0 -> 359 bytes .../Tajaran/felinid_ears.rsi/wide_outer.png | Bin 0 -> 400 bytes .../Tajaran/foxtail.rsi/base_fox_tail.png | Bin 0 -> 487 bytes .../Tajaran/foxtail.rsi/base_fox_tail_tip.png | Bin 0 -> 340 bytes .../Tajaran/foxtail.rsi/meta.json | 19 +++++ .../Customization/Tajaran/head.rsi/meta.json | 39 +++++++++ .../Customization/Tajaran/head.rsi/muzzle.png | Bin 0 -> 339 bytes .../Tajaran/head.rsi/muzzle_large.png | Bin 0 -> 448 bytes .../Customization/Tajaran/head.rsi/nose.png | Bin 0 -> 194 bytes .../Customization/Tajaran/head.rsi/patch.png | Bin 0 -> 628 bytes .../Customization/Tajaran/head.rsi/points.png | Bin 0 -> 358 bytes .../Tajaran/head.rsi/tiger_face.png | Bin 0 -> 528 bytes .../Tajaran/head.rsi/tiger_head.png | Bin 0 -> 458 bytes .../Tajaran/overlays.rsi/meta.json | 19 +++++ .../Tajaran/overlays.rsi/patch.png | Bin 0 -> 1209 bytes .../Tajaran/overlays.rsi/points.png | Bin 0 -> 901 bytes .../Tajaran/tail_markings.rsi/meta.json | 25 ++++++ .../tail_markings.rsi/tail_anim_rings.png | Bin 0 -> 2262 bytes .../Tajaran/tail_markings.rsi/tail_rings.png | Bin 0 -> 317 bytes .../Customization/Tajaran/tails.rsi/meta.json | 25 ++++++ .../Customization/Tajaran/tails.rsi/tail.png | Bin 0 -> 459 bytes .../Tajaran/tails.rsi/tail_anim.png | Bin 0 -> 2325 bytes .../Customization/Tajaran/torso.rsi/belly.png | Bin 0 -> 364 bytes .../Customization/Tajaran/torso.rsi/crest.png | Bin 0 -> 310 bytes .../Tajaran/torso.rsi/fullbelly.png | Bin 0 -> 534 bytes .../Customization/Tajaran/torso.rsi/meta.json | 23 ++++++ 55 files changed, 307 insertions(+) create mode 100644 Resources/Textures/_DEN/Mobs/Customization/Tajaran/leotail.rsi/leopard_primary.png create mode 100644 Resources/Textures/_DEN/Mobs/Customization/Tajaran/leotail.rsi/leopard_tertiary.png create mode 100644 Resources/Textures/_DEN/Mobs/Customization/Tajaran/leotail.rsi/leotailanim_primary.png create mode 100644 Resources/Textures/_DEN/Mobs/Customization/Tajaran/leotail.rsi/leotailanim_secondary.png create mode 100644 Resources/Textures/_DEN/Mobs/Customization/Tajaran/leotail.rsi/meta.json create mode 100644 Resources/Textures/_EE/Mobs/Customization/Tajaran/ears.rsi/ears.png create mode 100644 Resources/Textures/_EE/Mobs/Customization/Tajaran/ears.rsi/ears_near.png create mode 100644 Resources/Textures/_EE/Mobs/Customization/Tajaran/ears.rsi/inears.png create mode 100644 Resources/Textures/_EE/Mobs/Customization/Tajaran/ears.rsi/inears_near.png create mode 100644 Resources/Textures/_EE/Mobs/Customization/Tajaran/ears.rsi/meta.json create mode 100644 Resources/Textures/_EE/Mobs/Customization/Tajaran/ears.rsi/outears.png create mode 100644 Resources/Textures/_EE/Mobs/Customization/Tajaran/ears.rsi/outears_near.png create mode 100644 Resources/Textures/_EE/Mobs/Customization/Tajaran/ears.rsi/patch.png create mode 100644 Resources/Textures/_EE/Mobs/Customization/Tajaran/ears.rsi/patch_near.png create mode 100644 Resources/Textures/_EE/Mobs/Customization/Tajaran/felinid_ears.rsi/basic_inner.png create mode 100644 Resources/Textures/_EE/Mobs/Customization/Tajaran/felinid_ears.rsi/basic_outer.png create mode 100644 Resources/Textures/_EE/Mobs/Customization/Tajaran/felinid_ears.rsi/curled_inner.png create mode 100644 Resources/Textures/_EE/Mobs/Customization/Tajaran/felinid_ears.rsi/curled_outer.png create mode 100644 Resources/Textures/_EE/Mobs/Customization/Tajaran/felinid_ears.rsi/droopy_inner.png create mode 100644 Resources/Textures/_EE/Mobs/Customization/Tajaran/felinid_ears.rsi/droopy_outer.png create mode 100644 Resources/Textures/_EE/Mobs/Customization/Tajaran/felinid_ears.rsi/fuzzy_inner.png create mode 100644 Resources/Textures/_EE/Mobs/Customization/Tajaran/felinid_ears.rsi/meta.json create mode 100644 Resources/Textures/_EE/Mobs/Customization/Tajaran/felinid_ears.rsi/stubby_inner.png create mode 100644 Resources/Textures/_EE/Mobs/Customization/Tajaran/felinid_ears.rsi/stubby_outer.png create mode 100644 Resources/Textures/_EE/Mobs/Customization/Tajaran/felinid_ears.rsi/tall_fuzz.png create mode 100644 Resources/Textures/_EE/Mobs/Customization/Tajaran/felinid_ears.rsi/tall_inner.png create mode 100644 Resources/Textures/_EE/Mobs/Customization/Tajaran/felinid_ears.rsi/tall_outer.png create mode 100644 Resources/Textures/_EE/Mobs/Customization/Tajaran/felinid_ears.rsi/torn_inner.png create mode 100644 Resources/Textures/_EE/Mobs/Customization/Tajaran/felinid_ears.rsi/torn_outer.png create mode 100644 Resources/Textures/_EE/Mobs/Customization/Tajaran/felinid_ears.rsi/wide_inner.png create mode 100644 Resources/Textures/_EE/Mobs/Customization/Tajaran/felinid_ears.rsi/wide_outer.png create mode 100644 Resources/Textures/_EE/Mobs/Customization/Tajaran/foxtail.rsi/base_fox_tail.png create mode 100644 Resources/Textures/_EE/Mobs/Customization/Tajaran/foxtail.rsi/base_fox_tail_tip.png create mode 100644 Resources/Textures/_EE/Mobs/Customization/Tajaran/foxtail.rsi/meta.json create mode 100644 Resources/Textures/_EE/Mobs/Customization/Tajaran/head.rsi/meta.json create mode 100644 Resources/Textures/_EE/Mobs/Customization/Tajaran/head.rsi/muzzle.png create mode 100644 Resources/Textures/_EE/Mobs/Customization/Tajaran/head.rsi/muzzle_large.png create mode 100644 Resources/Textures/_EE/Mobs/Customization/Tajaran/head.rsi/nose.png create mode 100644 Resources/Textures/_EE/Mobs/Customization/Tajaran/head.rsi/patch.png create mode 100644 Resources/Textures/_EE/Mobs/Customization/Tajaran/head.rsi/points.png create mode 100644 Resources/Textures/_EE/Mobs/Customization/Tajaran/head.rsi/tiger_face.png create mode 100644 Resources/Textures/_EE/Mobs/Customization/Tajaran/head.rsi/tiger_head.png create mode 100644 Resources/Textures/_EE/Mobs/Customization/Tajaran/overlays.rsi/meta.json create mode 100644 Resources/Textures/_EE/Mobs/Customization/Tajaran/overlays.rsi/patch.png create mode 100644 Resources/Textures/_EE/Mobs/Customization/Tajaran/overlays.rsi/points.png create mode 100644 Resources/Textures/_EE/Mobs/Customization/Tajaran/tail_markings.rsi/meta.json create mode 100644 Resources/Textures/_EE/Mobs/Customization/Tajaran/tail_markings.rsi/tail_anim_rings.png create mode 100644 Resources/Textures/_EE/Mobs/Customization/Tajaran/tail_markings.rsi/tail_rings.png create mode 100644 Resources/Textures/_EE/Mobs/Customization/Tajaran/tails.rsi/meta.json create mode 100644 Resources/Textures/_EE/Mobs/Customization/Tajaran/tails.rsi/tail.png create mode 100644 Resources/Textures/_EE/Mobs/Customization/Tajaran/tails.rsi/tail_anim.png create mode 100644 Resources/Textures/_EE/Mobs/Customization/Tajaran/torso.rsi/belly.png create mode 100644 Resources/Textures/_EE/Mobs/Customization/Tajaran/torso.rsi/crest.png create mode 100644 Resources/Textures/_EE/Mobs/Customization/Tajaran/torso.rsi/fullbelly.png create mode 100644 Resources/Textures/_EE/Mobs/Customization/Tajaran/torso.rsi/meta.json diff --git a/Resources/Textures/_DEN/Mobs/Customization/Tajaran/leotail.rsi/leopard_primary.png b/Resources/Textures/_DEN/Mobs/Customization/Tajaran/leotail.rsi/leopard_primary.png new file mode 100644 index 0000000000000000000000000000000000000000..791420805d1dd8ced333d00f1725df88cf9eed8d GIT binary patch literal 603 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/_DEN/Mobs/Customization/Tajaran/leotail.rsi/meta.json b/Resources/Textures/_DEN/Mobs/Customization/Tajaran/leotail.rsi/meta.json new file mode 100644 index 0000000000..7ac3a8b36e --- /dev/null +++ b/Resources/Textures/_DEN/Mobs/Customization/Tajaran/leotail.rsi/meta.json @@ -0,0 +1,39 @@ +{ + "version": 1, + "license": "CC-BY-NC-3.0", + "copyright": "Taken from Skyat-TG Repo, original owner unknown - https://github.com/Skyrat-SS13/Skyrat-tg.", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "leopard_primary", + "directions": 4 + }, + { + "name": "leopard_tertiary", + "directions": 4 + }, + { + "name": "leotailanim_primary", + "directions": 4, + "delays": [ + [0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.05, 0.05, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2], + [0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.05, 0.05, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2], + [0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.05, 0.05, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2], + [0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.05, 0.05, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2] + ] + }, + { + "name": "leotailanim_secondary", + "directions": 4, + "delays": [ + [0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.05, 0.05, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2], + [0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.05, 0.05, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2], + [0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.05, 0.05, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2], + [0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.05, 0.05, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2] + ] + } + ] +} diff --git a/Resources/Textures/_EE/Mobs/Customization/Tajaran/ears.rsi/ears.png b/Resources/Textures/_EE/Mobs/Customization/Tajaran/ears.rsi/ears.png new file mode 100644 index 0000000000000000000000000000000000000000..7444faecf09206472ebd965ab7323ff20ae85a25 GIT binary patch literal 349 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85p>QK$!8;-MT+O!PA~Djv*CsZ*Lj$H5>4>K3w9S_=M%n&h);i z6IU-WEnPaLDT>`=$*cdr>?p*qqOkabN$`DQjnbs&;&T+A{XyZF>{%g@6BgaMs_V zH2&DDd_X5KG@O0Bf9pIDi=kmvq-*@rO8wWhHT{WGZo2RDHCTV#Td`#+Ofd?Mpxr*g}{x0E~Bp`~Uy| literal 0 HcmV?d00001 diff --git a/Resources/Textures/_EE/Mobs/Customization/Tajaran/ears.rsi/ears_near.png b/Resources/Textures/_EE/Mobs/Customization/Tajaran/ears.rsi/ears_near.png new file mode 100644 index 0000000000000000000000000000000000000000..c069ac4ab414cafa249f0749c40138950b4e9eea GIT binary patch literal 349 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85p>QK$!8;-MT+O!F!%Ajv*CsZ*MwsH5&-DK3pO$7*oac{oax0 zN}cI(s&8+2ZVX!}?7QU4e+M77C%lT%lI)8UC7Sf^zqxw8EOTE=&tr*eiPc{>KRvPk ziknR43|xIF3a4Lm%eFwm1gwMT_(o05>0R0D(Bz1&YoRX zlEy#X%NFPe1_rbK`s`RnFmtL=*SVz?`mZZ%UhbUxQK$!8;-MT+O!KI!qjv*CsZ*MvBH7f`(IDGy8e)8`158S-F zkIkxbkj^bpGvr_|5AU45w9%^e{_>*ViMfA^l6o>DbLKt&YP5G-P|f#wzPoO}X;_~6 zaq-qtpou{6pe9#x^^z}p`EPBTEf=1vTNgI_@Uylwj)(cX4ptZ4yn0c#?V;$8p6Q0i zWQr|9?lt|iagcj{J#bp#^PN{d@oPNJmHm9O?hGHquveyMnfn)HDi;KNIS&%?boFyt X=akR{!c9;%_ov33#=fuqUC0UmC46^P literal 0 HcmV?d00001 diff --git a/Resources/Textures/_EE/Mobs/Customization/Tajaran/ears.rsi/inears_near.png b/Resources/Textures/_EE/Mobs/Customization/Tajaran/ears.rsi/inears_near.png new file mode 100644 index 0000000000000000000000000000000000000000..e7af318b33ac841a00b417c4516eeaaadfd4ce37 GIT binary patch literal 305 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85p>QK$!8;-MT+O!MUC;jv*CsZ*Lm%H5>3SI2>~R@xS}TIqgkL zU46Ahr+RrV2|9RJ=ndnW6GfeQ|5CCxNa_|5E literal 0 HcmV?d00001 diff --git a/Resources/Textures/_EE/Mobs/Customization/Tajaran/ears.rsi/meta.json b/Resources/Textures/_EE/Mobs/Customization/Tajaran/ears.rsi/meta.json new file mode 100644 index 0000000000..34b9f717da --- /dev/null +++ b/Resources/Textures/_EE/Mobs/Customization/Tajaran/ears.rsi/meta.json @@ -0,0 +1,43 @@ +{ + "version": 1, + "copyright": "Creator was not supplied, oldest reference to markings ('patch') tracked to KasparoVy @ https://github.com/ParadiseSS13/Paradise/commit/3610cfd4ea7e9bffc804320851f0b0a625db1dba, meanwhile ears are made by Cael Aislinn in commit https://github.com/ParadiseSS13/Paradise/commit/9e4539fdce01f00ed7e47ca1174a1470ac5fe77c. Minor tweaks and '_near' versions by SX-7", + "license": "CC-BY-SA-3.0", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "ears", + "directions": 4 + }, + { + "name": "inears", + "directions": 4 + }, + { + "name": "outears", + "directions": 4 + }, + { + "name": "patch", + "directions": 4 + }, + { + "name": "ears_near", + "directions": 4 + }, + { + "name": "inears_near", + "directions": 4 + }, + { + "name": "outears_near", + "directions": 4 + }, + { + "name": "patch_near", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/_EE/Mobs/Customization/Tajaran/ears.rsi/outears.png b/Resources/Textures/_EE/Mobs/Customization/Tajaran/ears.rsi/outears.png new file mode 100644 index 0000000000000000000000000000000000000000..4f5041880bcc735c234d32468092621341871e16 GIT binary patch literal 336 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85p>QK$!8;-MT+O!R?+djv*CsZ*K;2wJHd-CT5$zJMi|&p_pm6 zKNo>}M z6@CA=sLgZg$9)TqSe9FsNN&%vVkpdus{VW^YIn}wWonmDAx%9Bs*&D(zRSX8a$#wp3 qs(d^;@2Y?VJzf1=);T3KDKs!JabOS*EeE8lcjxUlXj$imtQr7{D1R>i literal 0 HcmV?d00001 diff --git a/Resources/Textures/_EE/Mobs/Customization/Tajaran/ears.rsi/outears_near.png b/Resources/Textures/_EE/Mobs/Customization/Tajaran/ears.rsi/outears_near.png new file mode 100644 index 0000000000000000000000000000000000000000..54583699fdbaedcac1c46addae4d267173ab17c9 GIT binary patch literal 336 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85p>QK$!8;-MT+O!Hb?Qjv*CsZ*N`XZBY<#4cs7Yy+Bsy%%+_7 zvjU!O%7GCq_U}A-xYd3qe91S_*s?DBM!npVYthoP<~yBB-1+s|lmFXuxx;^kzxMa} z9gz|#Hv3S@l*&C9JB!~1l+3)oN~^)6{atN^;rY#9?;VekOqI(oDG1;2s>#lzRiGzk zR#dgM{CW%fK%he)pr$j=wg1JN7e0HZ>y>0j9lJ8;O(@6Q(tF-3_wQQy(wZ^*cj<}C z2UUYNxo>&Cdi7nWce>I$)nS?$9(?Zk$+&n=TVc<}z{?;}Pgg&ebxsLQ)w}cd8?>x* HLly%7jN^gU literal 0 HcmV?d00001 diff --git a/Resources/Textures/_EE/Mobs/Customization/Tajaran/ears.rsi/patch.png b/Resources/Textures/_EE/Mobs/Customization/Tajaran/ears.rsi/patch.png new file mode 100644 index 0000000000000000000000000000000000000000..591dde13ee397b1bd8fb0c2809e3298b881c9853 GIT binary patch literal 628 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85p>QK$!8;-MT+O4N;yhjv*CsZ*Lx)*lfV#5a_{rXGMc_xYPn> zsUr!%dyhp`EhU5Tmxg) zad_J(7ItzaJguB}LrEgJPT%)+?e*X3k!Am<2#F`mTDC;z^p)Dstt!7)WX{^M?)8Eh zd*pB3s?qg5zxK3MTSRqb=>gG6^E-E6ZNI*#`lP1HfA=$gU9@vcn^YDkXWvLq7PrpW zdR%3S^?|at*U!H#T)rn3tyyatoIOc=rq$kpLG1IJeIX~(L33QK$!8;-MT+O4GEqujv*CsZ*Ly#Z8i{a2%Ic!o)>bUS8V~a z)KZzO2DNElQxc!1IzKWzrg*7ds7d9}Jjwp4&Ad~7?VCUSxHo6->uq=To=^!5ja|o) zZKGJYl1t&#CX=9+%6awcr`)N$`?Gt|j{94$u+CU^@=EDkUHQpTlkdLTrI&r%OhfJc z^lxhAsW*3)7AAL?P7h~~QLOa7yVh$gsgpQ{t~3Fs>@sMvK&aOe4tu_lxLSoD3i?pEN;UoX(k=Qho_QZjk( zq#J75>cI<_2Rk}Gugq&pH1NHgVm2d1-Sqa!wB>J7Ve+M8i*7MhYd_d*6uwmJz~)zVS%OW~<@yh=+^1#g^WvY)$n933gZ(1&J-jQ$`b##QK~~>{Fb8ZH+*GLH2ME{!(nD;;5@4j!Uc{#FO0ALsIyZ`_I literal 0 HcmV?d00001 diff --git a/Resources/Textures/_EE/Mobs/Customization/Tajaran/felinid_ears.rsi/basic_inner.png b/Resources/Textures/_EE/Mobs/Customization/Tajaran/felinid_ears.rsi/basic_inner.png new file mode 100644 index 0000000000000000000000000000000000000000..57bcdaa8b9518af96498ea7e720564df0c168432 GIT binary patch literal 312 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBuf-vKbiP>*~f@eKl978JN-rn*RYElq6@X=j5|8ee~-gSF= z?;X4Rq-)Z`SyEi~ahyN@pEckYO?0`yD$%*&+OL=yh8MLaExW|H(a2o0?ApoWk;j(( z{IO)?Yt1M#reF8^4nNrBdV5#(^6gdYvcp$scu!na6`elqa_Xywi%#YaeeE}Uw~y*z4?EMs+E*M*GgV)h-rg4P!^ rW@|opocK}vL*dkTKSr3g4HHkWZZ$2Dsd8s$28nsP`njxgN@xNAOdECB literal 0 HcmV?d00001 diff --git a/Resources/Textures/_EE/Mobs/Customization/Tajaran/felinid_ears.rsi/basic_outer.png b/Resources/Textures/_EE/Mobs/Customization/Tajaran/felinid_ears.rsi/basic_outer.png new file mode 100644 index 0000000000000000000000000000000000000000..24fe753ebdc03723e0c8e5a009b075c67eeec805 GIT binary patch literal 437 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBufiR<}hF1engO{g^V@O5Z+grJP%?bhyiEnkUBv%yHS90e+ zJZ^YL_OXfAl=V~BZG1mjfNKWRUPW_=C=Ub`0D1vN{!T13d=<_nPi={@Sx{+ur8g()YO5Z{7a?48!d^8;kAK7}8_1 zKSsU0d8A4wcG}a2-(zGsie=aRY|ZAqc)nr(oRjgc&&~ep3n*zZr#Q{MW3%d>*IdR$ zuXiootkHGY$72%XuAkO(PQI2(GB(s=uBlaGj+tc3Jg@0+AjDn{u~wPFAO literal 0 HcmV?d00001 diff --git a/Resources/Textures/_EE/Mobs/Customization/Tajaran/felinid_ears.rsi/curled_inner.png b/Resources/Textures/_EE/Mobs/Customization/Tajaran/felinid_ears.rsi/curled_inner.png new file mode 100644 index 0000000000000000000000000000000000000000..b447625e181c21bf541618c0f4c900c443d8a57a GIT binary patch literal 279 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBufiR<}hF1enaE+&nV@O5Z+gsjzO$GuC0R@k9cPNTC3GZ5U z#iWhJ#ldIwp6L@7rW#)0pPgA+R@&9=#PKq3_pZ39O0&JYR^PoAPAdw?3vEg)B7T| ztgYU=AH8_ovT;s2Q`?=Jd}&8!o+wmHn3Vs8ulfd)=Dcg?*Fv;3)UJBPC;PMe%9g!v Pok2pLu6{1-oD!M2cKJdmiJJyRhN*lx0nfo7N>dIWuL_&^K<~u8oBr>(Vy~aQY@+)%w`Ql_eDB{K&a4H0 z4*qi88Fl~r>6@Yl3v0js6l~{uz+Ym`tmLYgG9fgywo|$G^n=!yoIiX^W8aJYT>jc{ zm40g-Ytp$mmfE6x-@Jt~Z*HniSj3S3oomk9Zy+y%!JU)Q`8_Qe_9`y;9%e)8m_rKS$ASD7k2`DFTF{{n{BKey%Rrz@>tgxc9)oO+X) a&E@5%C5~ReFlS)!boFyt=akTt&;$UE+_)_O literal 0 HcmV?d00001 diff --git a/Resources/Textures/_EE/Mobs/Customization/Tajaran/felinid_ears.rsi/droopy_inner.png b/Resources/Textures/_EE/Mobs/Customization/Tajaran/felinid_ears.rsi/droopy_inner.png new file mode 100644 index 0000000000000000000000000000000000000000..b87d5560cec78d726158b92d000abaebc5e9098d GIT binary patch literal 272 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBufiR<}hF1enaH*$@V@O5Z+nWcunhkgu0`8W-=6}hbw>+;o zZpy;hr59#>cTn2fa%>CxWx<&Fj}tYQ{`nSpUwrwG)zN+SJNXYMUGFcvv(D-Cz4(fc zK9{xETr<0tz5Vw5rL%WD5!^B91FOYTjw|<`MIR~$S_O2gM*IKtdTT=?$yG7IvIQxA zJEz~zF*v^A6t}_o)X$%V)Sr~GKarTm^h6@;2a`!DClg3hz>?SVj+_irotEgTe~DWM4fl?rI@ literal 0 HcmV?d00001 diff --git a/Resources/Textures/_EE/Mobs/Customization/Tajaran/felinid_ears.rsi/droopy_outer.png b/Resources/Textures/_EE/Mobs/Customization/Tajaran/felinid_ears.rsi/droopy_outer.png new file mode 100644 index 0000000000000000000000000000000000000000..7b3e94743008d43ebff5dc869451def8d4018e16 GIT binary patch literal 512 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBufiR<}hF1enLzAbAV@O5Z+grSS%?bjn33sD2_O!BpTvf&Q zShq*+@H=I{WX^zpZ}Lw47IHdztx6O~B(pNU4NF^b18nYpT z;qQIxeRE$qBzONWzLtN|;d*JPD_d98t%A5T=e%u=i;fvSu(`LK&!$p6VP3ka$A#sy zWFFhxD`)57yKYu{dJ@Z==_;v>FQ>0Qa%sJB-{btRx7w1jrzd@$|s^TMLP9LK!= z@%{)qs;-b17x%;O;tkaYLYr)IK7RiGs<}v|p#uuMKI^|1zFVvPr>ng6{4MWO=E6n6 zlZ+oUPZDaVt-Lw=Key#0cYQ{dcf0)F9-CE`Q@V3{L(X(%v$CbW{O)(Qv8-!mzq0W6 zC(U)|xfZy^C#5@m5t{JkF(c=ca$^PcBa?Q#XjV~n3t0YB|3mAHhRu3mA2}72U|>;E k$W`WVQO?=d&ON;Zj3Ne4S3j3^P6OKqb?%l=&&6KUG54hjC}tb=?KyvjZ)S@_Oe0&@ovGWt7#+KzJ$DmNnedla z(k8ifuWlHfDly|vdvf>lGS5vlfcZX|TYiLWI e4>QhEvrBt>=AGFr($1hzX7F_Nb6Mw<&;$T9vZ59M literal 0 HcmV?d00001 diff --git a/Resources/Textures/_EE/Mobs/Customization/Tajaran/felinid_ears.rsi/meta.json b/Resources/Textures/_EE/Mobs/Customization/Tajaran/felinid_ears.rsi/meta.json new file mode 100644 index 0000000000..45e8f84702 --- /dev/null +++ b/Resources/Textures/_EE/Mobs/Customization/Tajaran/felinid_ears.rsi/meta.json @@ -0,0 +1,75 @@ +{ + "version": 1, + "copyright": "Felinid ears made by @Vordenburg for Nyanotrasen @ https://github.com/Nyanotrasen/Nyanotrasen/pull/581/commits/77fe4c38589516ceef533de17cde56665ce970c7, modified by SX-7.", + "license": "CC-BY-SA-4.0", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "basic_inner", + "directions": 4 + }, + { + "name": "basic_outer", + "directions": 4 + }, + { + "name": "curled_inner", + "directions": 4 + }, + { + "name": "curled_outer", + "directions": 4 + }, + { + "name": "fuzzy_inner", + "directions": 4 + }, + { + "name": "tall_outer", + "directions": 4 + }, + { + "name": "tall_inner", + "directions": 4 + }, + { + "name": "tall_fuzz", + "directions": 4 + }, + { + "name": "torn_outer", + "directions": 4 + }, + { + "name": "torn_inner", + "directions": 4 + }, + { + "name": "stubby_outer", + "directions": 4 + }, + { + "name": "stubby_inner", + "directions": 4 + }, + { + "name": "droopy_outer", + "directions": 4 + }, + { + "name": "droopy_inner", + "directions": 4 + }, + { + "name": "wide_inner", + "directions": 4 + }, + { + "name": "wide_outer", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/_EE/Mobs/Customization/Tajaran/felinid_ears.rsi/stubby_inner.png b/Resources/Textures/_EE/Mobs/Customization/Tajaran/felinid_ears.rsi/stubby_inner.png new file mode 100644 index 0000000000000000000000000000000000000000..2cb7d1093d11e2a6daf0d9fec38362f6e0abac97 GIT binary patch literal 319 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBufiR<}hF1en@QSC4V@O5Z+glg;niNEi6~0)u{Uhhs)-SBD zy8_OOx;7dxpZ~voWAYBs-yu1RE}rx1Ejo8HY|d8u{mUZFS9;F7{Kc@>bjeoRV;85_ zTIZ}i#r43B=a^16ck>Oq-~V#|U)>{nw(^_mi{IDu*M^2ZYY{>H)LSwZqwU!J8tEmt4a(j+mFP}un2xB(Z!VUu(jio zVS)IBRbq@Dp{sW@WS!T3b-v-(FVdQ&MBb@ E0Prq+Q~&?~ literal 0 HcmV?d00001 diff --git a/Resources/Textures/_EE/Mobs/Customization/Tajaran/felinid_ears.rsi/stubby_outer.png b/Resources/Textures/_EE/Mobs/Customization/Tajaran/felinid_ears.rsi/stubby_outer.png new file mode 100644 index 0000000000000000000000000000000000000000..57e8c8f3753c443e6d7bbd7de6cda3e4c19b8594 GIT binary patch literal 438 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBufiR<}hF1engSV%PV@O5Z+gsdy%?bhyiFcDLc;DAE?``c* z-XS|ZlZX4^#>Ka<{rBcz6Lo93wIEk`WA5zRUfH)ZOs8`koh5yF`sw`D6)ZZZH@$zc z>s@8uiZ?6DT7DS*c$=}eC?+S~>&uEOA`{q_8lH_UoDj<1^Z19(i{JkO-}>+UY?J?b z*Sp(6dX;&zuLe8lTa|vCwk-2j@m`OmhA;jJ<$src5WlBu>T(x^rIc7j??!q(GFWSSvEkZ<*U+D zQQ3munhCcUi;nBOza_fL+99r6K0f@vc&FojUW?XySCc1w|9IHI#;pGR-eK8B&n4t8!UD#h!?I$iB2Xr%rU2?+CVp0zExg3IO3K4zcg4PWIIA=Wc6B&^8X Y$Jprd>is>2Y&npir>mdKI;Vst0Q`Ee#{d8T literal 0 HcmV?d00001 diff --git a/Resources/Textures/_EE/Mobs/Customization/Tajaran/felinid_ears.rsi/tall_fuzz.png b/Resources/Textures/_EE/Mobs/Customization/Tajaran/felinid_ears.rsi/tall_fuzz.png new file mode 100644 index 0000000000000000000000000000000000000000..c6e610549a7432478195924a311a4db3fd2ac1c2 GIT binary patch literal 280 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBufiR<}hF1enaIL3{V@O5Z+gsjz%?bhx0dN1V=e)jPY2w9Y z_8}Po_r1?-Fl;QGan_=+sJK&p>6BBiZrc2>DHYdKop$|iAlz>J9f&2EVf^cKwHw()iMD6as+jH#G!EFBhE}vPx+(_}CE%f1C zd}ICXUG2|o6<%LtpB8rQVU>gaYGH$4^X0et#WU{y*<)(^KqHhBWR!#a literal 0 HcmV?d00001 diff --git a/Resources/Textures/_EE/Mobs/Customization/Tajaran/felinid_ears.rsi/tall_inner.png b/Resources/Textures/_EE/Mobs/Customization/Tajaran/felinid_ears.rsi/tall_inner.png new file mode 100644 index 0000000000000000000000000000000000000000..6755edeec1453e0caaab7e9e154e843c6f2547df GIT binary patch literal 318 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBufiR<}hF1en@Uo|iV@O5Z+gpx&%?bhzfiI3#S1|am(C&Xc z*T#MKqE;Wz9B1aHwNw5J8EbIQuPHmUcYiOKYxq2#eVwFSvf+S8>9EItX-V5wk1Ziu6bzsZE^hfneT5t7GdyEj4`bAyuGcM zwejsS&i7oaXXz|g75IFG`=F{oU;x9j;9Ke~eFv=>{(Ah%y!5z8JdUx&roTV;y*YDw zCF=t9_|U75|GOvfShbvf_^LbX`qz+a_O26eg)T|Hc`W6yee)`{ZpIa})*N5|$gYC7 nqXWc#!mOYK0gJYz+!Pm$wP)FvH{%&FT(&RFK1J~RD# z&*Q)MQYD-&Z@cbyeeJx+DyDl~oE168_u039jrfvfv+dH;wGAz^wjXd@6d51QxYcMs z6VQGzXpp@+rKE^!t>x5J{lXt!C#?u$+BW^zllhIYZ!F9ID6On#HL*EgoE?3?QCH!j q&fN1$8$=hhuz0XQwg0hy?)Oi4lIC6A^+5kIFnGH9xvX>WM{I*!at;W~aZNN*i#GI~T)q9wjH^rkE%jyOIh?>=Ij?^1^V{Vq z2DSHZOSuNt=yO%RBBQ!KM#m=pSA$;ZQ zDzk$7e`Z~s?6lw8u3Eln->>7Y?PDx5sC`wN-RsRbX8z|NiyW`JVRf zIUIqEFIta(d(yvTzT&sE4+15(Z||yw8O!iMZ_^u2zQtRUCK|PMfcJAno`i3cb z@j;#|pA`LUdRMvR*WHuqjqgPte9K9j{Db>P9OHhiE22Q>LBWym2Y=VDFmu|w?e&!M z9Z=& z;e=(GQNI?gd+mQ`=Hyzy+mtJ&4>wQ6U@Wvw9M%^GdI$nOnDb5d4O(U9zv`Hc8so~RMpJjSUFMuHX~(oBTVwXlIa4>W zA)==6cCZF_=B#5|a;?kH7QNeM{o_%_vwDr1IUxq6@^R#bT i{!ft!W_-i(lbg(szGA%WTA=w6BG{x06Twt8P_UxT~(Th{k$ z1H*Ik?_aFFZ?%5H*EX)Rq1Pog-(zCgv-Q}|;H`X*7w(N`{vBoeKKpCTF+%}n?8x9k z!~R)P5oK8`6K95=xPQ{$*LK5>^nagsyR?4~zr^QB zSJuQb%Is6JSrE$fd5bUOrc(Bb_7?Y?GplpC5;ot`wy$;g8?2!Ateo*4V_f??27Voz z50=K&-}W<&18V zfjaH$-z`j=Wn=7`#ps*z%2Y8SQS1GI>8B5|GqMOcFyJ751Sl-s^7GnntN854_kPV^ zAAh~{vv1=%vt_0Gt{n?64L&zrG0N}KwJD{+ZP_bjAXXW|o{?Tyo zXc0Q#7ykCm7L)khoav^Q?Y<}Gtm*x=ao)=B#pz$8y!#oLI20PN5C&Qc>J!{wFTN`K z>DKf)pYQPrUkoyR6aKU2-cja^MGs>Yr)$iwI?d-$$?PPTdwf~xuWRA?4##&p>D4lB z5ZT45D9oGltMb>rvi*Gj4)z}ZKjrJO;~pj~`;2BR01_nk} zPZ!6K3dXm$427B%L|g-tw4|-gjvTt%qP-xEF|6~K(N8{CDG8awXMCB39(?RyYH^&O zkww6Pfsw_FpA*^7|xorM9&T? zQfyhZH>ZF1tyj*^^Y>hT^xjEb9BK&IBy5D0c!yzJo&SPTw~v1t{>Z-M-pH4-_TTCK zQqPN{zvRBRxqK|^`}%)2>l|A9A6KNUf4!=j>3s5oTE1;>dEB49c26sny~@46w3aW$ tG%jY((K{0}Z*JjGXkcK%BpmKDS%1q(<@)a6{0JCI44$rjF6*2UngEaOd$a%m literal 0 HcmV?d00001 diff --git a/Resources/Textures/_EE/Mobs/Customization/Tajaran/head.rsi/muzzle_large.png b/Resources/Textures/_EE/Mobs/Customization/Tajaran/head.rsi/muzzle_large.png new file mode 100644 index 0000000000000000000000000000000000000000..f96ed035373c023b9a68863d279e8870fa8f0ce8 GIT binary patch literal 448 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9GGLLkg|>2BR01_s6= zPZ!6K3dXm$47*wkL>eBxIdiS7sa5WvFvquBResTLby)l#2yPL0^Cs5ZKdc}@^4byC z7JGwZj-TT`9ewAjDaFL0(9kgPz~l5Q*Q8l@K30hQu8i3OX<_vIyWN9-Lec$`3HonOA>*e*=&HMgtp0#FWn8Y2A2htBOMx08#eMuM?B@CXfelF{r G5}E+E4!k`8 literal 0 HcmV?d00001 diff --git a/Resources/Textures/_EE/Mobs/Customization/Tajaran/head.rsi/nose.png b/Resources/Textures/_EE/Mobs/Customization/Tajaran/head.rsi/nose.png new file mode 100644 index 0000000000000000000000000000000000000000..31bc5f06d838c76e2127662fbc429f88e5cd0b53 GIT binary patch literal 194 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9GGLLkg|>2BR0pkRro zi(^Oy&L2qoo?H5wQ$PWWf(C|0`9`*ucFvS#Jnesh_A_|8`njxgN@xNAK-Mr1 literal 0 HcmV?d00001 diff --git a/Resources/Textures/_EE/Mobs/Customization/Tajaran/head.rsi/patch.png b/Resources/Textures/_EE/Mobs/Customization/Tajaran/head.rsi/patch.png new file mode 100644 index 0000000000000000000000000000000000000000..64f3effae9f7e74fee9f4a0cd13fb0013c893f94 GIT binary patch literal 628 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85p>QK$!8;-MT+O4f{P^978JN-rm}{>X3m5+k-9Lvv=IkYuf$5 zdq?S4-dD{xj~BdVE-5Vu;#w4Y#FITg@Bf6jCvkgbgiKcY&%Sh}b8*q6v=1&dOqxq~ z<+S|zH^of0bZQ`zRIG24Z%pGp`=|SwbxuD?Fc4UN*;7Z1d-3-zTVwP>6@33^&ieO7 zo+WKzgzAD-T9pv|!_7W3J?GtNI}d{mvybnW%lBMr5@ z`^2sp-nlTtZ+ZQ%t)2~nI<{vHe60Agk+bE6^yCHe_i}`x~JAx82$j z&t+V&Gv-RG%ZvGQGtBJY$MF9V|G(PdwU2@e96V|AHQkoI=KrmKEeD%Jne0+OeCT?_ zcJE@$x~=avU*#^_ExT&#s+hNzVtYS$-=7}O3LpSH!!UiagL28z2fk7QkQTRbt3^WyvOrKi`cc&_PdlTc4Eo6Tx5 z`||6rSB%3No)=YWUt`bu@b_`>fh>*FK|X52hI0M)D;%C1>iqv(_x{fosj%~ZS&wP2 z(#<(AgXgaY+~F?$oF932eY&zh?X1rMVEi(8y85}Sb4qAxf-x4?aJB22g%wEbtIP0b XQgOhE{x=;k?|;7Eecx2`a%7VL)@>1> literal 0 HcmV?d00001 diff --git a/Resources/Textures/_EE/Mobs/Customization/Tajaran/head.rsi/points.png b/Resources/Textures/_EE/Mobs/Customization/Tajaran/head.rsi/points.png new file mode 100644 index 0000000000000000000000000000000000000000..dff01d78aec7eb32387d8cb5d4dd802b65ef5205 GIT binary patch literal 358 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9GGLLkg|>2BR01_nk6 zPZ!6K3dXm$&I&dwh`0r&Tx#UK(RlR6eA$RD+ZzqKM}8P?Ds=p$q?lL~%hC6tuFt!$ zkDHN2z~O+Nf$!yIv4vaQS5zFoxW&F#v^+(pcHVQ{y2{=vv$h{IpZ0E@lp5)@`Sq?{ zweNPVE6%;$X7Kxt%=uaN-+yiA?i0{jaqL*Jvk*VXFa})21AUfbg*yL=zern7mJeo~ zsBM6FD$%zsI`b`6ts&>*ol6IN5qVuIlLt&bdn?WGB7&ZMUtge=>iM z;2BR01_s7M zo-U3d6^w6Z+4eOX2(0NNCCynYQLa<|sY~?~{frCS+{Z;a|J9^C`#8KPg+Q zJObY^p0ECV^TG|Uk4lU}9I64=zY1A>>nTisVeiyi61zPma@hy@S&v`rusPqqEMTI4 z+rIbH6D34ix)*f>)I?63DEs~7%g<}B9JHu#;K_Z-{nuMh$5JXfF|N`Lj48c27?GlTUJ=^QPTDx|g+#&EfdJcMIyL@7t)Jet_ks0;3Q? z^kX;6p0ak?)DwFT<{$s7?L7a=y;nwT8}!Sc-<#unzGCO3AJe2C`Cfi;_onzmYXu7v zxf{z{)Q|6tmD6W^W2Y-8aXfJCq4TCGMIoW3U#1Fiy<4`l@zMMbpEh!T`6$fBBOqwK zIxjMR3CC^p~Acq8*m zVr%8RP?_Ve#7~4O$Z14mALKr#adTeY`|Y`_{c~r`+QK$!8;-MT+O4HBL%jv*CsZ*OhnZ8i{SO`ODfqk&f=vg6>5 z2GtDBn+?;t7?l=1zabbQ(sE#-#{cUDY7^%fmX)e7l&xNs_35c<---RdU#nf-a_02s zJK_2t-=}wf{=VbqYqi|lezDhgK3JrYC)NJ?&%Xb^A3n1b+7uf7WVfz3Q}V9*ZxcH{ zKfd+Jte&)wm95^SZd@^vq!q*mTL&KWmn zp=E~N^oy^4-%WV6;!gkl8QUUfEn9bP)0;c~L1q_}zSO>dRVd?I_VCd9_i)?(drVS4 z#&{|{NA%Ybkf5ilpUXO@gr@7Jr!{##`D_(FxG2A5-KE;YQqBqtj2sROOacuIEa=P! T_k}7Lwz3`Od}p(FKe90Z-%-EE literal 0 HcmV?d00001 diff --git a/Resources/Textures/_EE/Mobs/Customization/Tajaran/overlays.rsi/meta.json b/Resources/Textures/_EE/Mobs/Customization/Tajaran/overlays.rsi/meta.json new file mode 100644 index 0000000000..5f23a51818 --- /dev/null +++ b/Resources/Textures/_EE/Mobs/Customization/Tajaran/overlays.rsi/meta.json @@ -0,0 +1,19 @@ +{ + "version": 1, + "copyright": "Creator was not supplied, oldest reference tracked to KasparoVy @ https://github.com/ParadiseSS13/Paradise/commit/3610cfd4ea7e9bffc804320851f0b0a625db1dba. Minor tweaks by SX-7", + "license": "CC-BY-SA-3.0", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "patch", + "directions": 4 + }, + { + "name": "points", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/_EE/Mobs/Customization/Tajaran/overlays.rsi/patch.png b/Resources/Textures/_EE/Mobs/Customization/Tajaran/overlays.rsi/patch.png new file mode 100644 index 0000000000000000000000000000000000000000..835270a15bca3d516bc8ee93a3edf88727045ed1 GIT binary patch literal 1209 zcmV;q1V;ObP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGf5&!@T5&_cPe*6Fc1Jg-FK~#8N?V8O_ zDlrttJ9ouaqD)L&u+T|d$ijpNfSvIv^l^L$-@-^-uw(;q0Sk$;U_mqlqgz>V=YMVw zx8eZPPN#FZ=`Wc~JCvUG^z`&ocsw4D$K&yMJn6W-yyYJg8Yk%3-SK`F2DR` zodrNy_xJayX89CrbFbD_9JkOt3mI;HQnfE?tD24Gez5Bcy7P*{?( zj6h~_r77bWip!tK)X@d-jtjRGj&um471Z=5;Qz>n<>M`X`UY2CO_x^wRtuJzwZh@y;ZlCH+1zN-jYdOT{ze6$!q9Hoz6{|u zVY%Dnb9b;U{|7KBHbZqJfRZRd4ALMT`+-d6p9FUa8BK)CsFrCHshyw-GKc3^&5RZE z@$o^0B6DyfC6mE*XjZg`uzM{Sj8b9l~-qk zS;^!Ci()>X%TRW-ouCXBLLTysEMVJ|G;iY7p*8v13W%a8;7QLaE*v9<+<2*LO}>!@ z^m@G?=J@*hO2STWwWOTuV5tnSS6T>-FerzlTg5i)3mwgR4> zp2*~J`oepIsuEnl)`o_-yu73`p!KmIp^KIRu*-6KdP-;Z@>A+VNZarh7%Tw&9*3s9 zE2V?B1#sonEvKTCU;`r`kOW%5#dbMNJ|1>uOwfHKT;f8v%)JY2g0IZDKph3bFq9!P zcGh&+2jKP?D}f!N4qAWUNe1_S9`>Rra%uq#4}s_grrYq^e}WRK)vApBnGF`{1X&3t ztq+X;#7aQr0nE^}1&YR+6WmoYE5PPug(AqL08}1R;$1a=kVyeW-xK&J&|QE3x42Zq z&CN}rx760+qEK9U%mh1~PG)&KI}Bp(F&qwM%oHJh13(d&9u&>X!T=KzrP>tlvq?cyC6Z%^EP;Pb{4c3fb+k0DXf3a2yMZC X>`q)KqvZ~j00000NkvXXu0mjf2Tms@ literal 0 HcmV?d00001 diff --git a/Resources/Textures/_EE/Mobs/Customization/Tajaran/overlays.rsi/points.png b/Resources/Textures/_EE/Mobs/Customization/Tajaran/overlays.rsi/points.png new file mode 100644 index 0000000000000000000000000000000000000000..c38d3d2e3a0a70b6a69e9449a24d3a3858fc90d6 GIT binary patch literal 901 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 ahJCeg=A;nE&+$O7GkCiCxvX2BR01_s7j zPZ!6K3dXm$4)!)12(%`?&srbiz-;2kJjIDIfLX+W`OATc+`bpsSvSng(2a~#et087 z?N_nK6pwk8pKq$LFB0Kr5pZBmQFVQovi@x1ch)2r%lx1WFHAHm&lUeC<;ap|9$ zs`jYg!m9$#SUt9QS2>S8v+}ifLTq^G^{>0E`&k^i+FT|){CeU1NqPT;ZPTj`mU*`CestA_G3fsHUHg@kO$D(#2k68f zCXMS}Pueg2X4b`@_ZDO~&uD)zH|HFKA$!-w*Cq`w!a_xrCx`Q&d{HFi$Lz5xHFD3P zqY-areY|ouQ1I*~pWNHaZf&#Os&;I{Ho0|?{Qs4b<&-7&>3Ey^PF|Z{G~YAKlJgml zyL3A1gw`V6myegU+iOjlbRhm%{ZDzx^5}nuALqO}*|6=XChxylPv8BFf4=k0U;W6e Ws=A|~Is8vo93iKtr%jnmGN?k!72B{sAy#r(*jGNY8_=Ru2xeOIZRi=>j0vOTyOL+V;6S_jUg`f8SSsyr1X!JkRU-JfGL|{(L^quR#R7 z`68P|5Coa~?Z$;b5Q3(&X(mQGsaMxwrc;RY5WEk>?z5ZLEewu%2Y5qJeUX{^kRb#a zm-^wnLo-P;qlKw&wpkhlN$&>RI^&mD+cn-yK5-AT=4=cTn-4k7WNoGgg>;))+TXvk z+3#d2f5MEGt-Ve)bXa8$Ijs9WSV1SO1qa;hIj8iuA&cCW@-}VSAz4tu0nxafbs2HB z$My4|Sw)ujgGP14wzP!S(j|^1wnbd)_y=iUi|I8~*}#H5SKBy%O+F=PN>9IPNbg6*H;&{kjLVWI3mQx0_9b8}t{yPvK5AygHeSrL zJJvKL7;TbxAgmSIGATG1UW!PW4B>6{}kj zUESMm5HhyzW|_<4G+_epQ8hp-GsWj? zGXh9dz2VE1zch)~lb?}n(=q+XbUFdnTTbaCyK5@&qqV~i)p$0zEK>3+k^IN0xk|FB zqFWYh?(lT0ztnJ*Rd=~7yzK9oo)tp4tGq3CZ;Yu+`LwKuTc1tTpQ_D(d<{Om3Yt66 z)SyMp!~CJ{h4tpqhFrJDZ5PZ*^)JW;E8ofl?**R);g{2z!j85li_X zNlre%9}I*l&_1&&GPIMUB9DgbXfS!Op<)s)RLx^=oOFrT3TqhmTCFG` zg}e{#!&2>id$&_}qhPA1odrwCku={vI&=8FdUm>AtGMd&n5PEx6M}e+E3FrWNaTLr z8#A@Mb;DC|ZAc38HW?{XVvaAK2aGT&_*_K$6#0ADt>nlygIlFcVZvO6Z*{nE^{RG? z-C#syAqn_sCtwPTrOW)h%xe{{DBr5_&L9u@;NTEjx&qZHd=oZ_jn||UgZ@$%u*8+N zRQnv2E5DszT*ja_-Pg_sqPap4ub+3?zY1;*Dzfa`8u5dAd*V^e1jCBL0f+UO#=$ZZ zIM|KxT(X6t^A=OsU}qrYZQYC0_Kv^B8W@e=``S!{F28`jCos?FGKp%2R;)>2JgB+^ zdTK?GZ`AmJJg{o;`K4WdvKKxq_7I^N0V$khnHoQ2@k&Qq)&%_0$npwi`Rbz&&shNqx}kVw^tgvUa&sxyzcIk<+l zR7iOgeG|E(lka&Baq-*!YK4lAjYvz-lx?8}{d2`byyJZTmz*4p8R>mX{iD=PB;Ck{ z{B{v=Y@g^e#qsUk9Jz;tp{)WDQ}C&4QIvAt6l(SHjq75`hxW?sLa76uebo(9?d(Eh z>0DMHRs(D`JoVQetSovo=JG%kCmNw z!iNeSCB-LavF}W5FcutT6$pM4I-ajiC160lamV8_(kZtxH|#Uy6}fs4Fpm?)C0o=h z;oDaR9rtaqU2_uz^Y5Jo!q^4lG-pxFM!k=WznG{<-9EayvgEHd{_N9#05n8QBme*a literal 0 HcmV?d00001 diff --git a/Resources/Textures/_EE/Mobs/Customization/Tajaran/torso.rsi/belly.png b/Resources/Textures/_EE/Mobs/Customization/Tajaran/torso.rsi/belly.png new file mode 100644 index 0000000000000000000000000000000000000000..c7f9e7825596a5e18a3e26fadcb4ffbbcbd1dfb4 GIT binary patch literal 364 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9GGLLkg|>2BR01_nks zPZ!6K3dXm$a`~DScp4J7YajUQ-;rLB==qp`;+bs^llS~fym;{%dx3YsZ3_Vh21XVr z@u1Ve>*Wdey!l_G-|p7;bzC~T&u~>z=BMg!mDOy~TG#gLFn(Qd^4IybRwo!_uX-ok z|DONz5?_J-DxoV3t8$pjm<||eD6)8eSNt_A?ZBJY_idP#+Pgekz=C82!ZHv`BErGU zGkUs4_2jjm#XfI!`>?0-@-dHV6ZSSvo2@d*yGY#q>G8>F4fFEbzMQH3_*J6U`@(GD zc{|S-KUj7w(@&rOfmx7l{M3(Uw*KKMV4g5vZM$YD=M|&yr9Gb~JrDlb6ZQX!a{6AS lbxI8kOdJXz;*9DC#2BR0px_Hn z7srqa#<#b;`I-y_7y>@lXhke8uV`6pNYeP(cAYJOYH&1%+LNv2`0+UDopgi0RFg}D@J@PmU) Z^80psK8!X`a|ZgE!PC{xWt~$(69D{6a@qg@ literal 0 HcmV?d00001 diff --git a/Resources/Textures/_EE/Mobs/Customization/Tajaran/torso.rsi/fullbelly.png b/Resources/Textures/_EE/Mobs/Customization/Tajaran/torso.rsi/fullbelly.png new file mode 100644 index 0000000000000000000000000000000000000000..bcb6dc67acfa8855a727eb1b48f8198501928824 GIT binary patch literal 534 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9GGLLkg|>2BR01_s6x zo-U3d6^w6Z8TK_B2)OQDtsCIApesXD(}KPHiCE@NCf3xTMIIg(l&s9`CoK*Q3v04X z`uHhR#`@czna>kD3Z^`AWm0iKLK|8fE}InJ-e!DD_4PKh?}v{q%$!xnD$CM1Rad(9 zr0IO`-kD{0O!i&bC;nMbXA{GAhN$_?@pBkMLlrZwe&5^m_{Y6P{e}8v{)as0GTx}Y zZ+u`^fnovgpQDB4LJ>4y8TVe~N=W{zq&9~Q&l>-4u5!Sx~$Vrl3}rhUXf+%UeCKT<-HSg)a+9X ze+(jbbL72CDD!Q)`y85}Sb4q9e02>?M A0ssI2 literal 0 HcmV?d00001 diff --git a/Resources/Textures/_EE/Mobs/Customization/Tajaran/torso.rsi/meta.json b/Resources/Textures/_EE/Mobs/Customization/Tajaran/torso.rsi/meta.json new file mode 100644 index 0000000000..66d6f47649 --- /dev/null +++ b/Resources/Textures/_EE/Mobs/Customization/Tajaran/torso.rsi/meta.json @@ -0,0 +1,23 @@ +{ + "version": 1, + "copyright": "Creator was not supplied, oldest reference tracked to KasparoVy @ https://github.com/ParadiseSS13/Paradise/commit/38717e3b034550b3c0a9f3c5f3c78a957dcad0d9. Minor tweaks by SX-7", + "license": "CC-BY-SA-3.0", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "belly", + "directions": 4 + }, + { + "name": "crest", + "directions": 4 + }, + { + "name": "fullbelly", + "directions": 4 + } + ] +} From f9bb54cd69b7bd2f77cf72fc8ead665acac338c1 Mon Sep 17 00:00:00 2001 From: portfiend <109661617+portfiend@users.noreply.github.com> Date: Tue, 19 May 2026 17:42:44 -0500 Subject: [PATCH 08/26] texture reorg --- ...ard_tertiary.png => leopard_secondary.png} | Bin .../Tajaran/leotail.rsi/meta.json | 2 +- .../Tajaran/foxtail.rsi/base_fox_tail.png | Bin 487 -> 0 bytes .../Tajaran/foxtail.rsi/base_fox_tail_tip.png | Bin 340 -> 0 bytes .../Tajaran/foxtail.rsi/meta.json | 19 ------------- .../Tajaran/tail_markings.rsi/meta.json | 25 ------------------ .../Customization/Tajaran/tails.rsi/meta.json | 14 ++++++++++ .../tail_anim_rings.png | Bin .../tail_rings.png | Bin 9 files changed, 15 insertions(+), 45 deletions(-) rename Resources/Textures/_DEN/Mobs/Customization/Tajaran/leotail.rsi/{leopard_tertiary.png => leopard_secondary.png} (100%) delete mode 100644 Resources/Textures/_EE/Mobs/Customization/Tajaran/foxtail.rsi/base_fox_tail.png delete mode 100644 Resources/Textures/_EE/Mobs/Customization/Tajaran/foxtail.rsi/base_fox_tail_tip.png delete mode 100644 Resources/Textures/_EE/Mobs/Customization/Tajaran/foxtail.rsi/meta.json delete mode 100644 Resources/Textures/_EE/Mobs/Customization/Tajaran/tail_markings.rsi/meta.json rename Resources/Textures/_EE/Mobs/Customization/Tajaran/{tail_markings.rsi => tails.rsi}/tail_anim_rings.png (100%) rename Resources/Textures/_EE/Mobs/Customization/Tajaran/{tail_markings.rsi => tails.rsi}/tail_rings.png (100%) diff --git a/Resources/Textures/_DEN/Mobs/Customization/Tajaran/leotail.rsi/leopard_tertiary.png b/Resources/Textures/_DEN/Mobs/Customization/Tajaran/leotail.rsi/leopard_secondary.png similarity index 100% rename from Resources/Textures/_DEN/Mobs/Customization/Tajaran/leotail.rsi/leopard_tertiary.png rename to Resources/Textures/_DEN/Mobs/Customization/Tajaran/leotail.rsi/leopard_secondary.png diff --git a/Resources/Textures/_DEN/Mobs/Customization/Tajaran/leotail.rsi/meta.json b/Resources/Textures/_DEN/Mobs/Customization/Tajaran/leotail.rsi/meta.json index 7ac3a8b36e..bed543c6f2 100644 --- a/Resources/Textures/_DEN/Mobs/Customization/Tajaran/leotail.rsi/meta.json +++ b/Resources/Textures/_DEN/Mobs/Customization/Tajaran/leotail.rsi/meta.json @@ -12,7 +12,7 @@ "directions": 4 }, { - "name": "leopard_tertiary", + "name": "leopard_secondary", "directions": 4 }, { diff --git a/Resources/Textures/_EE/Mobs/Customization/Tajaran/foxtail.rsi/base_fox_tail.png b/Resources/Textures/_EE/Mobs/Customization/Tajaran/foxtail.rsi/base_fox_tail.png deleted file mode 100644 index afd2c8384c39741684fc7d35d48529ba10a77da3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 487 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7T#lEU|i?v;uuoF_;%*otY!xhm)igB zM(dyMpT=ox6myMNclXL!nkVYwpUX@Zd$Z|@I$M$g4)lPF?ON&IT~6mTC0Y09-v0c{ zLXc0NQ(pJM$BH@r2hONJ@{j+pT;#yG{x06Twt8P_UxT~(Th{k$ z1H*Ik?_aFFZ?%5H*EX)Rq1Pog-(zCgv-Q}|;H`X*7w(N`{vBoeKKpCTF+%}n?8x9k z!~R)P5oK8`6K95=xPQ{$*LK5>^nagsyR?4~zr^QB zSJuQb%Is6JSrE$fd5bUOrc(Bb_7?Y?GplpC5;ot`wy$;g8?2!Ateo*4V_f??27Voz z50=K&-}W<&18V zfjaH$-z`j=Wn=7`#ps*z%2Y8SQS1GI>8B5|GqMOcFyJ751Sl-s^7GnntN854_kPV^ zAAh~{vv1=%vt_0Gt{n?64L&zrG0N}KwJD{+ZP_bjAXXW|o{?Tyo zXc0Q#7ykCm7L)khoav^Q?Y<}Gtm*x=ao)=B#pz$8y!#oLI20PN5C&Qc>J!{wFTN`K z>DKf)pYQPrUkoyR6aKU2-cja^MGs>Yr)$iwI?d-$$?PPTdwf~xuWRA?4##&p>D4lB z5ZT45D9oGltMb>rvi*Gj4)z}ZKjrJO;~pj~`; Date: Tue, 19 May 2026 17:44:20 -0500 Subject: [PATCH 09/26] tajaran marking prototypes --- .../Prototypes/_DEN/Body/Species/tajaran.yml | 10 +- .../Mobs/Customization/Markings/tajaran.yml | 210 ++++++++++++++++++ 2 files changed, 217 insertions(+), 3 deletions(-) create mode 100644 Resources/Prototypes/_DEN/Entities/Mobs/Customization/Markings/tajaran.yml diff --git a/Resources/Prototypes/_DEN/Body/Species/tajaran.yml b/Resources/Prototypes/_DEN/Body/Species/tajaran.yml index a51dd1b98d..422bbd1cb2 100644 --- a/Resources/Prototypes/_DEN/Body/Species/tajaran.yml +++ b/Resources/Prototypes/_DEN/Body/Species/tajaran.yml @@ -6,21 +6,25 @@ enum.HumanoidVisualLayers.Hair: limit: 1 required: false + onlyGroupWhitelisted: false enum.HumanoidVisualLayers.FacialHair: limit: 1 required: false - enum.HumanoidVisualLayers.Tail: # TODO: Default marking + onlyGroupWhitelisted: false + enum.HumanoidVisualLayers.Tail: limit: 1 required: true + default: [ TajaranTailRetro ] enum.HumanoidVisualLayers.Chest: limit: 4 required: false enum.HumanoidVisualLayers.Snout: limit: 1 required: true - enum.HumanoidVisualLayers.HeadTop: # TODO: Default marking + enum.HumanoidVisualLayers.HeadTop: limit: 4 - required: false + required: true + default: [ TajaranEarsRetro ] enum.HumanoidVisualLayers.HeadSide: limit: 4 required: false diff --git a/Resources/Prototypes/_DEN/Entities/Mobs/Customization/Markings/tajaran.yml b/Resources/Prototypes/_DEN/Entities/Mobs/Customization/Markings/tajaran.yml new file mode 100644 index 0000000000..397da0b448 --- /dev/null +++ b/Resources/Prototypes/_DEN/Entities/Mobs/Customization/Markings/tajaran.yml @@ -0,0 +1,210 @@ +# === Parts === + +# region Ears + +- type: marking + id: TajaranEarsRetro + bodyPart: HeadTop + groupWhitelist: [Tajaran] + sprites: + - sprite: _EE/Mobs/Customization/Tajaran/ears.rsi + state: ears + +- type: marking + id: TajaranEarsRetroNear + bodyPart: HeadTop + groupWhitelist: [Tajaran] + sprites: + - sprite: _EE/Mobs/Customization/Tajaran/ears.rsi + state: ears_near + +- type: marking + id: TajaranEarsSeparate + bodyPart: HeadTop + groupWhitelist: [Tajaran] + sprites: + - sprite: _EE/Mobs/Customization/Tajaran/ears.rsi + state: outears + - sprite: _EE/Mobs/Customization/Tajaran/ears.rsi + state: inears + +- type: marking + id: TajaranEarsSeparateNear + bodyPart: HeadTop + groupWhitelist: [Tajaran] + sprites: + - sprite: _EE/Mobs/Customization/Tajaran/ears.rsi + state: outears_near + - sprite: _EE/Mobs/Customization/Tajaran/ears.rsi + state: inears_near + +# endregion Ears +# region Tails + +- type: marking + id: TajaranTailRetro + bodyPart: Tail + groupWhitelist: [Tajaran] + sprites: + - sprite: _EE/Mobs/Customization/Tajaran/tails.rsi + state: tail + +- type: marking + id: TajaranTailRetroRings + bodyPart: Tail + groupWhitelist: [Tajaran] + sprites: + - sprite: _EE/Mobs/Customization/Tajaran/tails.rsi + state: tail + - sprite: _EE/Mobs/Customization/Tajaran/tails.rsi + state: tail_rings + +- type: marking + id: TajaranTailLeopard + bodyPart: Tail + groupWhitelist: [Tajaran] + sprites: + - sprite: _DEN/Mobs/Customization/Tajaran/leotail.rsi + state: leopard_primary + - sprite: _DEN/Mobs/Customization/Tajaran/leotail.rsi + state: leopard_secondary + +### Animated + +- type: marking + id: TajaranTailRetroAnimated + bodyPart: Tail + groupWhitelist: [Tajaran] + sprites: + - sprite: _EE/Mobs/Customization/Tajaran/tails.rsi + state: tail_anim + +- type: marking + id: TajaranTailRetroRingsAnimated + bodyPart: Tail + groupWhitelist: [Tajaran] + sprites: + - sprite: _EE/Mobs/Customization/Tajaran/tails.rsi + state: tail_anim + - sprite: _EE/Mobs/Customization/Tajaran/tails.rsi + state: tail_anim_rings + +- type: marking + id: TajaranTailLeopardAnimated + bodyPart: Tail + groupWhitelist: [Tajaran] + sprites: + - sprite: _DEN/Mobs/Customization/Tajaran/leotail.rsi + state: leotailanim_primary + - sprite: _DEN/Mobs/Customization/Tajaran/leotail.rsi + state: leotailanim_secondary + +# endregion Tails + +# === Overlays === + +# region Head + +- type: marking + id: TajaranHeadNose + bodyPart: Head + groupWhitelist: [Tajaran] + sprites: + - sprite: _EE/Mobs/Customization/Tajaran/head.rsi + state: nose + +- type: marking + id: TajaranHeadMuzzle + bodyPart: Head + groupWhitelist: [Tajaran] + sprites: + - sprite: _EE/Mobs/Customization/Tajaran/head.rsi + state: muzzle + +- type: marking + id: TajaranHeadMuzzleLarge + bodyPart: Head + groupWhitelist: [Tajaran] + sprites: + - sprite: _EE/Mobs/Customization/Tajaran/head.rsi + state: muzzle_large + +- type: marking + id: TajaranHeadPoints + bodyPart: Head + groupWhitelist: [Tajaran] + sprites: + - sprite: _EE/Mobs/Customization/Tajaran/head.rsi + state: points + +- type: marking + id: TajaranHeadTiger + bodyPart: Head + groupWhitelist: [Tajaran] + sprites: + - sprite: _EE/Mobs/Customization/Tajaran/head.rsi + state: tiger_face + +- type: marking + id: TajaranHeadTigerAlt + bodyPart: Head + groupWhitelist: [Tajaran] + sprites: + - sprite: _EE/Mobs/Customization/Tajaran/head.rsi + state: tiger_head + +- type: marking + id: TajaranHeadPatches + bodyPart: Head + groupWhitelist: [Tajaran] + sprites: + - sprite: _EE/Mobs/Customization/Tajaran/head.rsi + state: patch + +# endregion Head +# region Torso + +- type: marking + id: TajaranTorsoBelly + bodyPart: Chest + groupWhitelist: [Tajaran] + sprites: + - sprite: _EE/Mobs/Customization/Tajaran/torso.rsi + state: belly + +- type: marking + id: TajaranTorsoCrest + bodyPart: Chest + groupWhitelist: [Tajaran] + sprites: + - sprite: _EE/Mobs/Customization/Tajaran/torso.rsi + state: crest + +- type: marking + id: TajaranTorsoFullBelly + bodyPart: Chest + groupWhitelist: [Tajaran] + sprites: + - sprite: _EE/Mobs/Customization/Tajaran/torso.rsi + state: fullbelly + +# endregion Torso +# region Limbs + +- type: marking + id: TajaranOverlayPatch # TODO split + bodyPart: Chest + groupWhitelist: [Tajaran] + sprites: + - sprite: _EE/Mobs/Customization/Tajaran/overlays.rsi + state: patch + +- type: marking + id: TajaranOverlayPoints # TODO split + bodyPart: Chest + groupWhitelist: [Tajaran] + sprites: + - sprite: _EE/Mobs/Customization/Tajaran/overlays.rsi + state: points + +# endregion Limbs From cbcc33b08197c3d98588d0392e93cae1805a00bc Mon Sep 17 00:00:00 2001 From: portfiend <109661617+portfiend@users.noreply.github.com> Date: Tue, 19 May 2026 18:02:32 -0500 Subject: [PATCH 10/26] marking locales --- .../Locale/en-US/_DEN/markings/tajaran.ftl | 77 +++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 Resources/Locale/en-US/_DEN/markings/tajaran.ftl diff --git a/Resources/Locale/en-US/_DEN/markings/tajaran.ftl b/Resources/Locale/en-US/_DEN/markings/tajaran.ftl new file mode 100644 index 0000000000..f0561420e8 --- /dev/null +++ b/Resources/Locale/en-US/_DEN/markings/tajaran.ftl @@ -0,0 +1,77 @@ +# Ears + +marking-TajaranEarsRetro = Tajaran Ears +marking-TajaranEarsRetro-ears = Ear + +marking-TajaranEarsRetroNear = Tajaran Ears, Near +marking-TajaranEarsRetro-ears_near = Ear + +marking-TajaranEarsSeparate = Tajaran Ears, Separated +marking-TajaranEarsSeparate-outears = Outer ear +marking-TajaranEarsSeparate-inears = Inner ear + +marking-TajaranEarsSeparateNear = Tajaran Ears, Separated, Near +marking-TajaranEarsSeparateNear-outears_near = Outer ear +marking-TajaranEarsSeparateNear-inears_near = Inner ear + +# Tails + +marking-TajaranTailRetro = Tajaran Tail +marking-TajaranTailRetro-tail = Tail + +marking-TajaranTailRetroRings = Tajaran Tail, Rings +marking-TajaranTailRetroRings-tail = Tail +marking-TajaranTailRetroRings-tail_rings = Rings + +marking-TajaranTailLeopard = Leopard Tail +marking-TajaranTailLeopard-leopard_primary = Tail +marking-TajaranTailLeopard-leopard_secondary = Spots + +## Animated + +marking-TajaranTailRetroAnimated = Tajaran Tail (Animated) +marking-TajaranTailRetroAnimated-tail = tail_anim + +marking-TajaranTailRetroRingsAnimated = Tajaran Tail, Rings (Animated) +marking-TajaranTailRetroRingsAnimated-tail_anim = Tail +marking-TajaranTailRetroRingsAnimated-tail_anim_rings = Rings + +marking-TajaranTailLeopardAnimated = Leopard Tail (Animated) +marking-TajaranTailLeopardAnimated-leotailanim_primary = Tail +marking-TajaranTailLeopardAnimated-leotailanim_secondary = Spots + +# Head + +marking-TajaranHeadNose = Tajaran Nose +marking-TajaranHeadNose-nose = Nose + +marking-TajaranHeadMuzzle = Tajaran Muzzle +marking-TajaranHeadMuzzle-muzzle = Muzzle + +marking-TajaranHeadMuzzleLarge = Tajaran Muzzle, Large +marking-TajaranHeadMuzzleLarge-muzzle_large = Muzzle + +marking-TajaranHeadPoints = Tajaran Points Pattern +marking-TajaranHeadPoints-points = Points + +marking-TajaranHeadTiger = Tajaran Tiger Pattern +marking-TajaranHeadTiger-tiger_face = Stripes + +marking-TajaranHeadTigerAlt = Tajaran Tiger Pattern, Alt +marking-TajaranHeadTigerAlt-tiger_head = Stripes + +marking-TajaranHeadPatches = Tajaran Patches +marking-TajaranHeadPatches-patch = Patches + +# Torso + +marking-TajaranTorsoBelly = Tajaran Belly +marking-TajaranTorsoBelly-belly = Belly + +marking-TajaranTorsoCrest = Tajaran Chest Crest +marking-TajaranTorsoCrest-crest = Crest + +marking-TajaranTorsoFullBelly = Tajaran Belly, Full +marking-TajaranTorsoFullBelly-crest = fullbelly + +# Limbs From 55a3e9969fdad7738346a64c00e5e1afd2e49c58 Mon Sep 17 00:00:00 2001 From: portfiend <109661617+portfiend@users.noreply.github.com> Date: Thu, 21 May 2026 15:01:54 -0500 Subject: [PATCH 11/26] tajaran have a light step --- .../Movement/Systems/SharedMoverController.cs | 11 +++++++++++ .../Components/BarestepModifierComponent.cs | 17 +++++++++++++++++ .../Prototypes/_DEN/Body/Species/tajaran.yml | 3 +++ Resources/Prototypes/_DEN/Species/tajaran.yml | 2 +- 4 files changed, 32 insertions(+), 1 deletion(-) create mode 100644 Content.Shared/_DEN/Movement/Components/BarestepModifierComponent.cs diff --git a/Content.Shared/Movement/Systems/SharedMoverController.cs b/Content.Shared/Movement/Systems/SharedMoverController.cs index bda05da019..c74619c7a1 100644 --- a/Content.Shared/Movement/Systems/SharedMoverController.cs +++ b/Content.Shared/Movement/Systems/SharedMoverController.cs @@ -1,5 +1,6 @@ using System.Diagnostics.CodeAnalysis; using System.Numerics; +using Content.Shared._DEN.Movement.Components; using Content.Shared.ActionBlocker; using Content.Shared.CCVar; using Content.Shared.Friction; @@ -64,6 +65,7 @@ public abstract partial class SharedMoverController : VirtualController protected EntityQuery RelayQuery; protected EntityQuery PullableQuery; protected EntityQuery XformQuery; + protected EntityQuery BarestepModifierQuery; // DEN: Barestep modifiers private static readonly ProtoId FootstepSoundTag = "FootstepSound"; @@ -100,6 +102,7 @@ public override void Initialize() FTLQuery = GetEntityQuery(); PilotQuery = GetEntityQuery(); PreventPilotQuery = GetEntityQuery(); + BarestepModifierQuery = GetEntityQuery(); // DEN: Barestep modifiers SubscribeLocalEvent(OnTileFriction); SubscribeLocalEvent(OnMoverStartup); @@ -575,6 +578,14 @@ private bool TryGetSound( return sound != null; } + // DEN start: Barestep modifiers for shoeless walking + if (shoes == null && BarestepModifierQuery.TryComp(uid, out var barestepModifier)) + { + sound = barestepModifier.FootstepSoundCollection; + return sound != null; + } + // DEN end + return TryGetFootstepSound(uid, xform, shoes != null, out sound, tileDef: tileDef); } diff --git a/Content.Shared/_DEN/Movement/Components/BarestepModifierComponent.cs b/Content.Shared/_DEN/Movement/Components/BarestepModifierComponent.cs new file mode 100644 index 0000000000..91f593a932 --- /dev/null +++ b/Content.Shared/_DEN/Movement/Components/BarestepModifierComponent.cs @@ -0,0 +1,17 @@ +using Robust.Shared.Audio; +using Robust.Shared.GameStates; + +namespace Content.Shared._DEN.Movement.Components; + +/// +/// Changes footstep sounds ONLY when this entity is not wearing shoes. +/// +/// +/// This is similar to FootstepModifierComponent. +/// +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState] +public sealed partial class BarestepModifierComponent : Component +{ + [DataField, AutoNetworkedField] + public SoundSpecifier? FootstepSoundCollection; +} diff --git a/Resources/Prototypes/_DEN/Body/Species/tajaran.yml b/Resources/Prototypes/_DEN/Body/Species/tajaran.yml index 422bbd1cb2..38b9c53fbc 100644 --- a/Resources/Prototypes/_DEN/Body/Species/tajaran.yml +++ b/Resources/Prototypes/_DEN/Body/Species/tajaran.yml @@ -114,6 +114,9 @@ types: Slash: 5 - type: Wagging + - type: ProtectedFromStepTriggers # Can step on glass shards and mousetraps safely. + - type: BarestepModifier # Silent when walking without shoes. + footstepSoundCollection: null # DEN start - type: PhysiologyDescription baseLabel: physiology-description-species-base-tajaran diff --git a/Resources/Prototypes/_DEN/Species/tajaran.yml b/Resources/Prototypes/_DEN/Species/tajaran.yml index 22a2e131d4..63629f47df 100644 --- a/Resources/Prototypes/_DEN/Species/tajaran.yml +++ b/Resources/Prototypes/_DEN/Species/tajaran.yml @@ -16,7 +16,7 @@ # meat safely - however, allicin (onions, garlic) and theobromine (coffee, chocolate, tea) # will poison them. # -# TODO: Tajaran have a light step - their bare footsteps have no sounds, and they can +# Tajaran have a light step - their bare footsteps have no sounds, and they can # walk around barefoot without tripping mousetraps or hurting themselves on glass shards. # # Their unarmed attacks deal slash damage instead of blunt. From dd8ba3b064a3155a255043a7f4aa8c5b8ec9625b Mon Sep 17 00:00:00 2001 From: portfiend <109661617+portfiend@users.noreply.github.com> Date: Thu, 28 May 2026 12:11:30 -0500 Subject: [PATCH 12/26] add marking migrations --- Resources/Migrations/_DEN/markings.yml | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 Resources/Migrations/_DEN/markings.yml diff --git a/Resources/Migrations/_DEN/markings.yml b/Resources/Migrations/_DEN/markings.yml new file mode 100644 index 0000000000..58f47ff6a7 --- /dev/null +++ b/Resources/Migrations/_DEN/markings.yml @@ -0,0 +1,8 @@ +# This dictionary maps "old" marking IDs to "new" marking IDs. +# When a player imports a character profile, all old markings will be translated to use these IDs. + +TajaranLeoTailNoAnim: TajaranTailLeopard + +TajaranTailAnim: TajaranTailRetroAnimated +TajaranTailAnimRings: TajaranTailRetroRingsAnimated +TajaranLeoTailAnim: TajaranTailLeopardAnimated From aca55c095a15bbd4cfd7caba00eeae23002b0508 Mon Sep 17 00:00:00 2001 From: portfiend <109661617+portfiend@users.noreply.github.com> Date: Thu, 28 May 2026 12:11:43 -0500 Subject: [PATCH 13/26] start guidebook entry --- Resources/ServerInfo/_DEN/Guidebook/Mobs/Tajaran.xml | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 Resources/ServerInfo/_DEN/Guidebook/Mobs/Tajaran.xml diff --git a/Resources/ServerInfo/_DEN/Guidebook/Mobs/Tajaran.xml b/Resources/ServerInfo/_DEN/Guidebook/Mobs/Tajaran.xml new file mode 100644 index 0000000000..b0870ee578 --- /dev/null +++ b/Resources/ServerInfo/_DEN/Guidebook/Mobs/Tajaran.xml @@ -0,0 +1,10 @@ + + # Tajaran + + + + + + Tajara (singular: Tajaran) are a species of anthropomorphic felines. + + From 2db6f37ed0b7ce026a25d8e55bdb4ab65530781a Mon Sep 17 00:00:00 2001 From: portfiend <109661617+portfiend@users.noreply.github.com> Date: Sat, 30 May 2026 20:28:18 -0500 Subject: [PATCH 14/26] tajaran guidebook expanded --- Resources/ServerInfo/_DEN/Guidebook/Mobs/Tajaran.xml | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/Resources/ServerInfo/_DEN/Guidebook/Mobs/Tajaran.xml b/Resources/ServerInfo/_DEN/Guidebook/Mobs/Tajaran.xml index b0870ee578..9a76998eca 100644 --- a/Resources/ServerInfo/_DEN/Guidebook/Mobs/Tajaran.xml +++ b/Resources/ServerInfo/_DEN/Guidebook/Mobs/Tajaran.xml @@ -5,6 +5,14 @@ - Tajara (singular: Tajaran) are a species of anthropomorphic felines. + Tajara (singular: Tajaran) are a species of anthropomorphic felines. They are highly expressive, often emoting using their tail and ears. + + They possess fairly standard mammal-like physiology. They have red blood and the sensitive digestion of an omnivorous animal - they can consume raw meat, eggs and blood safely, but will be [color=red]poisoned[/color] by allicin (garlic, onions) and theobromine (chocolate, coffee, tea). + + Tajara have exceptionally sensitive eyesight. They are capable of adjusting their vision to high visibility in low-light environments - also known as [color=#1e90ff]"night vision"[/color]. However, [color=#ffa500]flashes will stun them for longer, and may even cause them eye damage.[/color] + + Most tajara are covered in a thick fur coat, which offers them [color=#1e90ff]natural protection against cold environments.[/color] Conversely, their fur makes it difficult for them to disperse heat from their body, rendering them [color=#ffa500]susceptible to overheating.[/color] + + In addition, tajara possess a light step - [color=#1e90ff]while barefoot, they will not produce any sounds with their steps, and they can even safely walk over mousetraps and glass shards without hurting themselves.[/color] From 2eae74477f0b1b3c3280ea37878c4924b7f9459d Mon Sep 17 00:00:00 2001 From: portfiend <109661617+portfiend@users.noreply.github.com> Date: Sat, 6 Jun 2026 21:06:04 -0500 Subject: [PATCH 15/26] add guidebook entry for tajara --- Resources/Prototypes/Guidebook/species.yml | 3 ++- .../Prototypes/_DEN/Guidebook/species.yml | 4 ++++ Resources/Prototypes/_DEN/Species/tajaran.yml | 4 ++-- .../_DEN/Guidebook/Mobs/Species.xml | 23 +++++++++++++++++++ 4 files changed, 31 insertions(+), 3 deletions(-) create mode 100644 Resources/Prototypes/_DEN/Guidebook/species.yml create mode 100644 Resources/ServerInfo/_DEN/Guidebook/Mobs/Species.xml diff --git a/Resources/Prototypes/Guidebook/species.yml b/Resources/Prototypes/Guidebook/species.yml index c13dfa6107..3380406784 100644 --- a/Resources/Prototypes/Guidebook/species.yml +++ b/Resources/Prototypes/Guidebook/species.yml @@ -1,7 +1,7 @@ - type: guideEntry id: Species name: guide-entry-species - text: "/ServerInfo/_MACRO/Guidebook/Mobs/Species.xml" #macro - redirected to our directory + text: "/ServerInfo/_DEN/Guidebook/Mobs/Species.xml" # DEN - use den directory children: # - Ant # macro - uncomment to enable # - Allulalo # macro - uncomment to enable @@ -16,6 +16,7 @@ - Moth - Reptilian - SlimePerson + - Tajaran # den - Vox - Vulpkanin diff --git a/Resources/Prototypes/_DEN/Guidebook/species.yml b/Resources/Prototypes/_DEN/Guidebook/species.yml new file mode 100644 index 0000000000..70966df55c --- /dev/null +++ b/Resources/Prototypes/_DEN/Guidebook/species.yml @@ -0,0 +1,4 @@ +- type: guideEntry + id: Tajaran + name: Tajaran + text: "/ServerInfo/_DEN/Guidebook/Mobs/Tajaran.xml" diff --git a/Resources/Prototypes/_DEN/Species/tajaran.yml b/Resources/Prototypes/_DEN/Species/tajaran.yml index 63629f47df..5c6d394a87 100644 --- a/Resources/Prototypes/_DEN/Species/tajaran.yml +++ b/Resources/Prototypes/_DEN/Species/tajaran.yml @@ -12,8 +12,8 @@ # TODO: They have sensitive eyesight, allowing them to see in the dark (night vision) - # however, this also makes them especially vulnerable to flashes. # -# They have the digestion of a carnivorous animal, allowing them to consume raw -# meat safely - however, allicin (onions, garlic) and theobromine (coffee, chocolate, tea) +# They have animal digestion and metabolism, allowing them to consume raw meat safely - +# however, allicin (onions, garlic) and theobromine (coffee, chocolate, tea) # will poison them. # # Tajaran have a light step - their bare footsteps have no sounds, and they can diff --git a/Resources/ServerInfo/_DEN/Guidebook/Mobs/Species.xml b/Resources/ServerInfo/_DEN/Guidebook/Mobs/Species.xml new file mode 100644 index 0000000000..ebfb723ff5 --- /dev/null +++ b/Resources/ServerInfo/_DEN/Guidebook/Mobs/Species.xml @@ -0,0 +1,23 @@ + + # Species + + Nanotrasen employs a variety of sapient species. + + + + + + + + + + + + + + + + + + + From 71a8448731217d974e181a70d26d5d82335bfb73 Mon Sep 17 00:00:00 2001 From: portfiend <109661617+portfiend@users.noreply.github.com> Date: Mon, 8 Jun 2026 00:50:55 -0500 Subject: [PATCH 16/26] tajaran flash sensitivity part 1 --- Content.Shared/Flash/SharedFlashSystem.cs | 13 ++++++ .../Components/FlashedModifierComponent.cs | 26 ++++++++++++ .../Flash/EntitySystems/SharedFlashSystem.cs | 41 +++++++++++++++++++ .../Prototypes/_DEN/Body/Species/tajaran.yml | 6 ++- 4 files changed, 84 insertions(+), 2 deletions(-) create mode 100644 Content.Shared/_DEN/Flash/Components/FlashedModifierComponent.cs create mode 100644 Content.Shared/_DEN/Flash/EntitySystems/SharedFlashSystem.cs diff --git a/Content.Shared/Flash/SharedFlashSystem.cs b/Content.Shared/Flash/SharedFlashSystem.cs index 6dab627783..c46ab55c47 100644 --- a/Content.Shared/Flash/SharedFlashSystem.cs +++ b/Content.Shared/Flash/SharedFlashSystem.cs @@ -1,4 +1,5 @@ using System.Linq; +using Content.Shared._DEN.Flash.Components; using Content.Shared.Charges.Components; using Content.Shared.Charges.Systems; using Content.Shared.Clothing.Components; @@ -63,6 +64,8 @@ public override void Initialize() SubscribeLocalEvent(OnPermanentBlindnessFlashAttempt); Subs.SubscribeWithRelay(OnFlashImmunityFlashAttempt, held: false); SubscribeLocalEvent(OnExamine); + + SubscribeLocalEvent(OnFlashModified); // DEN - Flash modifiers } private void OnFlashMeleeHit(Entity ent, ref MeleeHitEvent args) @@ -185,6 +188,16 @@ public void Flash( if (attempt.Cancelled) return; + // Begin DEN - Flash modifiers + var flashMod = new FlashModifierEvent(target, user, used); + RaiseLocalEvent(target, ref flashMod); + + flashDuration *= Math.Max(flashMod.FlashDurationModifier, 0.0f); + stunDuration *= Math.Max(flashMod.StunDurationModifier, 0.0f); + slowTo *= flashMod.SpeedModifier; + slowTo = Math.Clamp(slowTo, 0.0f, 1.0f); // Should not be faster than base speed, or negative + // End DEN + // don't paralyze, slowdown or convert to rev if the target is immune to flashes if (!_statusEffectsSystem.TryAddStatusEffect(target, FlashedKey, flashDuration, true)) return; diff --git a/Content.Shared/_DEN/Flash/Components/FlashedModifierComponent.cs b/Content.Shared/_DEN/Flash/Components/FlashedModifierComponent.cs new file mode 100644 index 0000000000..419e7ca648 --- /dev/null +++ b/Content.Shared/_DEN/Flash/Components/FlashedModifierComponent.cs @@ -0,0 +1,26 @@ +namespace Content.Shared._DEN.Flash.Components; + +/// +/// Entities with this component will modify the stats of an incoming flash. +/// +[RegisterComponent] +public sealed partial class FlashedModifierComponent : Component +{ + /// + /// A multiplier to the duration of flashes received by this entity. + /// + [DataField("durationMod")] + public float FlashDurationModifier = 1.0f; + + /// + /// A motiplier to the stun duration of flashes received by this entity. + /// + [DataField("stunMod")] + public float StunDurationModifier = 1.0f; + + /// + /// A multiplier to the movement speed of this entity when they are flashed. + /// + [DataField("speedMod")] + public float SpeedModifier = 1.0f; +} diff --git a/Content.Shared/_DEN/Flash/EntitySystems/SharedFlashSystem.cs b/Content.Shared/_DEN/Flash/EntitySystems/SharedFlashSystem.cs new file mode 100644 index 0000000000..e2c09caf04 --- /dev/null +++ b/Content.Shared/_DEN/Flash/EntitySystems/SharedFlashSystem.cs @@ -0,0 +1,41 @@ +using Content.Shared._DEN.Flash.Components; + +namespace Content.Shared.Flash; + +public abstract partial class SharedFlashSystem +{ + /// + /// Modifies the stats of an incoming flash on this entity. + /// + /// The entity being flashed. + private void OnFlashModified(Entity ent, ref FlashModifierEvent args) + { + args.FlashDurationModifier *= ent.Comp.FlashDurationModifier; + args.StunDurationModifier *= ent.Comp.StunDurationModifier; + args.SpeedModifier *= ent.Comp.SpeedModifier; + } +} + +/// +/// Event used to modify the stats associated with a particular flash attempt. +/// +[ByRefEvent] +public record struct FlashModifierEvent(EntityUid Target, + EntityUid? User, + EntityUid? Used) +{ + /// + /// A multiplier to the duration of flashes received by this entity. + /// + public float FlashDurationModifier = 1.0f; + + /// + /// A motiplier to the stun duration of flashes received by this entity. + /// + public float StunDurationModifier = 1.0f; + + /// + /// A multiplier to the movement speed of this entity when they are flashed. + /// + public float SpeedModifier = 1.0f; +} diff --git a/Resources/Prototypes/_DEN/Body/Species/tajaran.yml b/Resources/Prototypes/_DEN/Body/Species/tajaran.yml index 38b9c53fbc..e7bb2208ec 100644 --- a/Resources/Prototypes/_DEN/Body/Species/tajaran.yml +++ b/Resources/Prototypes/_DEN/Body/Species/tajaran.yml @@ -117,10 +117,12 @@ - type: ProtectedFromStepTriggers # Can step on glass shards and mousetraps safely. - type: BarestepModifier # Silent when walking without shoes. footstepSoundCollection: null - # DEN start + - type: FlashedModifier # Tajaran are sensitive to flashes. + durationMod: 1.5 # 50% longer duration + stunMod: 1.5 # 50% longer duration + speedMod: 0.8 # 20% slower speed - only if not stunned. - type: PhysiologyDescription baseLabel: physiology-description-species-base-tajaran - # End DEN - type: entity parent: OrganBase From b35dc640adb5022dc2005d9df30f8c8bbcf30577 Mon Sep 17 00:00:00 2001 From: portfiend <109661617+portfiend@users.noreply.github.com> Date: Mon, 8 Jun 2026 00:51:03 -0500 Subject: [PATCH 17/26] tajaran guidebook tweak --- Resources/ServerInfo/_DEN/Guidebook/Mobs/Tajaran.xml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Resources/ServerInfo/_DEN/Guidebook/Mobs/Tajaran.xml b/Resources/ServerInfo/_DEN/Guidebook/Mobs/Tajaran.xml index 9a76998eca..f9485324aa 100644 --- a/Resources/ServerInfo/_DEN/Guidebook/Mobs/Tajaran.xml +++ b/Resources/ServerInfo/_DEN/Guidebook/Mobs/Tajaran.xml @@ -5,14 +5,14 @@ - Tajara (singular: Tajaran) are a species of anthropomorphic felines. They are highly expressive, often emoting using their tail and ears. + Tajara (singular: Tajaran) are a species of anthropomorphic felines. They are highly expressive, often emoting using their tail and ears. Most Tajara have fur and claws. Their claws are used to deal Slash damage with their unarmed attacks. - They possess fairly standard mammal-like physiology. They have red blood and the sensitive digestion of an omnivorous animal - they can consume raw meat, eggs and blood safely, but will be [color=red]poisoned[/color] by allicin (garlic, onions) and theobromine (chocolate, coffee, tea). + Tajara possess fairly standard mammal-like physiology. They have red blood and the sensitive digestion of an omnivorous animal - they can consume raw meat, eggs and blood safely, but will be poisoned by allicin (garlic, onions) and theobromine (chocolate, coffee, tea). - Tajara have exceptionally sensitive eyesight. They are capable of adjusting their vision to high visibility in low-light environments - also known as [color=#1e90ff]"night vision"[/color]. However, [color=#ffa500]flashes will stun them for longer, and may even cause them eye damage.[/color] + Tajara have exceptionally sensitive eyesight. They are capable of adjusting their vision to high visibility in low-light environments - also known as [color=#1e90ff]"night vision"[/color]. However, [color=#ffa500]flashes will stun them for 50% longer[/color], and may even cause them [color=#ffa500]eye damage.[/color] - Most tajara are covered in a thick fur coat, which offers them [color=#1e90ff]natural protection against cold environments.[/color] Conversely, their fur makes it difficult for them to disperse heat from their body, rendering them [color=#ffa500]susceptible to overheating.[/color] + The thick fur coat of most tajara offers them [color=#1e90ff]natural protection against cold environments.[/color] Conversely, their fur makes it difficult for them to disperse heat from their bodies, rendering them [color=#ffa500]susceptible to overheating.[/color] - In addition, tajara possess a light step - [color=#1e90ff]while barefoot, they will not produce any sounds with their steps, and they can even safely walk over mousetraps and glass shards without hurting themselves.[/color] + In addition, tajara possess a light step - while barefoot, [color=#1e90ff]they will not produce any sounds with their steps[/color], and they can even [color=#1e90ff]safely walk over mousetraps and glass shards without hurting themselves.[/color] From e2be4c9614bc3ab0fb4fcb544d5ec728b7e81274 Mon Sep 17 00:00:00 2001 From: portfiend <109661617+portfiend@users.noreply.github.com> Date: Mon, 8 Jun 2026 01:23:31 -0500 Subject: [PATCH 18/26] make this its own system actually --- Content.Shared/Flash/SharedFlashSystem.cs | 4 +--- ...redFlashSystem.cs => SharedFlashModifierSystem.cs} | 11 +++++++++-- 2 files changed, 10 insertions(+), 5 deletions(-) rename Content.Shared/_DEN/Flash/EntitySystems/{SharedFlashSystem.cs => SharedFlashModifierSystem.cs} (80%) diff --git a/Content.Shared/Flash/SharedFlashSystem.cs b/Content.Shared/Flash/SharedFlashSystem.cs index c46ab55c47..7911dabd41 100644 --- a/Content.Shared/Flash/SharedFlashSystem.cs +++ b/Content.Shared/Flash/SharedFlashSystem.cs @@ -1,5 +1,5 @@ using System.Linq; -using Content.Shared._DEN.Flash.Components; +using Content.Shared._DEN.Flash.EntitySystems; using Content.Shared.Charges.Components; using Content.Shared.Charges.Systems; using Content.Shared.Clothing.Components; @@ -64,8 +64,6 @@ public override void Initialize() SubscribeLocalEvent(OnPermanentBlindnessFlashAttempt); Subs.SubscribeWithRelay(OnFlashImmunityFlashAttempt, held: false); SubscribeLocalEvent(OnExamine); - - SubscribeLocalEvent(OnFlashModified); // DEN - Flash modifiers } private void OnFlashMeleeHit(Entity ent, ref MeleeHitEvent args) diff --git a/Content.Shared/_DEN/Flash/EntitySystems/SharedFlashSystem.cs b/Content.Shared/_DEN/Flash/EntitySystems/SharedFlashModifierSystem.cs similarity index 80% rename from Content.Shared/_DEN/Flash/EntitySystems/SharedFlashSystem.cs rename to Content.Shared/_DEN/Flash/EntitySystems/SharedFlashModifierSystem.cs index e2c09caf04..67e67d7269 100644 --- a/Content.Shared/_DEN/Flash/EntitySystems/SharedFlashSystem.cs +++ b/Content.Shared/_DEN/Flash/EntitySystems/SharedFlashModifierSystem.cs @@ -1,9 +1,16 @@ using Content.Shared._DEN.Flash.Components; -namespace Content.Shared.Flash; +namespace Content.Shared._DEN.Flash.EntitySystems; -public abstract partial class SharedFlashSystem +public sealed partial class SharedFlashModifierSystem : EntitySystem { + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnFlashModified); + } + /// /// Modifies the stats of an incoming flash on this entity. /// From 11e847ab4449878e8b050b103b763ae39740fda3 Mon Sep 17 00:00:00 2001 From: portfiend <109661617+portfiend@users.noreply.github.com> Date: Mon, 8 Jun 2026 21:07:19 -0500 Subject: [PATCH 19/26] add flashing blindness to tajaran --- .../Components/BlindedByFlashingComponent.cs | 20 ++++++++++ .../SharedBlindedByFlashingSystem.cs | 38 +++++++++++++++++++ .../Prototypes/_DEN/Body/Species/tajaran.yml | 3 ++ 3 files changed, 61 insertions(+) create mode 100644 Content.Shared/_DEN/Flash/Components/BlindedByFlashingComponent.cs create mode 100644 Content.Shared/_DEN/Flash/EntitySystems/SharedBlindedByFlashingSystem.cs diff --git a/Content.Shared/_DEN/Flash/Components/BlindedByFlashingComponent.cs b/Content.Shared/_DEN/Flash/Components/BlindedByFlashingComponent.cs new file mode 100644 index 0000000000..3abac07cc4 --- /dev/null +++ b/Content.Shared/_DEN/Flash/Components/BlindedByFlashingComponent.cs @@ -0,0 +1,20 @@ +namespace Content.Shared._DEN.Flash.Components; + +/// +/// Entities with this component will take eye damage when they are flashed. +/// +[RegisterComponent] +public sealed partial class BlindedByFlashingComponent : Component +{ + /// + /// How much eye damage this entity receives when flashed. + /// + [DataField] + public int Damage = 1; + + /// + /// The chance of this entity receiving eye damage when flashed. + /// + [DataField] + public float Chance = 1.0f; +} diff --git a/Content.Shared/_DEN/Flash/EntitySystems/SharedBlindedByFlashingSystem.cs b/Content.Shared/_DEN/Flash/EntitySystems/SharedBlindedByFlashingSystem.cs new file mode 100644 index 0000000000..1aae49d9d7 --- /dev/null +++ b/Content.Shared/_DEN/Flash/EntitySystems/SharedBlindedByFlashingSystem.cs @@ -0,0 +1,38 @@ + +using Content.Shared._DEN.Flash.Components; +using Content.Shared.Eye.Blinding.Systems; +using Content.Shared.Flash; +using Robust.Shared.Random; + +namespace Content.Shared._DEN.Flash.EntitySystems; + +public sealed partial class SharedBlindedByFlashingSystem : EntitySystem +{ + [Dependency] private BlindableSystem _blindable = default!; + [Dependency] private IRobustRandom _random = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnAfterFlashed); + } + + /// + /// Add eye damage to this entity when they are flashed. + /// + /// The entity that receives eye damage when flashed. + public void OnAfterFlashed(Entity ent, ref AfterFlashedEvent args) + { + if (ent.Owner != args.Target + || ent.Comp.Damage == 0 + || ent.Comp.Chance <= 0.0f) + return; + + if (ent.Comp.Chance < 1.0f + && _random.NextFloat() > ent.Comp.Chance) + return; + + _blindable.AdjustEyeDamage(ent.Owner, ent.Comp.Damage); + } +} diff --git a/Resources/Prototypes/_DEN/Body/Species/tajaran.yml b/Resources/Prototypes/_DEN/Body/Species/tajaran.yml index e7bb2208ec..259ca4f674 100644 --- a/Resources/Prototypes/_DEN/Body/Species/tajaran.yml +++ b/Resources/Prototypes/_DEN/Body/Species/tajaran.yml @@ -121,6 +121,9 @@ durationMod: 1.5 # 50% longer duration stunMod: 1.5 # 50% longer duration speedMod: 0.8 # 20% slower speed - only if not stunned. + - type: BlindedByFlashing # Tajaran are sometimes blinded by flashes. + damage: 1 + chance: 0.35 - type: PhysiologyDescription baseLabel: physiology-description-species-base-tajaran From 13a69be72dbf504afb357188fed6f1f168855e97 Mon Sep 17 00:00:00 2001 From: portfiend <109661617+portfiend@users.noreply.github.com> Date: Mon, 8 Jun 2026 21:14:30 -0500 Subject: [PATCH 20/26] actually this has to be server side --- .../_DEN/Flash/EntitySystems/BlindedByFlashingSystem.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) rename Content.Shared/_DEN/Flash/EntitySystems/SharedBlindedByFlashingSystem.cs => Content.Server/_DEN/Flash/EntitySystems/BlindedByFlashingSystem.cs (89%) diff --git a/Content.Shared/_DEN/Flash/EntitySystems/SharedBlindedByFlashingSystem.cs b/Content.Server/_DEN/Flash/EntitySystems/BlindedByFlashingSystem.cs similarity index 89% rename from Content.Shared/_DEN/Flash/EntitySystems/SharedBlindedByFlashingSystem.cs rename to Content.Server/_DEN/Flash/EntitySystems/BlindedByFlashingSystem.cs index 1aae49d9d7..084c7912d7 100644 --- a/Content.Shared/_DEN/Flash/EntitySystems/SharedBlindedByFlashingSystem.cs +++ b/Content.Server/_DEN/Flash/EntitySystems/BlindedByFlashingSystem.cs @@ -4,9 +4,9 @@ using Content.Shared.Flash; using Robust.Shared.Random; -namespace Content.Shared._DEN.Flash.EntitySystems; +namespace Content.Server._DEN.Flash.EntitySystems; -public sealed partial class SharedBlindedByFlashingSystem : EntitySystem +public sealed partial class BlindedByFlashingSystem : EntitySystem { [Dependency] private BlindableSystem _blindable = default!; [Dependency] private IRobustRandom _random = default!; From e4636e6b098caefe00a4e8e3067978a1e84446dc Mon Sep 17 00:00:00 2001 From: portfiend <109661617+portfiend@users.noreply.github.com> Date: Thu, 11 Jun 2026 09:22:18 -0500 Subject: [PATCH 21/26] we ball --- Resources/ServerInfo/_DEN/Guidebook/Mobs/Tajaran.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Resources/ServerInfo/_DEN/Guidebook/Mobs/Tajaran.xml b/Resources/ServerInfo/_DEN/Guidebook/Mobs/Tajaran.xml index f9485324aa..79b9d526c9 100644 --- a/Resources/ServerInfo/_DEN/Guidebook/Mobs/Tajaran.xml +++ b/Resources/ServerInfo/_DEN/Guidebook/Mobs/Tajaran.xml @@ -9,7 +9,7 @@ Tajara possess fairly standard mammal-like physiology. They have red blood and the sensitive digestion of an omnivorous animal - they can consume raw meat, eggs and blood safely, but will be poisoned by allicin (garlic, onions) and theobromine (chocolate, coffee, tea). - Tajara have exceptionally sensitive eyesight. They are capable of adjusting their vision to high visibility in low-light environments - also known as [color=#1e90ff]"night vision"[/color]. However, [color=#ffa500]flashes will stun them for 50% longer[/color], and may even cause them [color=#ffa500]eye damage.[/color] + Tajara have exceptionally sensitive eyesight. [color=#ffa500]Flashes will stun them for 50% longer[/color], and may even cause them [color=#ffa500]eye damage.[/color] The thick fur coat of most tajara offers them [color=#1e90ff]natural protection against cold environments.[/color] Conversely, their fur makes it difficult for them to disperse heat from their bodies, rendering them [color=#ffa500]susceptible to overheating.[/color] From d7652bac3d3ffb7752db788c831e03a692958d37 Mon Sep 17 00:00:00 2001 From: portfiend <109661617+portfiend@users.noreply.github.com> Date: Sat, 13 Jun 2026 08:48:19 -0500 Subject: [PATCH 22/26] add night vision overlays --- .../_DEN/Overlays/NightVisionOverlay.cs | 46 ++++++++++++++++++ .../_DEN/Overlays/NightVisionOverlaySystem.cs | 47 +++++++++++++++++++ .../Inventory/InventorySystem.Relay.cs | 5 ++ .../Components/NightVisionOverlayComponent.cs | 19 ++++++++ .../Prototypes/_DEN/Shaders/nightvision.yml | 4 ++ .../Textures/_DEN/Shaders/nightvision.swsl | 47 +++++++++++++++++++ 6 files changed, 168 insertions(+) create mode 100644 Content.Client/_DEN/Overlays/NightVisionOverlay.cs create mode 100644 Content.Client/_DEN/Overlays/NightVisionOverlaySystem.cs create mode 100644 Content.Shared/_DEN/Overlays/Components/NightVisionOverlayComponent.cs create mode 100644 Resources/Prototypes/_DEN/Shaders/nightvision.yml create mode 100644 Resources/Textures/_DEN/Shaders/nightvision.swsl diff --git a/Content.Client/_DEN/Overlays/NightVisionOverlay.cs b/Content.Client/_DEN/Overlays/NightVisionOverlay.cs new file mode 100644 index 0000000000..8d71ee3d29 --- /dev/null +++ b/Content.Client/_DEN/Overlays/NightVisionOverlay.cs @@ -0,0 +1,46 @@ +using Content.Shared._DEN.Overlays.Components; +using Robust.Client.Graphics; +using Robust.Client.Player; +using Robust.Shared.Enums; +using Robust.Shared.Prototypes; + +namespace Content.Client._DEN.Overlays; + +public sealed partial class NightVisionOverlay : Overlay +{ + private static readonly ProtoId Shader = "NightVision"; + + [Dependency] private IPrototypeManager _prototypeManager = default!; + + public override OverlaySpace Space => OverlaySpace.WorldSpace; + public override bool RequestScreenTexture => true; + private readonly ShaderInstance _nightVisionShader; + + public NightVisionOverlay() + { + IoCManager.InjectDependencies(this); + _nightVisionShader = _prototypeManager.Index(Shader).InstanceUnique(); + } + + protected override void Draw(in OverlayDrawArgs args) + { + if (ScreenTexture == null) + return; + + _nightVisionShader.SetParameter("SCREEN_TEXTURE", ScreenTexture); + + var handle = args.WorldHandle; + handle.UseShader(_nightVisionShader); + handle.DrawRect(args.WorldBounds, Color.White); + handle.UseShader(null); + } + + /// + /// Sets the tint color of this overlay. + /// + /// The tint color. + public void SetColorTint(Color tint) + { + _nightVisionShader.SetParameter("tint_color", tint); + } +} diff --git a/Content.Client/_DEN/Overlays/NightVisionOverlaySystem.cs b/Content.Client/_DEN/Overlays/NightVisionOverlaySystem.cs new file mode 100644 index 0000000000..15d61a02d5 --- /dev/null +++ b/Content.Client/_DEN/Overlays/NightVisionOverlaySystem.cs @@ -0,0 +1,47 @@ +using Content.Client.Overlays; +using Content.Shared._DEN.Overlays.Components; +using Content.Shared.Inventory.Events; +using Robust.Client.Graphics; +using Robust.Shared.Utility; + +namespace Content.Client._DEN.Overlays; + +public sealed partial class NightVisionOverlaySystem : EquipmentHudSystem +{ + [Dependency] private ILightManager _lightManager = default!; + [Dependency] private IOverlayManager _overlayMan = default!; + + private NightVisionOverlay _overlay = default!; + + public override void Initialize() + { + base.Initialize(); + + _overlay = new(); + } + + protected override void UpdateInternal(RefreshEquipmentHudEvent component) + { + base.UpdateInternal(component); + + _overlayMan.AddOverlay(_overlay); + _lightManager.Enabled = false; + + var comps = component.Components; + if (comps.TryFirstOrDefault(out var comp)) + { + _overlay.SetColorTint(comp.TintColor); + return; + } + + _overlay.SetColorTint(NightVisionOverlayComponent.DefaultTintColor); + } + + protected override void DeactivateInternal() + { + base.DeactivateInternal(); + + _overlayMan.RemoveOverlay(_overlay); + _lightManager.Enabled = true; + } +} diff --git a/Content.Shared/Inventory/InventorySystem.Relay.cs b/Content.Shared/Inventory/InventorySystem.Relay.cs index 72eb734b2b..641750a095 100644 --- a/Content.Shared/Inventory/InventorySystem.Relay.cs +++ b/Content.Shared/Inventory/InventorySystem.Relay.cs @@ -1,3 +1,4 @@ +using Content.Shared._DEN.Overlays.Components; using Content.Shared.Armor; using Content.Shared.Atmos; using Content.Shared.Chat; @@ -102,6 +103,10 @@ public void InitializeRelay() SubscribeLocalEvent>(RefRelayInventoryEvent); SubscribeLocalEvent>(RefRelayInventoryEvent); + // Begin DEN + SubscribeLocalEvent>(RefRelayInventoryEvent); + // End DEN + SubscribeLocalEvent>(OnGetEquipmentVerbs); SubscribeLocalEvent>(OnGetInnateVerbs); diff --git a/Content.Shared/_DEN/Overlays/Components/NightVisionOverlayComponent.cs b/Content.Shared/_DEN/Overlays/Components/NightVisionOverlayComponent.cs new file mode 100644 index 0000000000..d2c0353872 --- /dev/null +++ b/Content.Shared/_DEN/Overlays/Components/NightVisionOverlayComponent.cs @@ -0,0 +1,19 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared._DEN.Overlays.Components; + +/// +/// When applied to an entity or a clothing item, this gives the entity (or wearer) +/// a "night vision" shader. This shader allows you to see better in dark environments. +/// +[RegisterComponent, NetworkedComponent] +public sealed partial class NightVisionOverlayComponent : Component +{ + public readonly static Color DefaultTintColor = Color.FromHex("#888"); + + /// + /// What color to tint the night vision effect. + /// + [DataField] + public Color TintColor = DefaultTintColor; +} diff --git a/Resources/Prototypes/_DEN/Shaders/nightvision.yml b/Resources/Prototypes/_DEN/Shaders/nightvision.yml new file mode 100644 index 0000000000..945a0d3d7d --- /dev/null +++ b/Resources/Prototypes/_DEN/Shaders/nightvision.yml @@ -0,0 +1,4 @@ +- type: shader + id: NightVision + kind: source + path: "/Textures/_DEN/Shaders/nightvision.swsl" diff --git a/Resources/Textures/_DEN/Shaders/nightvision.swsl b/Resources/Textures/_DEN/Shaders/nightvision.swsl new file mode 100644 index 0000000000..e0d21d8b5c --- /dev/null +++ b/Resources/Textures/_DEN/Shaders/nightvision.swsl @@ -0,0 +1,47 @@ +// Night vision shader. +// "Grayscale", but curved so that mid-range colors are lighter. +// Light colors and "close-to-black" are less affected. +// Tint and noise are added as well. + +light_mode unshaded; + +uniform sampler2D SCREEN_TEXTURE; + +// Color ranges are curved based on value, to boost dark colors +// Lower bound of curve - when adjustment "starts" +uniform highp float low_curve = 0.2; +// Midpoint of curve - when the adjustment is at its highest +uniform highp float mid_curve = 0.5; +// Upper bound of surve - when adjustment "ends" +uniform highp float high_curve = 0.8; +// How much "boost" the curved grays get +uniform highp float curve_amount = 0.4; + +// Screen tint color +uniform highp vec4 tint_color = vec4(1.0); + +void fragment() { + highp vec4 color = zTextureSpec(SCREEN_TEXTURE, UV); + highp vec3 gray = vec3(zGrayscale(color.rgb)); + + // curve values based on lightness + highp vec3 curvedColor = curve_gray(gray); + + // apply tint to colors + highp vec4 tintedColor = vec4(curvedColor * tint_color.rgb, color.a); + + COLOR = tintedColor; +} + +highp vec3 curve_gray(highp vec3 c) +{ + highp float value = c.r; + + highp float lowBoost = smoothstep(low_curve, mid_curve, value); + highp float highBoost = smoothstep(mid_curve, high_curve, value); + highp float boost = lowBoost * (1.0 - highBoost); + highp float curved = c.r + (boost * curve_amount); + curved = clamp(curved, 0.0, 1.0); + + return vec3(curved); +} From f65314bf63c07ec7f28c9842c09008dd55fd5bb6 Mon Sep 17 00:00:00 2001 From: portfiend <109661617+portfiend@users.noreply.github.com> Date: Thu, 18 Jun 2026 05:31:55 -0500 Subject: [PATCH 23/26] fix fov --- Content.Client/_DEN/Overlays/NightVisionOverlaySystem.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Content.Client/_DEN/Overlays/NightVisionOverlaySystem.cs b/Content.Client/_DEN/Overlays/NightVisionOverlaySystem.cs index 15d61a02d5..e8873fc12f 100644 --- a/Content.Client/_DEN/Overlays/NightVisionOverlaySystem.cs +++ b/Content.Client/_DEN/Overlays/NightVisionOverlaySystem.cs @@ -25,7 +25,7 @@ protected override void UpdateInternal(RefreshEquipmentHudEvent Date: Thu, 18 Jun 2026 06:16:49 -0500 Subject: [PATCH 24/26] allow night vision overlays to modify the curve --- .../_DEN/Overlays/NightVisionOverlay.cs | 21 ++++++++++++---- .../_DEN/Overlays/NightVisionOverlaySystem.cs | 1 + .../Components/NightVisionOverlayComponent.cs | 24 +++++++++++++++++++ 3 files changed, 42 insertions(+), 4 deletions(-) diff --git a/Content.Client/_DEN/Overlays/NightVisionOverlay.cs b/Content.Client/_DEN/Overlays/NightVisionOverlay.cs index 8d71ee3d29..263ec54199 100644 --- a/Content.Client/_DEN/Overlays/NightVisionOverlay.cs +++ b/Content.Client/_DEN/Overlays/NightVisionOverlay.cs @@ -1,6 +1,4 @@ -using Content.Shared._DEN.Overlays.Components; using Robust.Client.Graphics; -using Robust.Client.Player; using Robust.Shared.Enums; using Robust.Shared.Prototypes; @@ -8,7 +6,7 @@ namespace Content.Client._DEN.Overlays; public sealed partial class NightVisionOverlay : Overlay { - private static readonly ProtoId Shader = "NightVision"; + private static readonly ProtoId ShaderId = "NightVision"; [Dependency] private IPrototypeManager _prototypeManager = default!; @@ -19,7 +17,7 @@ public sealed partial class NightVisionOverlay : Overlay public NightVisionOverlay() { IoCManager.InjectDependencies(this); - _nightVisionShader = _prototypeManager.Index(Shader).InstanceUnique(); + _nightVisionShader = _prototypeManager.Index(ShaderId).InstanceUnique(); } protected override void Draw(in OverlayDrawArgs args) @@ -43,4 +41,19 @@ public void SetColorTint(Color tint) { _nightVisionShader.SetParameter("tint_color", tint); } + + public void SetCurve(float? lowCurve, float? midCurve, float? highCurve, float? curveAmount) + { + if (lowCurve != null) + _nightVisionShader.SetParameter("low_curve", lowCurve.Value); + + if (midCurve != null) + _nightVisionShader.SetParameter("mid_curve", midCurve.Value); + + if (highCurve != null) + _nightVisionShader.SetParameter("high_curve", highCurve.Value); + + if (curveAmount != null) + _nightVisionShader.SetParameter("curve_amount", curveAmount.Value); + } } diff --git a/Content.Client/_DEN/Overlays/NightVisionOverlaySystem.cs b/Content.Client/_DEN/Overlays/NightVisionOverlaySystem.cs index e8873fc12f..8880937fdb 100644 --- a/Content.Client/_DEN/Overlays/NightVisionOverlaySystem.cs +++ b/Content.Client/_DEN/Overlays/NightVisionOverlaySystem.cs @@ -31,6 +31,7 @@ protected override void UpdateInternal(RefreshEquipmentHudEvent [DataField] public Color TintColor = DefaultTintColor; + + /// + /// The minimum bound of lightness that this shader will begin rebalancing values. + /// + [DataField] + public float? LowCurve = null; + + /// + /// The point at which the "curve" is highest - what lightness increases the curve the most. + /// + [DataField] + public float? MidCurve = null; + + /// + /// The upper bound of lightness that this shader will begin rebalancing values. + /// + [DataField] + public float? HighCurve = null; + + /// + /// The amount that lightness values will be increased at its peak. + /// + [DataField] + public float? CurveAmount = null; } From 6164ae1c6f2d756d8fc1a2070e3249042edf45d4 Mon Sep 17 00:00:00 2001 From: portfiend <109661617+portfiend@users.noreply.github.com> Date: Thu, 18 Jun 2026 06:17:06 -0500 Subject: [PATCH 25/26] rework night vision tint --- Content.Client/_DEN/Overlays/NightVisionOverlay.cs | 6 ++++-- Resources/Textures/_DEN/Shaders/nightvision.swsl | 8 +------- 2 files changed, 5 insertions(+), 9 deletions(-) diff --git a/Content.Client/_DEN/Overlays/NightVisionOverlay.cs b/Content.Client/_DEN/Overlays/NightVisionOverlay.cs index 263ec54199..659bc3cc5d 100644 --- a/Content.Client/_DEN/Overlays/NightVisionOverlay.cs +++ b/Content.Client/_DEN/Overlays/NightVisionOverlay.cs @@ -14,6 +14,8 @@ public sealed partial class NightVisionOverlay : Overlay public override bool RequestScreenTexture => true; private readonly ShaderInstance _nightVisionShader; + private Color _tintColor = Color.White; + public NightVisionOverlay() { IoCManager.InjectDependencies(this); @@ -29,7 +31,7 @@ protected override void Draw(in OverlayDrawArgs args) var handle = args.WorldHandle; handle.UseShader(_nightVisionShader); - handle.DrawRect(args.WorldBounds, Color.White); + handle.DrawRect(args.WorldBounds, _tintColor); handle.UseShader(null); } @@ -39,7 +41,7 @@ protected override void Draw(in OverlayDrawArgs args) /// The tint color. public void SetColorTint(Color tint) { - _nightVisionShader.SetParameter("tint_color", tint); + _tintColor = tint; } public void SetCurve(float? lowCurve, float? midCurve, float? highCurve, float? curveAmount) diff --git a/Resources/Textures/_DEN/Shaders/nightvision.swsl b/Resources/Textures/_DEN/Shaders/nightvision.swsl index e0d21d8b5c..b3aa535ccf 100644 --- a/Resources/Textures/_DEN/Shaders/nightvision.swsl +++ b/Resources/Textures/_DEN/Shaders/nightvision.swsl @@ -17,9 +17,6 @@ uniform highp float high_curve = 0.8; // How much "boost" the curved grays get uniform highp float curve_amount = 0.4; -// Screen tint color -uniform highp vec4 tint_color = vec4(1.0); - void fragment() { highp vec4 color = zTextureSpec(SCREEN_TEXTURE, UV); highp vec3 gray = vec3(zGrayscale(color.rgb)); @@ -27,10 +24,7 @@ void fragment() { // curve values based on lightness highp vec3 curvedColor = curve_gray(gray); - // apply tint to colors - highp vec4 tintedColor = vec4(curvedColor * tint_color.rgb, color.a); - - COLOR = tintedColor; + COLOR = vec4(curvedColor, color.a); } highp vec3 curve_gray(highp vec3 c) From 1dbb18c6b90a292cc2ae3d2c03e44aaf135636f6 Mon Sep 17 00:00:00 2001 From: portfiend <109661617+portfiend@users.noreply.github.com> Date: Thu, 18 Jun 2026 06:18:14 -0500 Subject: [PATCH 26/26] eh --- Resources/Textures/_DEN/Shaders/nightvision.swsl | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/Resources/Textures/_DEN/Shaders/nightvision.swsl b/Resources/Textures/_DEN/Shaders/nightvision.swsl index b3aa535ccf..b139f6ed9f 100644 --- a/Resources/Textures/_DEN/Shaders/nightvision.swsl +++ b/Resources/Textures/_DEN/Shaders/nightvision.swsl @@ -1,7 +1,6 @@ // Night vision shader. // "Grayscale", but curved so that mid-range colors are lighter. // Light colors and "close-to-black" are less affected. -// Tint and noise are added as well. light_mode unshaded; @@ -9,13 +8,13 @@ uniform sampler2D SCREEN_TEXTURE; // Color ranges are curved based on value, to boost dark colors // Lower bound of curve - when adjustment "starts" -uniform highp float low_curve = 0.2; +uniform highp float low_curve = 0.08; // Midpoint of curve - when the adjustment is at its highest -uniform highp float mid_curve = 0.5; +uniform highp float mid_curve = 0.2; // Upper bound of surve - when adjustment "ends" -uniform highp float high_curve = 0.8; +uniform highp float high_curve = 0.6; // How much "boost" the curved grays get -uniform highp float curve_amount = 0.4; +uniform highp float curve_amount = 0.3; void fragment() { highp vec4 color = zTextureSpec(SCREEN_TEXTURE, UV);