From a1629c03dc55e1a2cd6e31b132aea41897eadca9 Mon Sep 17 00:00:00 2001 From: portfiend <109661617+portfiend@users.noreply.github.com> Date: Thu, 25 Jun 2026 09:32:29 -0500 Subject: [PATCH 01/26] rodentia species --- Resources/Locale/en-US/_DEN/species/species.ftl | 1 + Resources/Prototypes/_DEN/Species/rodentia.yml | 11 +++++++++++ 2 files changed, 12 insertions(+) create mode 100644 Resources/Locale/en-US/_DEN/species/species.ftl create mode 100644 Resources/Prototypes/_DEN/Species/rodentia.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..9d05943c31 --- /dev/null +++ b/Resources/Locale/en-US/_DEN/species/species.ftl @@ -0,0 +1 @@ +species-name-rodentia = Rodentia diff --git a/Resources/Prototypes/_DEN/Species/rodentia.yml b/Resources/Prototypes/_DEN/Species/rodentia.yml new file mode 100644 index 0000000000..2f026fb051 --- /dev/null +++ b/Resources/Prototypes/_DEN/Species/rodentia.yml @@ -0,0 +1,11 @@ +- type: species + id: Rodentia + name: species-name-rodentia + roundStart: true + prototype: MobRodentia # TODO + defaultSkinTone: "#747474" + dollPrototype: AppearanceRodentia # TODO + skinColoration: Hues + maleFirstNames: NamesRodentiaFirstMale # TODO + femaleFirstNames: NamesRodentiaFirstFemale # TODO + lastNames: NamesRodentiaLast # TODO From b487fdc3350f111c9bb23f53b814684d04a5c568 Mon Sep 17 00:00:00 2001 From: portfiend <109661617+portfiend@users.noreply.github.com> Date: Thu, 25 Jun 2026 10:23:22 -0500 Subject: [PATCH 02/26] add sprites --- .../Customization/Rodentia/parts.rsi/full.png | Bin 0 -> 770 bytes .../Rodentia/parts.rsi/head_f.png | Bin 0 -> 457 bytes .../Rodentia/parts.rsi/head_m.png | Bin 0 -> 458 bytes .../Rodentia/parts.rsi/l_arm.png | Bin 0 -> 279 bytes .../Rodentia/parts.rsi/l_foot.png | Bin 0 -> 246 bytes .../Rodentia/parts.rsi/l_hand.png | Bin 0 -> 194 bytes .../Rodentia/parts.rsi/l_leg.png | Bin 0 -> 228 bytes .../Rodentia/parts.rsi/meta.json | 62 ++++++++++++++++++ .../Rodentia/parts.rsi/r_arm.png | Bin 0 -> 288 bytes .../Rodentia/parts.rsi/r_foot.png | Bin 0 -> 240 bytes .../Rodentia/parts.rsi/r_hand.png | Bin 0 -> 206 bytes .../Rodentia/parts.rsi/r_leg.png | Bin 0 -> 238 bytes .../Rodentia/parts.rsi/torso_f.png | Bin 0 -> 783 bytes .../Rodentia/parts.rsi/torso_m.png | Bin 0 -> 733 bytes 14 files changed, 62 insertions(+) create mode 100755 Resources/Textures/_DEN/Mobs/Customization/Rodentia/parts.rsi/full.png create mode 100755 Resources/Textures/_DEN/Mobs/Customization/Rodentia/parts.rsi/head_f.png create mode 100755 Resources/Textures/_DEN/Mobs/Customization/Rodentia/parts.rsi/head_m.png create mode 100755 Resources/Textures/_DEN/Mobs/Customization/Rodentia/parts.rsi/l_arm.png create mode 100755 Resources/Textures/_DEN/Mobs/Customization/Rodentia/parts.rsi/l_foot.png create mode 100755 Resources/Textures/_DEN/Mobs/Customization/Rodentia/parts.rsi/l_hand.png create mode 100755 Resources/Textures/_DEN/Mobs/Customization/Rodentia/parts.rsi/l_leg.png create mode 100644 Resources/Textures/_DEN/Mobs/Customization/Rodentia/parts.rsi/meta.json create mode 100755 Resources/Textures/_DEN/Mobs/Customization/Rodentia/parts.rsi/r_arm.png create mode 100755 Resources/Textures/_DEN/Mobs/Customization/Rodentia/parts.rsi/r_foot.png create mode 100755 Resources/Textures/_DEN/Mobs/Customization/Rodentia/parts.rsi/r_hand.png create mode 100755 Resources/Textures/_DEN/Mobs/Customization/Rodentia/parts.rsi/r_leg.png create mode 100755 Resources/Textures/_DEN/Mobs/Customization/Rodentia/parts.rsi/torso_f.png create mode 100755 Resources/Textures/_DEN/Mobs/Customization/Rodentia/parts.rsi/torso_m.png diff --git a/Resources/Textures/_DEN/Mobs/Customization/Rodentia/parts.rsi/full.png b/Resources/Textures/_DEN/Mobs/Customization/Rodentia/parts.rsi/full.png new file mode 100755 index 0000000000000000000000000000000000000000..10197899efa9b93371d5009fad671014bce4f7c5 GIT binary patch literal 770 zcmV+d1O5DoP)Px%yh%hsR9J<@m%VD^KomxgmnCHk8e*n*p+ZdxcL5vsLf}eo5YQ6^@)9z_PasGa zNM(TtE)7G>42&U-8f}viQr4SDPImVLG1C0qbMMR@N${UF>eK1&?hb&>W>dSmFbtcq zf2!}JAALJ+Hk*1rpEIA&Pqw?ZHq5sHIOE6Tk=y8w2(9mnHwFvQOxw1>li ztE(%5ARvz8PTR}N3x~sj%gf6lQ}&BM7>1)f&)M(yOeT}xjK^`zWHMpD-;?M0pncGL z4}@Vjn$2d7@rQ?pP8r8Bv)SzLZ9*rd6adrdl(Z5FY|K@119P zo}-jvxmXO`5jHpAFE~ z_4PHz7=#c=DLZXaN`w%-3=RUY)>0G&i^YQ1*H`D^$p}a(@jQ>REbGN$K~WT)tT_vy zttg5x#x%y-a!|$?qA2P+E#={So0ssI207*qoM6N<$f_?;T A5C8xG literal 0 HcmV?d00001 diff --git a/Resources/Textures/_DEN/Mobs/Customization/Rodentia/parts.rsi/head_f.png b/Resources/Textures/_DEN/Mobs/Customization/Rodentia/parts.rsi/head_f.png new file mode 100755 index 0000000000000000000000000000000000000000..f612f55205bfc55e4be045c86c67a44871d9757a GIT binary patch literal 457 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D%zn>}3|Ln`LH zy=B|i33`ArzlA#+&h`D>?fPTuj_HU_GPU7I{o$Cyz7;7mY>;vttxbFbg@yr-G8f^H=bYS z{{MC2u+pQ+DvS&={l~B6Pf`(>=qT>!QX}GO{@yk4ist`?tPBjHtPCuU4U04cSR7aX zzq!ZuQ^CCFX**-yU4Lylr+CKs=LP2;*4Qcg21_Kf-R=2gV?O(An*Hpv8zOXG{ad6_ zU?IbHetl<${an9N>0j&r$L?F@H_6`x0lrMBvXpP&%=$9rsYWu#&`thk8*P`T)7p~UlIsEa|y|K{B949{a~*REPT sM}Uzb`Hc6hWovC0Sc)sb!LG;5JLWq6U7ps%4vZTHPgg&ebxsLQ0Ka0$_5c6? literal 0 HcmV?d00001 diff --git a/Resources/Textures/_DEN/Mobs/Customization/Rodentia/parts.rsi/head_m.png b/Resources/Textures/_DEN/Mobs/Customization/Rodentia/parts.rsi/head_m.png new file mode 100755 index 0000000000000000000000000000000000000000..6ee304577d0af90a3853fdf17108a9500be70e98 GIT binary patch literal 458 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D%zTRdGHLn`LH zy=9+w$UubcL;p5mZJ`YY3wl1v7O^dpX;zkyKd63^(}<;Wu4?kP?H2AGyG;Za>IPl< zqxtsxWSvFsAJQXFoHlm&vR?PszY9^XUq65R@kaH$E}P6< zW*gV8y;PtrakZT5#TRcsTG@9k3e)8|{PNc0)X2J3og7_@URZ_dr$#Q)=sI}oW4^P` zrn`BK{npG3e55YWHW!fZ}te=ar03 u@(MB-9MhSkk~x=gd$yty3@l>5$H=qB@$ZC)$+Llx!{F)a=d#Wzp$Py~BhjJ& literal 0 HcmV?d00001 diff --git a/Resources/Textures/_DEN/Mobs/Customization/Rodentia/parts.rsi/l_arm.png b/Resources/Textures/_DEN/Mobs/Customization/Rodentia/parts.rsi/l_arm.png new file mode 100755 index 0000000000000000000000000000000000000000..3c356949c972d12d06152a74faf0be45acfbd7e3 GIT binary patch literal 279 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|E_%8+hE&XX zdvhaiivdq-VzKguR4um-n{_R!wCR1dN8IVmofi*rPdG2) z;q~&mAeYeP6S&LrW`fLyfCvBYY|8(=^zp4b zcT;bhMNWJA`n^=0`Hl5w&+DbM>pO%lPv-n=GvCU-hH>w4-vgoj`e1DzT=Ku4h!Z*Q Ru=oUs@9FC2vd$@?2>@p|aaI5T literal 0 HcmV?d00001 diff --git a/Resources/Textures/_DEN/Mobs/Customization/Rodentia/parts.rsi/l_foot.png b/Resources/Textures/_DEN/Mobs/Customization/Rodentia/parts.rsi/l_foot.png new file mode 100755 index 0000000000000000000000000000000000000000..d692606fda90872ae8e57f85aa873ea8c40cf544 GIT binary patch literal 246 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|Hh8)?hE&XX zd&^PqumO+D#oXmQJjZ2Pjt2A`mEm!hxZ^!1GyRrK($eYw*b|;+6kYZL>Vbj}?0Ksh zmrj{j9OmV@*3>g-ZK>t=%QBuu#yfXcy;m%jQ(S-hjH`##L~o6yJjUH!)xw(^?p3>- zS@^S@5oQDfgP%q1p}M!M8N2VrUF5cyW$*t?ySB0VNb;T7v~ANR)|uJgyE}dJv|o(- fU$E8)Ulp%lVp(asj!{zQ0>}tYS3j3^P6py=5a=?%HJv+sYuZ5cfOxN+C~T?`Ml@t+Lw U@7;Px@G3~Vr>mdKI;Vst04G^py#N3J literal 0 HcmV?d00001 diff --git a/Resources/Textures/_DEN/Mobs/Customization/Rodentia/parts.rsi/meta.json b/Resources/Textures/_DEN/Mobs/Customization/Rodentia/parts.rsi/meta.json new file mode 100644 index 0000000000..6e15cadeae --- /dev/null +++ b/Resources/Textures/_DEN/Mobs/Customization/Rodentia/parts.rsi/meta.json @@ -0,0 +1,62 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "https://github.com/tgstation/tgstation/blob/8024397cc81c5f47f74cf4279e35728487d0a1a7/icons/mob/human_parts_greyscale.dmi, modified by DrSmugleaf and portfiend (GitHub)", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "full" + }, + { + "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/_DEN/Mobs/Customization/Rodentia/parts.rsi/r_arm.png b/Resources/Textures/_DEN/Mobs/Customization/Rodentia/parts.rsi/r_arm.png new file mode 100755 index 0000000000000000000000000000000000000000..4bda91b236d66cfdb1c30aef045e7b9bccac6232 GIT binary patch literal 288 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|Zh5*mhE&XX zdvjxNi-AbX!|mZr6L&9^3s2nHBEFMnyQ!dVg|eB&OP-8G|G0npP8|s*n>>&4fQ;4M&TnoNhf z>h(00rBlA#yBu|Tlg{Dq_m^JVb@ua|%vqb(Wly?edcE?C`tQU2Yo=_f&s*#*5#=!H zbXot3t>4}XLX2SOd%Ljazt!aP@kM`5t~(%iUA=PG>JOja80`H%B}k98tGv22JaLD7 g!Ry&G|7h>#+AomnP`aTxy9K1%)78&qol`;+0L#{AhX4Qo literal 0 HcmV?d00001 diff --git a/Resources/Textures/_DEN/Mobs/Customization/Rodentia/parts.rsi/r_hand.png b/Resources/Textures/_DEN/Mobs/Customization/Rodentia/parts.rsi/r_hand.png new file mode 100755 index 0000000000000000000000000000000000000000..857b2c5e82a421f5254f2d64e8b38d4ffaee4760 GIT binary patch literal 206 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|Iy_w*Ln`LH zy>*cHumTV3g%zt)VPSpSa literal 0 HcmV?d00001 diff --git a/Resources/Textures/_DEN/Mobs/Customization/Rodentia/parts.rsi/r_leg.png b/Resources/Textures/_DEN/Mobs/Customization/Rodentia/parts.rsi/r_leg.png new file mode 100755 index 0000000000000000000000000000000000000000..a06acc58fe9e08ff135ae2fbe0ec3018ef4c81fa GIT binary patch literal 238 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|R(QHNhE&XX zd+Q+YAp;)P3kNu2wZ;qC*;=*NMk?IsU;b~gr^mYXL;PBS_GIoD$r-}IRc htL1%b9@#PcyUpCz;NKhgPCf)=hNr8a%Q~loCIFD%VwL~^ literal 0 HcmV?d00001 diff --git a/Resources/Textures/_DEN/Mobs/Customization/Rodentia/parts.rsi/torso_f.png b/Resources/Textures/_DEN/Mobs/Customization/Rodentia/parts.rsi/torso_f.png new file mode 100755 index 0000000000000000000000000000000000000000..0e1ea21acce88725ba9ff06d5729706ffb8408df GIT binary patch literal 783 zcmV+q1MvKbP)Px%$w@>(RCt{2nz3#oF%X7-xU142VF|fSg@oULV&8$1N1);n_IRRw0)%!8>NHzW zrn4e>C8{V5ToYT%;zZ2snM;)UBx@yO`5%vmG3*!+1VIo4K@ff>1Ipk$&(8p`SS;Y2 z3;jwd6h#35*laeWIXU`SmSH}h<8U}&I-O#_-=nIkwEB6TpI={JLwkC93a#DmjZCE< z(`@%q^?y?aACE_jMk4^gbUKZGo|5D77}fQC9Q`3>u(dXb#Gck#vH@KEE?j+*1Dtc% z?RLS4{eBNKPU|E)%$H&J%v)K%%(+SVd&oIWIu4|l5Ck%%} zR8^HM33>g8hX+h16TH2>0YG@xbhS=io?S$Ck`#6F9S{$A76!*0>2c^{iD~+{l^rO+}!hkHxdKq&I zZH=xCoZ<*80=gF@JTEUVoasn(HQJXnIFQTZZTtlZyx$wRM`2>QTn_R)Kl@1NTasf% zK)X0YQW%fNEF&n4$K$Jn+owXzj)1P9a}G_@ zu#BM4G|g4A>vKPW>;R?ImyH0Px%mq|oHRCt{2nlX;6Fc60SeR@5T-S`G5;szVL*%lhG7_nVHoCj@)2@z(==ZIP*oL-G0S-=CEB(H z0Gv*zpgCjo%d*7rc*N)DC-OYU`FzGWj%oFqrun+vZp(4GT$aNj!0k5CX=SO{!_F zVT^$gB4oNKilXr9`<(I&K}FD73n}F$1L(iCHp+-+5kf#~4W-mlj0vrEQ~-iAKq=*o zfKn=X2DlDh-~a3JX9;qEwRTyo3pr(v48Yyta28MhlVq~}&Kw4`XVwxjS8Q}B&;c$qVDhgNY)l3NP z4*S@vH%R#UlSF8PG`KqqryEQ7c8sKEtw}b8Hb|o~z_&+0O1aAp5h28;;JO{+-7;Vu z0b@+^{Q+dd`gU^zk~9NwkMz4{K+K~!*a2q9W#d-Q2r3{|+`V48t%C^MCUV=+#+xl$xHa P00000NkvXXu0mjf_X Date: Thu, 25 Jun 2026 10:23:34 -0500 Subject: [PATCH 03/26] add detritivore metabolizer --- Resources/Locale/en-US/_DEN/metabolism/metabolizer-types.ftl | 1 + Resources/Prototypes/_DEN/Chemistry/metabolizer_types.yml | 5 +++++ 2 files changed, 6 insertions(+) create mode 100644 Resources/Locale/en-US/_DEN/metabolism/metabolizer-types.ftl create mode 100644 Resources/Prototypes/_DEN/Chemistry/metabolizer_types.yml diff --git a/Resources/Locale/en-US/_DEN/metabolism/metabolizer-types.ftl b/Resources/Locale/en-US/_DEN/metabolism/metabolizer-types.ftl new file mode 100644 index 0000000000..b3b8f03590 --- /dev/null +++ b/Resources/Locale/en-US/_DEN/metabolism/metabolizer-types.ftl @@ -0,0 +1 @@ +metabolizer-type-detritivore = Detritivore diff --git a/Resources/Prototypes/_DEN/Chemistry/metabolizer_types.yml b/Resources/Prototypes/_DEN/Chemistry/metabolizer_types.yml new file mode 100644 index 0000000000..0f38c926ad --- /dev/null +++ b/Resources/Prototypes/_DEN/Chemistry/metabolizer_types.yml @@ -0,0 +1,5 @@ +# Hardy digestion for trash eaters and decomposers. +# Can consume gastrotoxin and mold safely, and derive nutrition from doing so. +- type: metabolizerType + id: Detritivore + name: metabolizer-type-detritivore From b7f06edc3a91aff7947f3d87027e088cbf36b5f5 Mon Sep 17 00:00:00 2001 From: portfiend <109661617+portfiend@users.noreply.github.com> Date: Thu, 25 Jun 2026 10:24:02 -0500 Subject: [PATCH 04/26] add rodentia entity prototypes --- .../Prototypes/_DEN/Body/Species/rodentia.yml | 230 ++++++++++++++++++ .../Prototypes/_DEN/Species/rodentia.yml | 4 +- 2 files changed, 232 insertions(+), 2 deletions(-) create mode 100644 Resources/Prototypes/_DEN/Body/Species/rodentia.yml diff --git a/Resources/Prototypes/_DEN/Body/Species/rodentia.yml b/Resources/Prototypes/_DEN/Body/Species/rodentia.yml new file mode 100644 index 0000000000..216c15305b --- /dev/null +++ b/Resources/Prototypes/_DEN/Body/Species/rodentia.yml @@ -0,0 +1,230 @@ +- type: markingsGroup + parent: Undergarments + id: Rodentia + onlyGroupWhitelisted: true + limits: + enum.HumanoidVisualLayers.Hair: + limit: 1 + required: false + enum.HumanoidVisualLayers.FacialHair: + limit: 1 + required: false + enum.HumanoidVisualLayers.Head: + limit: 6 + required: false + enum.HumanoidVisualLayers.Chest: + limit: 6 + required: false + enum.HumanoidVisualLayers.LArm: + limit: 6 + required: false + enum.HumanoidVisualLayers.RArm: + limit: 6 + required: false + enum.HumanoidVisualLayers.LLeg: + limit: 6 + required: false + enum.HumanoidVisualLayers.RLeg: + limit: 6 + required: false + enum.HumanoidVisualLayers.Overlay: + limit: 6 + required: true + enum.HumanoidVisualLayers.HeadTop: + limit: 6 + required: true + default: [ RodentiaHeadTopEarDefault ] + enum.HumanoidVisualLayers.HeadSide: + limit: 6 + required: false + enum.HumanoidVisualLayers.Tail: + limit: 1 + required: true + default: [ RodentiaTail ] + enum.HumanoidVisualLayers.Snout: + limit: 1 + required: false + +# region Entities + +- type: entity + parent: BaseSpeciesAppearance + id: AppearanceRodentia + categories: [ HideSpawnMenu ] + name: rodentia appearance + components: + - type: Inventory + speciesId: rodentia + - type: InitialBody + organs: + # External + Torso: OrganRodentiaTorso + Head: OrganRodentiaHead + ArmLeft: OrganRodentiaArmLeft + ArmRight: OrganRodentiaArmRight + HandRight: OrganRodentiaHandRight + HandLeft: OrganRodentiaHandLeft + LegLeft: OrganRodentiaLegLeft + LegRight: OrganRodentiaLegRight + FootLeft: OrganRodentiaFootLeft + FootRight: OrganRodentiaFootRight + # Internal + Brain: OrganRodentiaBrain + Eyes: OrganRodentiaEyes + Tongue: OrganRodentiaTongue + Appendix: OrganRodentiaAppendix + Ears: OrganRodentiaEars + Lungs: OrganRodentiaLungs + Heart: OrganRodentiaHeart + Stomach: OrganRodentiaStomach + Liver: OrganRodentiaLiver + Kidneys: OrganRodentiaKidneys + - type: HumanoidProfile + species: Rodentia + +- type: entity + parent: + - AppearanceRodentia + - BaseSpeciesMobOrganic + id: MobRodentia + name: Urist McRat + +# region Base organs + +- type: entity + parent: OrganBaseOrganic + id: OrganRodentia + abstract: true + suffix: Rodentia + +- type: entity + id: OrganRodentiaMetabolizer + abstract: true + components: + - type: Metabolizer + metabolizerTypes: [ Animal, Detritivore ] + +- type: entity + parent: OrganRodentia + id: OrganRodentiaInternal + abstract: true + components: + - type: Sprite + sprite: Mobs/Species/Human/organs.rsi # TODO: Rodentia organ sprites? + +- type: entity + id: OrganRodentiaVisual + abstract: true + components: + - type: VisualOrgan + data: + sprite: &rodentiaSprite _DEN/Mobs/Customization/Rodentia/parts.rsi + - type: VisualOrganMarkings + markingData: + group: Rodentia + +- type: entity + parent: [ OrganRodentia, OrganRodentiaVisual ] + id: OrganRodentiaExternal + abstract: true + components: + - type: Sprite + sprite: *rodentiaSprite + +# region External + +- type: entity + parent: [ OrganBaseTorsoSexed, OrganBaseTorso, OrganRodentiaExternal ] + id: OrganRodentiaTorso + components: + - type: VisualOrganMarkings + hideableLayers: + - enum.HumanoidVisualLayers.Tail + +- type: entity + parent: [ OrganBaseHeadSexed, OrganBaseHead, OrganRodentiaExternal ] + id: OrganRodentiaHead + components: + - type: VisualOrganMarkings + hideableLayers: + - enum.HumanoidVisualLayers.Snout + - enum.HumanoidVisualLayers.HeadTop + - enum.HumanoidVisualLayers.HeadSide + +- type: entity + parent: [ OrganBaseArmLeft, OrganRodentiaExternal ] + id: OrganRodentiaArmLeft + +- type: entity + parent: [ OrganBaseArmRight, OrganRodentiaExternal ] + id: OrganRodentiaArmRight + +- type: entity + parent: [ OrganBaseHandLeft, OrganRodentiaExternal ] + id: OrganRodentiaHandLeft + +- type: entity + parent: [ OrganBaseHandRight, OrganRodentiaExternal ] + id: OrganRodentiaHandRight + +- type: entity + parent: [ OrganBaseLegLeft, OrganRodentiaExternal ] + id: OrganRodentiaLegLeft + +- type: entity + parent: [ OrganBaseLegRight, OrganRodentiaExternal ] + id: OrganRodentiaLegRight + +- type: entity + parent: [ OrganBaseFootLeft, OrganRodentiaExternal ] + id: OrganRodentiaFootLeft + +- type: entity + parent: [ OrganBaseFootRight, OrganRodentiaExternal ] + id: OrganRodentiaFootRight + +# region Internal + +- type: entity + parent: [ OrganBaseBrain, OrganSpriteHumanInternal, OrganRodentiaInternal ] + id: OrganRodentiaBrain + +- type: entity + parent: [ OrganBaseEyes, OrganRodentiaInternal, OrganRodentiaExternal ] + id: OrganRodentiaEyes + components: + - type: VisualOrgan + data: + sprite: Mobs/Customization/eyes.rsi + +- type: entity + parent: [ OrganBaseTongue, OrganRodentiaInternal ] + id: OrganRodentiaTongue + +- type: entity + parent: [ OrganBaseAppendix, OrganSpriteHumanInternal, OrganRodentiaInternal ] + id: OrganRodentiaAppendix + +- type: entity + parent: [ OrganBaseEars, OrganSpriteHumanInternal, OrganRodentiaInternal ] + id: OrganRodentiaEars + +- type: entity + parent: [ OrganBaseLungs, OrganRodentiaInternal, OrganRodentiaMetabolizer ] + id: OrganRodentiaLungs + +- type: entity + parent: [ OrganBaseHeart, OrganRodentiaInternal, OrganRodentiaMetabolizer ] + id: OrganRodentiaHeart + +- type: entity + parent: [ OrganBaseStomach, OrganRodentiaInternal, OrganRodentiaMetabolizer ] + id: OrganRodentiaStomach + +- type: entity + parent: [ OrganBaseLiver, OrganSpriteHumanInternal, OrganRodentiaInternal, OrganRodentiaMetabolizer ] + id: OrganRodentiaLiver + +- type: entity + parent: [ OrganBaseKidneys, OrganSpriteHumanInternal, OrganRodentiaInternal, OrganRodentiaMetabolizer ] + id: OrganRodentiaKidneys diff --git a/Resources/Prototypes/_DEN/Species/rodentia.yml b/Resources/Prototypes/_DEN/Species/rodentia.yml index 2f026fb051..9f92b9b4d6 100644 --- a/Resources/Prototypes/_DEN/Species/rodentia.yml +++ b/Resources/Prototypes/_DEN/Species/rodentia.yml @@ -2,9 +2,9 @@ id: Rodentia name: species-name-rodentia roundStart: true - prototype: MobRodentia # TODO + prototype: MobRodentia + dollPrototype: AppearanceRodentia defaultSkinTone: "#747474" - dollPrototype: AppearanceRodentia # TODO skinColoration: Hues maleFirstNames: NamesRodentiaFirstMale # TODO femaleFirstNames: NamesRodentiaFirstFemale # TODO From a6a8983d8ccc09a4bfe26efef6ae831c02db9a12 Mon Sep 17 00:00:00 2001 From: portfiend <109661617+portfiend@users.noreply.github.com> Date: Thu, 25 Jun 2026 11:07:35 -0500 Subject: [PATCH 05/26] add rodentia names --- .../datasets/names/rodentia_first_female.ftl | 166 ++++++++++++++++ .../datasets/names/rodentia_first_male.ftl | 183 ++++++++++++++++++ .../_DEN/datasets/names/rodentia_last.ftl | 86 ++++++++ .../_DEN/Datasets/Names/rodentia.yml | 30 +++ .../Prototypes/_DEN/Species/rodentia.yml | 6 +- 5 files changed, 468 insertions(+), 3 deletions(-) create mode 100644 Resources/Locale/en-US/_DEN/datasets/names/rodentia_first_female.ftl create mode 100644 Resources/Locale/en-US/_DEN/datasets/names/rodentia_first_male.ftl create mode 100644 Resources/Locale/en-US/_DEN/datasets/names/rodentia_last.ftl create mode 100644 Resources/Prototypes/_DEN/Datasets/Names/rodentia.yml diff --git a/Resources/Locale/en-US/_DEN/datasets/names/rodentia_first_female.ftl b/Resources/Locale/en-US/_DEN/datasets/names/rodentia_first_female.ftl new file mode 100644 index 0000000000..25f02ec89a --- /dev/null +++ b/Resources/Locale/en-US/_DEN/datasets/names/rodentia_first_female.ftl @@ -0,0 +1,166 @@ +# generic names +names-rodentia-first-female-dataset-1 = Squeaks +names-rodentia-first-female-dataset-2 = Squeaker +names-rodentia-first-female-dataset-3 = Nibbles +names-rodentia-first-female-dataset-4 = Pebbles +names-rodentia-first-female-dataset-5 = Peanut +names-rodentia-first-female-dataset-6 = Pinky +names-rodentia-first-female-dataset-7 = Gadget +names-rodentia-first-female-dataset-8 = Scurry +names-rodentia-first-female-dataset-9 = Scamper +names-rodentia-first-female-dataset-10 = Chitters +names-rodentia-first-female-dataset-11 = Quill +names-rodentia-first-female-dataset-12 = Whiskers +names-rodentia-first-female-dataset-13 = Wiggles +names-rodentia-first-female-dataset-14 = Button +names-rodentia-first-female-dataset-15 = Sniffles +names-rodentia-first-female-dataset-16 = Chip +names-rodentia-first-female-dataset-17 = Pipsqueak +names-rodentia-first-female-dataset-18 = Nugget +names-rodentia-first-female-dataset-19 = Comet +names-rodentia-first-female-dataset-20 = Dash +names-rodentia-first-female-dataset-21 = Fudge +names-rodentia-first-female-dataset-22 = Noodle +names-rodentia-first-female-dataset-23 = Spud +names-rodentia-first-female-dataset-24 = Muffin +names-rodentia-first-female-dataset-25 = Sprout +names-rodentia-first-female-dataset-26 = Jelly +names-rodentia-first-female-dataset-27 = Fuzz +names-rodentia-first-female-dataset-28 = Cheddar +names-rodentia-first-female-dataset-29 = Tootsie +names-rodentia-first-female-dataset-30 = Pickle +names-rodentia-first-female-dataset-31 = Berry + +# gender-neutral +names-rodentia-first-female-dataset-32 = Alex +names-rodentia-first-female-dataset-33 = Riley +names-rodentia-first-female-dataset-34 = Taylor +names-rodentia-first-female-dataset-35 = Jordan +names-rodentia-first-female-dataset-36 = Casey +names-rodentia-first-female-dataset-37 = Avery +names-rodentia-first-female-dataset-38 = Morgan +names-rodentia-first-female-dataset-39 = Jamie +names-rodentia-first-female-dataset-40 = Quinn +names-rodentia-first-female-dataset-41 = Charlie +names-rodentia-first-female-dataset-42 = Dakota +names-rodentia-first-female-dataset-43 = Sydney +names-rodentia-first-female-dataset-44 = Parker +names-rodentia-first-female-dataset-45 = Cameron +names-rodentia-first-female-dataset-46 = Finley +names-rodentia-first-female-dataset-47 = Robin +names-rodentia-first-female-dataset-48 = Emery +names-rodentia-first-female-dataset-49 = Kendall +names-rodentia-first-female-dataset-50 = Rowan +names-rodentia-first-female-dataset-51 = Sawyer +names-rodentia-first-female-dataset-52 = Bailey +names-rodentia-first-female-dataset-53 = Jaden +names-rodentia-first-female-dataset-54 = Addison +names-rodentia-first-female-dataset-55 = Logan +names-rodentia-first-female-dataset-56 = Devon +names-rodentia-first-female-dataset-57 = Lane +names-rodentia-first-female-dataset-58 = Blair +names-rodentia-first-female-dataset-59 = Drew +names-rodentia-first-female-dataset-60 = Jesse +names-rodentia-first-female-dataset-61 = Skylar +names-rodentia-first-female-dataset-62 = Sam +names-rodentia-first-female-dataset-63 = Reese +names-rodentia-first-female-dataset-64 = Terry +names-rodentia-first-female-dataset-65 = Marley +names-rodentia-first-female-dataset-66 = Elliot +names-rodentia-first-female-dataset-67 = Harper +names-rodentia-first-female-dataset-68 = Jules +names-rodentia-first-female-dataset-69 = Ren +names-rodentia-first-female-dataset-70 = Sloane +names-rodentia-first-female-dataset-71 = Rylan +names-rodentia-first-female-dataset-72 = Sage + +# feminine names +names-rodentia-first-female-dataset-73 = Minnie +names-rodentia-first-female-dataset-74 = Daisy +names-rodentia-first-female-dataset-75 = Bella +names-rodentia-first-female-dataset-76 = Luna +names-rodentia-first-female-dataset-77 = Rosie +names-rodentia-first-female-dataset-78 = Mia +names-rodentia-first-female-dataset-79 = Lily +names-rodentia-first-female-dataset-80 = Chloe +names-rodentia-first-female-dataset-81 = Sophie +names-rodentia-first-female-dataset-82 = Ruby +names-rodentia-first-female-dataset-83 = Zoe +names-rodentia-first-female-dataset-84 = Abby +names-rodentia-first-female-dataset-85 = Ella +names-rodentia-first-female-dataset-86 = Molly +names-rodentia-first-female-dataset-87 = Lucy +names-rodentia-first-female-dataset-88 = Nala +names-rodentia-first-female-dataset-89 = Poppy +names-rodentia-first-female-dataset-90 = Grace +names-rodentia-first-female-dataset-91 = Ivy +names-rodentia-first-female-dataset-92 = Hazel +names-rodentia-first-female-dataset-93 = Emma +names-rodentia-first-female-dataset-94 = Phoebe +names-rodentia-first-female-dataset-95 = Willow +names-rodentia-first-female-dataset-96 = Tilly +names-rodentia-first-female-dataset-97 = Annie +names-rodentia-first-female-dataset-98 = Alice +names-rodentia-first-female-dataset-99 = Holly +names-rodentia-first-female-dataset-100 = Olive +names-rodentia-first-female-dataset-101 = Zoey +names-rodentia-first-female-dataset-102 = Lila +names-rodentia-first-female-dataset-103 = Pippa +names-rodentia-first-female-dataset-104 = June +names-rodentia-first-female-dataset-105 = Mabel +names-rodentia-first-female-dataset-106 = Nellie +names-rodentia-first-female-dataset-107 = Polly +names-rodentia-first-female-dataset-108 = Sadie +names-rodentia-first-female-dataset-109 = Isla + +# "surnames" +names-rodentia-first-female-dataset-110 = Bramblewood +names-rodentia-first-female-dataset-111 = Burrows +names-rodentia-first-female-dataset-112 = Burrowsford +names-rodentia-first-female-dataset-113 = Cheesetail +names-rodentia-first-female-dataset-114 = Cloverfield +names-rodentia-first-female-dataset-115 = Cloverwood +names-rodentia-first-female-dataset-116 = Ferncroft +names-rodentia-first-female-dataset-117 = Flopshire +names-rodentia-first-female-dataset-118 = Flopshire +names-rodentia-first-female-dataset-119 = Fluffbottom +names-rodentia-first-female-dataset-120 = Furrington +names-rodentia-first-female-dataset-121 = Furwell +names-rodentia-first-female-dataset-122 = Furwood +names-rodentia-first-female-dataset-123 = Gnawson +names-rodentia-first-female-dataset-124 = Linden +names-rodentia-first-female-dataset-125 = Little +names-rodentia-first-female-dataset-126 = Maplewood +names-rodentia-first-female-dataset-127 = Meadows +names-rodentia-first-female-dataset-128 = Munchford +names-rodentia-first-female-dataset-129 = Nibblesnout +names-rodentia-first-female-dataset-130 = Nibbleston +names-rodentia-first-female-dataset-131 = Nibblewood +names-rodentia-first-female-dataset-132 = Oakcroft +names-rodentia-first-female-dataset-133 = Oakley +names-rodentia-first-female-dataset-134 = Pawsbrook +names-rodentia-first-female-dataset-135 = Pawsford +names-rodentia-first-female-dataset-136 = Pawsley +names-rodentia-first-female-dataset-137 = Pawswell +names-rodentia-first-female-dataset-138 = Pawsworth +names-rodentia-first-female-dataset-139 = Scamperdale +names-rodentia-first-female-dataset-140 = Scamperford +names-rodentia-first-female-dataset-141 = Scamperley +names-rodentia-first-female-dataset-142 = Scamperwood +names-rodentia-first-female-dataset-143 = Scurryfoot +names-rodentia-first-female-dataset-144 = Scuttleby +names-rodentia-first-female-dataset-145 = Skitters +names-rodentia-first-female-dataset-146 = Stilton +names-rodentia-first-female-dataset-147 = Squeakerton +names-rodentia-first-female-dataset-148 = Squeakson +names-rodentia-first-female-dataset-149 = Squeaktooth +names-rodentia-first-female-dataset-150 = Squeakwell +names-rodentia-first-female-dataset-151 = Squeakwood +names-rodentia-first-female-dataset-152 = Tailsbury +names-rodentia-first-female-dataset-153 = Thumperton +names-rodentia-first-female-dataset-154 = Thumpford +names-rodentia-first-female-dataset-155 = Whiskerby +names-rodentia-first-female-dataset-156 = Whiskerfield +names-rodentia-first-female-dataset-157 = Whiskershire +names-rodentia-first-female-dataset-158 = Whiskersnout +names-rodentia-first-female-dataset-159 = Whiskervale diff --git a/Resources/Locale/en-US/_DEN/datasets/names/rodentia_first_male.ftl b/Resources/Locale/en-US/_DEN/datasets/names/rodentia_first_male.ftl new file mode 100644 index 0000000000..ee49397d8e --- /dev/null +++ b/Resources/Locale/en-US/_DEN/datasets/names/rodentia_first_male.ftl @@ -0,0 +1,183 @@ +# generic names +names-rodentia-first-male-dataset-1 = Squeaks +names-rodentia-first-male-dataset-2 = Squeaker +names-rodentia-first-male-dataset-3 = Nibbles +names-rodentia-first-male-dataset-4 = Pebbles +names-rodentia-first-male-dataset-5 = Peanut +names-rodentia-first-male-dataset-6 = Pinky +names-rodentia-first-male-dataset-7 = Gadget +names-rodentia-first-male-dataset-8 = Scurry +names-rodentia-first-male-dataset-9 = Scamper +names-rodentia-first-male-dataset-10 = Chitters +names-rodentia-first-male-dataset-11 = Quill +names-rodentia-first-male-dataset-12 = Whiskers +names-rodentia-first-male-dataset-13 = Wiggles +names-rodentia-first-male-dataset-14 = Button +names-rodentia-first-male-dataset-15 = Sniffles +names-rodentia-first-male-dataset-16 = Chip +names-rodentia-first-male-dataset-17 = Pipsqueak +names-rodentia-first-male-dataset-18 = Nugget +names-rodentia-first-male-dataset-19 = Comet +names-rodentia-first-male-dataset-20 = Dash +names-rodentia-first-male-dataset-21 = Fudge +names-rodentia-first-male-dataset-22 = Noodle +names-rodentia-first-male-dataset-23 = Spud +names-rodentia-first-male-dataset-24 = Muffin +names-rodentia-first-male-dataset-25 = Sprout +names-rodentia-first-male-dataset-26 = Jelly +names-rodentia-first-male-dataset-27 = Fuzz +names-rodentia-first-male-dataset-28 = Cheddar +names-rodentia-first-male-dataset-29 = Tootsie +names-rodentia-first-male-dataset-30 = Pickle +names-rodentia-first-male-dataset-31 = Berry + +# gender-neutral +names-rodentia-first-male-dataset-32 = Alex +names-rodentia-first-male-dataset-33 = Riley +names-rodentia-first-male-dataset-34 = Taylor +names-rodentia-first-male-dataset-35 = Jordan +names-rodentia-first-male-dataset-36 = Casey +names-rodentia-first-male-dataset-37 = Avery +names-rodentia-first-male-dataset-38 = Morgan +names-rodentia-first-male-dataset-39 = Jamie +names-rodentia-first-male-dataset-40 = Quinn +names-rodentia-first-male-dataset-41 = Charlie +names-rodentia-first-male-dataset-42 = Dakota +names-rodentia-first-male-dataset-43 = Sydney +names-rodentia-first-male-dataset-44 = Parker +names-rodentia-first-male-dataset-45 = Cameron +names-rodentia-first-male-dataset-46 = Finley +names-rodentia-first-male-dataset-47 = Robin +names-rodentia-first-male-dataset-48 = Emery +names-rodentia-first-male-dataset-49 = Kendall +names-rodentia-first-male-dataset-50 = Rowan +names-rodentia-first-male-dataset-51 = Sawyer +names-rodentia-first-male-dataset-52 = Bailey +names-rodentia-first-male-dataset-53 = Jaden +names-rodentia-first-male-dataset-54 = Addison +names-rodentia-first-male-dataset-55 = Logan +names-rodentia-first-male-dataset-56 = Devon +names-rodentia-first-male-dataset-57 = Lane +names-rodentia-first-male-dataset-58 = Blair +names-rodentia-first-male-dataset-59 = Drew +names-rodentia-first-male-dataset-60 = Jesse +names-rodentia-first-male-dataset-61 = Skylar +names-rodentia-first-male-dataset-62 = Sam +names-rodentia-first-male-dataset-63 = Reese +names-rodentia-first-male-dataset-64 = Terry +names-rodentia-first-male-dataset-65 = Marley +names-rodentia-first-male-dataset-66 = Elliot +names-rodentia-first-male-dataset-67 = Harper +names-rodentia-first-male-dataset-68 = Jules +names-rodentia-first-male-dataset-69 = Ren +names-rodentia-first-male-dataset-70 = Sloane +names-rodentia-first-male-dataset-71 = Rylan +names-rodentia-first-male-dataset-72 = Sage + +# masculine names +names-rodentia-first-male-dataset-73 = Basil +names-rodentia-first-male-dataset-74 = Jerry +names-rodentia-first-male-dataset-75 = Stuart +names-rodentia-first-male-dataset-76 = Bert +names-rodentia-first-male-dataset-77 = Jack +names-rodentia-first-male-dataset-78 = Remy +names-rodentia-first-male-dataset-79 = Geronimo +names-rodentia-first-male-dataset-80 = Dale +names-rodentia-first-male-dataset-81 = Flint +names-rodentia-first-male-dataset-82 = Quincy +names-rodentia-first-male-dataset-83 = Oliver +names-rodentia-first-male-dataset-84 = Max +names-rodentia-first-male-dataset-85 = Leo +names-rodentia-first-male-dataset-86 = Milo +names-rodentia-first-male-dataset-87 = Teddy +names-rodentia-first-male-dataset-88 = Finn +names-rodentia-first-male-dataset-89 = Jasper +names-rodentia-first-male-dataset-90 = Simon +names-rodentia-first-male-dataset-91 = Louie +names-rodentia-first-male-dataset-92 = Toby +names-rodentia-first-male-dataset-93 = Henry +names-rodentia-first-male-dataset-94 = Oscar +names-rodentia-first-male-dataset-95 = Felix +names-rodentia-first-male-dataset-96 = George +names-rodentia-first-male-dataset-97 = Archie +names-rodentia-first-male-dataset-98 = Hugo +names-rodentia-first-male-dataset-99 = Benny +names-rodentia-first-male-dataset-100 = Eli +names-rodentia-first-male-dataset-101 = Lucas +names-rodentia-first-male-dataset-102 = Rufus +names-rodentia-first-male-dataset-103 = Gus +names-rodentia-first-male-dataset-104 = Alfie +names-rodentia-first-male-dataset-105 = Monty +names-rodentia-first-male-dataset-106 = Clyde +names-rodentia-first-male-dataset-107 = Cosmo +names-rodentia-first-male-dataset-108 = Ziggy +names-rodentia-first-male-dataset-109 = Freddie +names-rodentia-first-male-dataset-110 = Chester +names-rodentia-first-male-dataset-111 = Rocco +names-rodentia-first-male-dataset-112 = Perry +names-rodentia-first-male-dataset-113 = Mickey +names-rodentia-first-male-dataset-114 = Tim +names-rodentia-first-male-dataset-115 = Chuck +names-rodentia-first-male-dataset-116 = Frankie +names-rodentia-first-male-dataset-117 = Willie +names-rodentia-first-male-dataset-118 = Alvin +names-rodentia-first-male-dataset-119 = Vinny +names-rodentia-first-male-dataset-120 = Harvey +names-rodentia-first-male-dataset-121 = Rudy +names-rodentia-first-male-dataset-122 = Ollie +names-rodentia-first-male-dataset-123 = Percy +names-rodentia-first-male-dataset-124 = Theo +names-rodentia-first-male-dataset-125 = Winston +names-rodentia-first-male-dataset-126 = Ernie + +# "surnames" +names-rodentia-first-male-dataset-127 = Bramblewood +names-rodentia-first-male-dataset-128 = Burrows +names-rodentia-first-male-dataset-129 = Burrowsford +names-rodentia-first-male-dataset-130 = Cheesetail +names-rodentia-first-male-dataset-131 = Cloverfield +names-rodentia-first-male-dataset-132 = Cloverwood +names-rodentia-first-male-dataset-133 = Ferncroft +names-rodentia-first-male-dataset-134 = Flopshire +names-rodentia-first-male-dataset-135 = Flopshire +names-rodentia-first-male-dataset-136 = Fluffbottom +names-rodentia-first-male-dataset-137 = Furrington +names-rodentia-first-male-dataset-138 = Furwell +names-rodentia-first-male-dataset-139 = Furwood +names-rodentia-first-male-dataset-140 = Gnawson +names-rodentia-first-male-dataset-141 = Linden +names-rodentia-first-male-dataset-142 = Little +names-rodentia-first-male-dataset-143 = Maplewood +names-rodentia-first-male-dataset-144 = Meadows +names-rodentia-first-male-dataset-145 = Munchford +names-rodentia-first-male-dataset-146 = Nibblesnout +names-rodentia-first-male-dataset-147 = Nibbleston +names-rodentia-first-male-dataset-148 = Nibblewood +names-rodentia-first-male-dataset-149 = Oakcroft +names-rodentia-first-male-dataset-150 = Oakley +names-rodentia-first-male-dataset-151 = Pawsbrook +names-rodentia-first-male-dataset-152 = Pawsford +names-rodentia-first-male-dataset-153 = Pawsley +names-rodentia-first-male-dataset-154 = Pawswell +names-rodentia-first-male-dataset-155 = Pawsworth +names-rodentia-first-male-dataset-156 = Scamperdale +names-rodentia-first-male-dataset-157 = Scamperford +names-rodentia-first-male-dataset-158 = Scamperley +names-rodentia-first-male-dataset-159 = Scamperwood +names-rodentia-first-male-dataset-160 = Scurryfoot +names-rodentia-first-male-dataset-161 = Scuttleby +names-rodentia-first-male-dataset-162 = Skitters +names-rodentia-first-male-dataset-163 = Stilton +names-rodentia-first-male-dataset-164 = Squeakerton +names-rodentia-first-male-dataset-165 = Squeakson +names-rodentia-first-male-dataset-166 = Squeaktooth +names-rodentia-first-male-dataset-167 = Squeakwell +names-rodentia-first-male-dataset-168 = Squeakwood +names-rodentia-first-male-dataset-169 = Tailsbury +names-rodentia-first-male-dataset-170 = Thumperton +names-rodentia-first-male-dataset-171 = Thumpford +names-rodentia-first-male-dataset-172 = Whiskerby +names-rodentia-first-male-dataset-173 = Whiskerfield +names-rodentia-first-male-dataset-174 = Whiskershire +names-rodentia-first-male-dataset-175 = Whiskersnout +names-rodentia-first-male-dataset-176 = Whiskervale diff --git a/Resources/Locale/en-US/_DEN/datasets/names/rodentia_last.ftl b/Resources/Locale/en-US/_DEN/datasets/names/rodentia_last.ftl new file mode 100644 index 0000000000..6e04828aeb --- /dev/null +++ b/Resources/Locale/en-US/_DEN/datasets/names/rodentia_last.ftl @@ -0,0 +1,86 @@ +names-rodentia-last-dataset-1 = Agile +names-rodentia-last-dataset-2 = Beady-eyed +names-rodentia-last-dataset-3 = Berry-picking +names-rodentia-last-dataset-4 = Big +names-rodentia-last-dataset-5 = Big-ears +names-rodentia-last-dataset-6 = Big-eyed +names-rodentia-last-dataset-7 = Big-heart +names-rodentia-last-dataset-8 = Big-nose +names-rodentia-last-dataset-9 = Blunt-nose +names-rodentia-last-dataset-10 = Brave +names-rodentia-last-dataset-11 = Break-neck +names-rodentia-last-dataset-12 = Bright +names-rodentia-last-dataset-13 = Bright-eyed +names-rodentia-last-dataset-14 = Cheeky +names-rodentia-last-dataset-15 = Crafty +names-rodentia-last-dataset-16 = Cunning +names-rodentia-last-dataset-17 = Curious +names-rodentia-last-dataset-18 = Day-sleeping +names-rodentia-last-dataset-19 = Eager +names-rodentia-last-dataset-20 = Fast-moving +names-rodentia-last-dataset-21 = Fast-paws +names-rodentia-last-dataset-22 = Fat +names-rodentia-last-dataset-23 = Fidgety +names-rodentia-last-dataset-24 = Food-stealing +names-rodentia-last-dataset-25 = Gentle +names-rodentia-last-dataset-26 = Great +names-rodentia-last-dataset-27 = Greedy +names-rodentia-last-dataset-28 = Grumpy +names-rodentia-last-dataset-29 = Hasty +names-rodentia-last-dataset-30 = High-jumping +names-rodentia-last-dataset-31 = Jumpy +names-rodentia-last-dataset-32 = Keen +names-rodentia-last-dataset-33 = Keen-eyes +names-rodentia-last-dataset-34 = Light-foot +names-rodentia-last-dataset-35 = Little +names-rodentia-last-dataset-36 = Long +names-rodentia-last-dataset-37 = Long-ears +names-rodentia-last-dataset-38 = Long-legged +names-rodentia-last-dataset-39 = Long-snout +names-rodentia-last-dataset-40 = Long-tail +names-rodentia-last-dataset-41 = Long-tooth +names-rodentia-last-dataset-42 = Night-hunting +names-rodentia-last-dataset-43 = Nimble +names-rodentia-last-dataset-44 = No-eyes +names-rodentia-last-dataset-45 = No-tail +names-rodentia-last-dataset-46 = Nosy +names-rodentia-last-dataset-47 = Quick-footed +names-rodentia-last-dataset-48 = Quick-wits +names-rodentia-last-dataset-49 = Quiet +names-rodentia-last-dataset-50 = Ravenous +names-rodentia-last-dataset-51 = Restless +names-rodentia-last-dataset-52 = Rough +names-rodentia-last-dataset-53 = Round-belly +names-rodentia-last-dataset-54 = Rowdy +names-rodentia-last-dataset-55 = Seed-stashing +names-rodentia-last-dataset-56 = Shadow-dwelling +names-rodentia-last-dataset-57 = Sharp +names-rodentia-last-dataset-58 = Sharp-clawed +names-rodentia-last-dataset-59 = Shifty +names-rodentia-last-dataset-60 = Shiny-eyes +names-rodentia-last-dataset-61 = Short-ears +names-rodentia-last-dataset-62 = Short-legged +names-rodentia-last-dataset-63 = Short-snout +names-rodentia-last-dataset-64 = Short-tail +names-rodentia-last-dataset-65 = Shy +names-rodentia-last-dataset-66 = Silent +names-rodentia-last-dataset-67 = Silver-tongue +names-rodentia-last-dataset-68 = Skittish +names-rodentia-last-dataset-69 = Small-ears +names-rodentia-last-dataset-70 = Small-nose +names-rodentia-last-dataset-71 = Sneaky +names-rodentia-last-dataset-72 = Soft-fur +names-rodentia-last-dataset-73 = Soft-paws +names-rodentia-last-dataset-74 = Squeaking +names-rodentia-last-dataset-75 = Squeaky +names-rodentia-last-dataset-76 = Stout +names-rodentia-last-dataset-77 = Stubborn +names-rodentia-last-dataset-78 = Stubby +names-rodentia-last-dataset-79 = Sweet +names-rodentia-last-dataset-80 = Swift +names-rodentia-last-dataset-81 = Thick-fur +names-rodentia-last-dataset-82 = Thick-skin +names-rodentia-last-dataset-83 = Thieving +names-rodentia-last-dataset-84 = Trash-eating +names-rodentia-last-dataset-85 = Tunnel-building +names-rodentia-last-dataset-86 = Whisker-twitching diff --git a/Resources/Prototypes/_DEN/Datasets/Names/rodentia.yml b/Resources/Prototypes/_DEN/Datasets/Names/rodentia.yml new file mode 100644 index 0000000000..a7a8ecd7d9 --- /dev/null +++ b/Resources/Prototypes/_DEN/Datasets/Names/rodentia.yml @@ -0,0 +1,30 @@ +# Rodentia have a name scheme of "LastName FirstName", because first names are gendered here. +# +# "Last names" are more like adjective titles, which makes names sound like animal xenofiction characters, or mobsters. +# By "animal xenofiction", think, like, Warrior Cats, or Redwall, or Watership Down. +# ("Stout", "Light-foot", "Gentle", "Cunning", "Brave", "Quick-wits", "Shiny-eyes") +# +# First names are more "standard", with emphasis on: +# - Names you'd give pets, especially pet rodents (Nibbles, Pipsqueak, Spud) +# - "Standard" first names with a "sentient woodland animal" or "mobster" feel (Rowan, Willow, Louie, Frankie) +# - What I can only describe as "rodent-themed British village names" (Furwell, Oakley, Squeakwood) +# +# Examples: "Stubborn Stanley", "Fat Louie", "Long-tail Nellie", "Big Cheddar", "Hasty Nibbleston" + +- type: localizedDataset + id: NamesRodentiaFirstMale + values: + prefix: names-rodentia-first-male-dataset- + count: 176 + +- type: localizedDataset + id: NamesRodentiaFirstFemale + values: + prefix: names-rodentia-first-female-dataset- + count: 159 + +- type: localizedDataset + id: NamesRodentiaLast + values: + prefix: names-rodentia-last-dataset- + count: 86 diff --git a/Resources/Prototypes/_DEN/Species/rodentia.yml b/Resources/Prototypes/_DEN/Species/rodentia.yml index 9f92b9b4d6..ac9d1e7f1e 100644 --- a/Resources/Prototypes/_DEN/Species/rodentia.yml +++ b/Resources/Prototypes/_DEN/Species/rodentia.yml @@ -6,6 +6,6 @@ dollPrototype: AppearanceRodentia defaultSkinTone: "#747474" skinColoration: Hues - maleFirstNames: NamesRodentiaFirstMale # TODO - femaleFirstNames: NamesRodentiaFirstFemale # TODO - lastNames: NamesRodentiaLast # TODO + maleFirstNames: NamesRodentiaFirstMale + femaleFirstNames: NamesRodentiaFirstFemale + lastNames: NamesRodentiaLast From 4e789261bed12c43f380a6c62f95fe78bb2eae7c Mon Sep 17 00:00:00 2001 From: portfiend <109661617+portfiend@users.noreply.github.com> Date: Thu, 25 Jun 2026 11:07:45 -0500 Subject: [PATCH 06/26] allow rodentia to use hair --- Resources/Prototypes/_DEN/Body/Species/rodentia.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/Resources/Prototypes/_DEN/Body/Species/rodentia.yml b/Resources/Prototypes/_DEN/Body/Species/rodentia.yml index 216c15305b..d482f44032 100644 --- a/Resources/Prototypes/_DEN/Body/Species/rodentia.yml +++ b/Resources/Prototypes/_DEN/Body/Species/rodentia.yml @@ -1,7 +1,6 @@ - type: markingsGroup parent: Undergarments id: Rodentia - onlyGroupWhitelisted: true limits: enum.HumanoidVisualLayers.Hair: limit: 1 From 446b9769a23e1256f9656c9744797f9b690eb7d7 Mon Sep 17 00:00:00 2001 From: portfiend <109661617+portfiend@users.noreply.github.com> Date: Thu, 25 Jun 2026 11:10:22 -0500 Subject: [PATCH 07/26] i take penis out --- .../Rodentia/parts.rsi/torso_f.png | Bin 783 -> 784 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/Resources/Textures/_DEN/Mobs/Customization/Rodentia/parts.rsi/torso_f.png b/Resources/Textures/_DEN/Mobs/Customization/Rodentia/parts.rsi/torso_f.png index 0e1ea21acce88725ba9ff06d5729706ffb8408df..b6c4d9ae9fbedf06e15bdd2e7bb0366da484fef3 100755 GIT binary patch delta 747 zcmVUMnKAN9$b29c%R>KXG#)J;0fHb1f*=UO?_@+7 zT$bfK04$eFIOjsYQVMll0|2V3BF)LsFNy+>kB@kHdBI|_z<+MHL)*4_^~!o z?fLmRw7B0JnM*&V8TV23|4;@Wk4H?WQvkqXu}FTOljHH2)b)KF{V`>*wKj;Pp4M8j z0bKndTz!%QoO9T2x50?rZWqM2+wECi$bp~#vrXXW-+gsp(=^q5KL7jh@PO0lg#CUG zV+^{k!|8Owcz--b+qT(~kk_9~Cb+-9$J^T*0EB1Pbu4{S1OPzWwy5hG#uxyAF$Q&A zhb){MW6VXUTWfA4j0p`mFEi=?T`_a1`dmS_`dpNXBtL2XX{xt&=-2bV_c9 zzke=d2c#C8a!O9TmS6le+GGbf=aLbS`vi!I9e!=}k$)Xvj5%|HUpzMnQSsVZYjj-~ zoWb1yauW2!39l#$?lfeSQgF_}Id^vQD5Y5Qk<@8gY|ly zJqfPY>rvA*XB*%*gmXuUJYMf;Yr@hh-)ES2qVU7P<7HVA?s d2!iml`3L;nS$$|hcR&CD002ovPDHLkV1llYVle;! delta 746 zcmVTTrI6B6%gMC=FZ_Tg&1^%EiqpGU3`gxw8UteEC zdwO~bt=;d9Or;;wZ1++1e^Uk@k4KC~BLKj3I*opwlH>6h)%ATG{UK$rwKj;vp4M8j z0bKnqTz!%QoO9UicEO1KejmhlyWK@zNP(aKqfOxG|GITxS(cl}$Hzaj*$k)C3D3{Z zFvg&+Yn)Ce41b41R8^HM33>g8hX+h16TH2>0YG@xbbiz=4oWH3eB?9xv)|e&{|J2*eL)ZeK@bE%5ClOG z1VQ*|B|0|8P zYxJYh=zqe1EX#Tsa|>;at__^x2rB}*7bH9{FE5otwmXuSg+T~ zli+&29+YKyu>pQVIHh`$1KL^MS{s_y`Yz$`X__W1+P9dEx4_!5Shl}+ZT>6RAP9mW c2*UT~FO95M%n*fE)Bpeg07*qoM6N<$g0-+~DF6Tf From 723dc9aee1c8271f4d90e711ac6f02a84ba89ef1 Mon Sep 17 00:00:00 2001 From: portfiend <109661617+portfiend@users.noreply.github.com> Date: Thu, 25 Jun 2026 11:23:11 -0500 Subject: [PATCH 08/26] allow detritivores to digest mold and gastrotoxin --- Resources/Prototypes/Reagents/toxins.yml | 34 +++++++++++++++++++++--- 1 file changed, 30 insertions(+), 4 deletions(-) diff --git a/Resources/Prototypes/Reagents/toxins.yml b/Resources/Prototypes/Reagents/toxins.yml index 670baa829b..3fdda2c57d 100644 --- a/Resources/Prototypes/Reagents/toxins.yml +++ b/Resources/Prototypes/Reagents/toxins.yml @@ -93,6 +93,10 @@ Bloodstream: effects: - !type:HealthChange + conditions: # DEN: Detritivore metabolism + - !type:MetabolizerTypeCondition + type: [ Detritivore ] + inverted: true damage: types: Poison: 2 @@ -101,7 +105,16 @@ - !type:ReagentCondition reagent: GastroToxin min: 2 + - !type:MetabolizerTypeCondition # DEN: Detritivore metabolism + type: [ Detritivore ] + inverted: true probability: 0.2 + Digestion: # DEN: Detritivores can digest gastrotoxin. + effects: + - !type:SatiateHunger + conditions: + - !type:MetabolizerTypeCondition + type: [Detritivore] - type: reagent id: Mold @@ -116,9 +129,19 @@ Bloodstream: effects: - !type:HealthChange + conditions: # DEN: Detritivore metabolism + - !type:MetabolizerTypeCondition + type: [ Detritivore ] + inverted: true damage: types: Poison: 1 + Digestion: # DEN: Detritivores can digest mold. + effects: + - !type:SatiateHunger + conditions: + - !type:MetabolizerTypeCondition + type: [Detritivore] - type: reagent id: PolytrinicAcid @@ -488,7 +511,7 @@ - !type:PopupMessage conditions: - !type:MetabolizerTypeCondition - type: [ Animal, Vox ] + type: [ Animal, Vox, Detritivore ] # DEN: Add Detritivore inverted: true type: Local visualType: MediumCaution @@ -498,12 +521,12 @@ probability: 0.1 conditions: - !type:MetabolizerTypeCondition - type: [ Animal, Vox, Plant ] + type: [ Animal, Vox, Plant, Detritivore ] # DEN: Add Detritivore inverted: true - !type:HealthChange conditions: - !type:MetabolizerTypeCondition - type: [ Animal, Vox, Plant ] + type: [ Animal, Vox, Plant, Detritivore ] # DEN: Add Detritivore inverted: true damage: types: @@ -518,13 +541,16 @@ - !type:AdjustReagent conditions: - !type:MetabolizerTypeCondition - type: [ Animal ] + type: [ Animal, Detritivore ] # DEN: Add Detritivore reagent: Protein amount: 0.5 - !type:AdjustReagent conditions: - !type:MetabolizerTypeCondition type: [ Vox ] + - !type:MetabolizerTypeCondition # DEN: Prevent redundant metabolism for detritivore vox + type: [ Detritivore ] + inverted: true reagent: Protein amount: 0.25 From 8717b2cf00cb3593dae37c95291af301e776554b Mon Sep 17 00:00:00 2001 From: portfiend <109661617+portfiend@users.noreply.github.com> Date: Fri, 26 Jun 2026 13:21:08 -0500 Subject: [PATCH 09/26] ok i give them navels --- .../Customization/Rodentia/parts.rsi/full.png | Bin 770 -> 781 bytes .../Rodentia/parts.rsi/torso_f.png | Bin 784 -> 788 bytes .../Rodentia/parts.rsi/torso_m.png | Bin 733 -> 740 bytes 3 files changed, 0 insertions(+), 0 deletions(-) diff --git a/Resources/Textures/_DEN/Mobs/Customization/Rodentia/parts.rsi/full.png b/Resources/Textures/_DEN/Mobs/Customization/Rodentia/parts.rsi/full.png index 10197899efa9b93371d5009fad671014bce4f7c5..fe76b69c1815da47c4c4d952aae42ff3ed33c731 100755 GIT binary patch delta 744 zcmV{eh9Kf9E?#ImHV0-)dTvsf(X_xpSG zZPf}uO4&)01b?LzT5E(5XsuC7kt7LH%2wXD2B<>_Apj6UTx^`SS)i0E0jAR_TI;HQ zI-QavN$CLF%z3i2I|13{{o~_f^;{H1b?^Irb^rYQ%+1YBHSf2agi5J0iXyDFdq&;m zWUVENqAF5NbQWN{-ImS^rBnrRtaOx)045bv~@p#Yk@pz0gkysyih3!djyX<8qDF+g4S_xBiM5JDiO+-s9kB7|sUuoZx{mORfHjYfQaemW12 zMnFo5=YM$=MNy7MBl0}o%bJS->I%aUV@zcXV6j-hE&@s^j4^~^*mTNv0BM@SZl}8l zxJ~BvK)qj6oji(t-|wVpTDp6sR2c-pf#+Ilf*>HvvV$?_0M16h_x;YXiQGT`=V3hj?-6L*el@_q(2oN&{v<1kq6EnE z9IZ9hTBMX%Yk7Zv#~6dP7He(UGzA+26h%>nVYv4lcuWru4+tSh)3h-};|QEOV%^Wl aCHezj4V*k;1b18j0000YU4l@Mvs>zWegf(rgx!2O$v7b8}~xsN^cO* z69w`TGQv+FNEb+Dfe0=QL(B|}A&nYslMzzZn@CP}_X9D~{M~c!%pFPapEc^!>F(|h zfX!x8ySgw8o3VeY@1q}mJ8m|cdOn{spU+RWyS6sWw*ffg$A9CI-EId!RaLdS0Cu|_ z$K!D@#LpqLhr@xZt1E&aAdcfs+sn%fhr@x(%gZ5C_KQFmhNC>s+3)vECX?Tc$8pSL zGGV{pljr%Meb9RkgkdO18yfGo@4ZKwZf548LB)rUv1@B5=H z%W8M8l&XUuV7uKy%X6(YK@gDV`EO%B1NbxozVDAtP2_gEEBlN&3!p8}^Wg0bNbB9< zo?ZJ84FY(dX7As8-=2o=^_hqNJOV@8zYOp<^j6;idVi9YWmy9hMS<2DYb{brthGEp zKVyu+T8p)|?wf+W0m`zhqbTZp2cFW+%?&~bvMlQj(K`Yk9kK4`29ySnF@MfUL_t(|ob8%1ZYnVlhJVPb(jcv+$Zaa5_y!bv2TG2RiX-gX z6YU8Q+AXNlY(Yt9A$cV#L_=N^TV~lvnL*|y%6yWw!dU*t91e#;UEjyiA5#WfYlFzp(^^Y5 zfUDn!t50%(a}MkEIvBCpY=ZcDy}rl`De&`uwh0{lhp!H->$-e?e*XLN@`CgEjNNVr zV+`81#rb^3cz--b(=^GFkk@~Fe8kh!6HccS0EB1Twk&;81OPzOG^nZy#uxyAF$Pst zg)E#JW6V{kTWfA4j0p`l9dk^%d6Ia1^G*S_`dpNXBtL2XX{xtp|6Y@08T^ z-+wM-2gHkQ+ZOo5DJk(z-KnBR;#N!0?BO{TKv78FtqqvoItJ%#Kh$( z?%&cJlz&qHuQV3d=qHoOg#q`d55yXM8#u)gRs{4fNO<=9J!d)+eU12%1_yR!2p?rK zUm#6+IU;7USd5CIc=wTTYe|k30dY0f7z1Mr@;t}Al3Z(&1ck2au9Dp?_h=Ky4p2&c+X&zs#bgImRdp2s)>_nc zjpcHgJP9tB%TZm|7aQO=gmXuU delta 747 zcmVUMnKAN9$b29c%R>KXG#)J;0fHb1f*=UO?_@+7 zT$bfK04$eFIOjsYQVMll0|2V3BF)LsFNy+>kB@kHdBI|_z<+MHL)*4_^~!o z?fLmRw7B0JnM*&V8TV23|4;@Wk4H?WQvkqXu}FTOljHH2)b)KF{V`>*wKj;Pp4M8j z0bKndTz!%QoO9T2x50?rZWqM2+wECi$bp~#vrXXW-+gsp(=^q5KL7jh@PO0lg#CUG zV+^{k!|8Owcz--b+qT(~kk_9~Cb+-9$J^T*0EB1Pbu4{S1OPzWwy5hG#uxyAF$Q&A zhb){MW6VXUTWfA4j0p`mFEi=?T`_a1`dmS_`dpNXBtL2XX{xt&=-2bV_c9 zzke=d2c#C8a!O9TmS6le+GGbf=aLbS`vi!I9e!=}k$)Xvj5%|HUpzMnQSsVZYjj-~ zoWb1yauW2!39l#$?lfeSQgF_}Id^vQD5Y5Qk<@8gY|ly zJqfPY>rvA*XB*%*gmXuUJYMf;Yr@hh-)ES2qVU7P<7HVA?s d2!iml`3L;nS$$|hcR&CD002ovPDHLkV1m6TVm1H( diff --git a/Resources/Textures/_DEN/Mobs/Customization/Rodentia/parts.rsi/torso_m.png b/Resources/Textures/_DEN/Mobs/Customization/Rodentia/parts.rsi/torso_m.png index 5286c3b9383376ec975bdb1726edf1e554bc1e5b..fa9e2a1737358749380021db60dc6f64777a5e5f 100755 GIT binary patch delta 703 zcmV;w0zm!U1>^;gF@K&(L_t(|ob8%1j;k;bhW~wfJrZtw0~B$C6x@N6&-^xsF(3$nAP9mW{7yc69T|s#UuSIYiM<}H>3gGK;9D|&AmNZR4M9^9< zi!nn)K?(3yfY#cX0j+g(1=s;z&;ND%vv>ty9LHs_nCBg41rX6L3cwt2ScB*5=nBBR z(y~FGcf1C~h68M?&`wBn1z;Yu9RwbH=py6`+tylR7=MN(7@-O94gka7{(RmGr4)=Y z%WH2K1{hHn+4ad5bvgdbq0(v(f0?i59{e>CnTx@FlYK*6%g_&_6|T@*Bb>8 z5xTC!>2!)-ojsjSA6?gdO8_S%q*U(}0K5E5L^#W#wcbVk%s7tAp!sn5_zXcAbA4{^ lU7LRg9|S=V1VQ+}`2svWTzJQ{nrZ+5002ovPDHLkV1kRuMic-5 delta 696 zcmV;p0!RJi1>FUZF@KjyL_t(|ob8%1j;k;bhW~wfJ(At{1}NeNDYyeC;Rq-vf(uYU zkva{E_6BZji7Mr8lR;i^o?=HvdD{6T6a^#yPt@R?}`_)l*PDYY5XTBB{-+q4s()#%VT^$gB4oNKilXr9`<(I&K}FD73n}F$1L(iCHp+-+5kf#~4W-ml zj0vrEQ~-iAKq=*ofKn=X2DlDh-~a3JX9;qEwRTyo3pr(v48Yyta28MhlV7=~dOhG7_nVHoDO(KOAbKi~I#vV8%MZ0P%bvqvDg z4Zg+i?F8TAUvWb8XK}3BQ?Z|=V~|pMTVpXqb%x;V79j(!*Xv7$gg{zr8)BLxQ5oR# z{^4+lnSUw@SL@YG2<{I1*sC{4`1+GXXoEDkI}E2AOZaw-q-L#2Hib4wqcXs^M?gxs z%MKAC#HQf79pc?GU>yNtO!EB!WW)M)a|4nz18|S@yJkSlqd3?BZQE`#Kx>U*7*N-B z^6qS1*B`?${0IOAB&Jm# Date: Fri, 26 Jun 2026 13:22:14 -0500 Subject: [PATCH 10/26] oops --- Resources/Prototypes/_DEN/Body/Species/rodentia.yml | 2 +- .../Rodentia/parts.rsi/full.png | Bin .../Rodentia/parts.rsi/head_f.png | Bin .../Rodentia/parts.rsi/head_m.png | Bin .../Rodentia/parts.rsi/l_arm.png | Bin .../Rodentia/parts.rsi/l_foot.png | Bin .../Rodentia/parts.rsi/l_hand.png | Bin .../Rodentia/parts.rsi/l_leg.png | Bin .../Rodentia/parts.rsi/meta.json | 0 .../Rodentia/parts.rsi/r_arm.png | Bin .../Rodentia/parts.rsi/r_foot.png | Bin .../Rodentia/parts.rsi/r_hand.png | Bin .../Rodentia/parts.rsi/r_leg.png | Bin .../Rodentia/parts.rsi/torso_f.png | Bin .../Rodentia/parts.rsi/torso_m.png | Bin 15 files changed, 1 insertion(+), 1 deletion(-) rename Resources/Textures/_DEN/Mobs/{Customization => Species}/Rodentia/parts.rsi/full.png (100%) rename Resources/Textures/_DEN/Mobs/{Customization => Species}/Rodentia/parts.rsi/head_f.png (100%) rename Resources/Textures/_DEN/Mobs/{Customization => Species}/Rodentia/parts.rsi/head_m.png (100%) rename Resources/Textures/_DEN/Mobs/{Customization => Species}/Rodentia/parts.rsi/l_arm.png (100%) rename Resources/Textures/_DEN/Mobs/{Customization => Species}/Rodentia/parts.rsi/l_foot.png (100%) rename Resources/Textures/_DEN/Mobs/{Customization => Species}/Rodentia/parts.rsi/l_hand.png (100%) rename Resources/Textures/_DEN/Mobs/{Customization => Species}/Rodentia/parts.rsi/l_leg.png (100%) rename Resources/Textures/_DEN/Mobs/{Customization => Species}/Rodentia/parts.rsi/meta.json (100%) rename Resources/Textures/_DEN/Mobs/{Customization => Species}/Rodentia/parts.rsi/r_arm.png (100%) rename Resources/Textures/_DEN/Mobs/{Customization => Species}/Rodentia/parts.rsi/r_foot.png (100%) rename Resources/Textures/_DEN/Mobs/{Customization => Species}/Rodentia/parts.rsi/r_hand.png (100%) rename Resources/Textures/_DEN/Mobs/{Customization => Species}/Rodentia/parts.rsi/r_leg.png (100%) rename Resources/Textures/_DEN/Mobs/{Customization => Species}/Rodentia/parts.rsi/torso_f.png (100%) rename Resources/Textures/_DEN/Mobs/{Customization => Species}/Rodentia/parts.rsi/torso_m.png (100%) diff --git a/Resources/Prototypes/_DEN/Body/Species/rodentia.yml b/Resources/Prototypes/_DEN/Body/Species/rodentia.yml index d482f44032..6072ea13fc 100644 --- a/Resources/Prototypes/_DEN/Body/Species/rodentia.yml +++ b/Resources/Prototypes/_DEN/Body/Species/rodentia.yml @@ -117,7 +117,7 @@ components: - type: VisualOrgan data: - sprite: &rodentiaSprite _DEN/Mobs/Customization/Rodentia/parts.rsi + sprite: &rodentiaSprite _DEN/Mobs/Species/Rodentia/parts.rsi - type: VisualOrganMarkings markingData: group: Rodentia diff --git a/Resources/Textures/_DEN/Mobs/Customization/Rodentia/parts.rsi/full.png b/Resources/Textures/_DEN/Mobs/Species/Rodentia/parts.rsi/full.png similarity index 100% rename from Resources/Textures/_DEN/Mobs/Customization/Rodentia/parts.rsi/full.png rename to Resources/Textures/_DEN/Mobs/Species/Rodentia/parts.rsi/full.png diff --git a/Resources/Textures/_DEN/Mobs/Customization/Rodentia/parts.rsi/head_f.png b/Resources/Textures/_DEN/Mobs/Species/Rodentia/parts.rsi/head_f.png similarity index 100% rename from Resources/Textures/_DEN/Mobs/Customization/Rodentia/parts.rsi/head_f.png rename to Resources/Textures/_DEN/Mobs/Species/Rodentia/parts.rsi/head_f.png diff --git a/Resources/Textures/_DEN/Mobs/Customization/Rodentia/parts.rsi/head_m.png b/Resources/Textures/_DEN/Mobs/Species/Rodentia/parts.rsi/head_m.png similarity index 100% rename from Resources/Textures/_DEN/Mobs/Customization/Rodentia/parts.rsi/head_m.png rename to Resources/Textures/_DEN/Mobs/Species/Rodentia/parts.rsi/head_m.png diff --git a/Resources/Textures/_DEN/Mobs/Customization/Rodentia/parts.rsi/l_arm.png b/Resources/Textures/_DEN/Mobs/Species/Rodentia/parts.rsi/l_arm.png similarity index 100% rename from Resources/Textures/_DEN/Mobs/Customization/Rodentia/parts.rsi/l_arm.png rename to Resources/Textures/_DEN/Mobs/Species/Rodentia/parts.rsi/l_arm.png diff --git a/Resources/Textures/_DEN/Mobs/Customization/Rodentia/parts.rsi/l_foot.png b/Resources/Textures/_DEN/Mobs/Species/Rodentia/parts.rsi/l_foot.png similarity index 100% rename from Resources/Textures/_DEN/Mobs/Customization/Rodentia/parts.rsi/l_foot.png rename to Resources/Textures/_DEN/Mobs/Species/Rodentia/parts.rsi/l_foot.png diff --git a/Resources/Textures/_DEN/Mobs/Customization/Rodentia/parts.rsi/l_hand.png b/Resources/Textures/_DEN/Mobs/Species/Rodentia/parts.rsi/l_hand.png similarity index 100% rename from Resources/Textures/_DEN/Mobs/Customization/Rodentia/parts.rsi/l_hand.png rename to Resources/Textures/_DEN/Mobs/Species/Rodentia/parts.rsi/l_hand.png diff --git a/Resources/Textures/_DEN/Mobs/Customization/Rodentia/parts.rsi/l_leg.png b/Resources/Textures/_DEN/Mobs/Species/Rodentia/parts.rsi/l_leg.png similarity index 100% rename from Resources/Textures/_DEN/Mobs/Customization/Rodentia/parts.rsi/l_leg.png rename to Resources/Textures/_DEN/Mobs/Species/Rodentia/parts.rsi/l_leg.png diff --git a/Resources/Textures/_DEN/Mobs/Customization/Rodentia/parts.rsi/meta.json b/Resources/Textures/_DEN/Mobs/Species/Rodentia/parts.rsi/meta.json similarity index 100% rename from Resources/Textures/_DEN/Mobs/Customization/Rodentia/parts.rsi/meta.json rename to Resources/Textures/_DEN/Mobs/Species/Rodentia/parts.rsi/meta.json diff --git a/Resources/Textures/_DEN/Mobs/Customization/Rodentia/parts.rsi/r_arm.png b/Resources/Textures/_DEN/Mobs/Species/Rodentia/parts.rsi/r_arm.png similarity index 100% rename from Resources/Textures/_DEN/Mobs/Customization/Rodentia/parts.rsi/r_arm.png rename to Resources/Textures/_DEN/Mobs/Species/Rodentia/parts.rsi/r_arm.png diff --git a/Resources/Textures/_DEN/Mobs/Customization/Rodentia/parts.rsi/r_foot.png b/Resources/Textures/_DEN/Mobs/Species/Rodentia/parts.rsi/r_foot.png similarity index 100% rename from Resources/Textures/_DEN/Mobs/Customization/Rodentia/parts.rsi/r_foot.png rename to Resources/Textures/_DEN/Mobs/Species/Rodentia/parts.rsi/r_foot.png diff --git a/Resources/Textures/_DEN/Mobs/Customization/Rodentia/parts.rsi/r_hand.png b/Resources/Textures/_DEN/Mobs/Species/Rodentia/parts.rsi/r_hand.png similarity index 100% rename from Resources/Textures/_DEN/Mobs/Customization/Rodentia/parts.rsi/r_hand.png rename to Resources/Textures/_DEN/Mobs/Species/Rodentia/parts.rsi/r_hand.png diff --git a/Resources/Textures/_DEN/Mobs/Customization/Rodentia/parts.rsi/r_leg.png b/Resources/Textures/_DEN/Mobs/Species/Rodentia/parts.rsi/r_leg.png similarity index 100% rename from Resources/Textures/_DEN/Mobs/Customization/Rodentia/parts.rsi/r_leg.png rename to Resources/Textures/_DEN/Mobs/Species/Rodentia/parts.rsi/r_leg.png diff --git a/Resources/Textures/_DEN/Mobs/Customization/Rodentia/parts.rsi/torso_f.png b/Resources/Textures/_DEN/Mobs/Species/Rodentia/parts.rsi/torso_f.png similarity index 100% rename from Resources/Textures/_DEN/Mobs/Customization/Rodentia/parts.rsi/torso_f.png rename to Resources/Textures/_DEN/Mobs/Species/Rodentia/parts.rsi/torso_f.png diff --git a/Resources/Textures/_DEN/Mobs/Customization/Rodentia/parts.rsi/torso_m.png b/Resources/Textures/_DEN/Mobs/Species/Rodentia/parts.rsi/torso_m.png similarity index 100% rename from Resources/Textures/_DEN/Mobs/Customization/Rodentia/parts.rsi/torso_m.png rename to Resources/Textures/_DEN/Mobs/Species/Rodentia/parts.rsi/torso_m.png From b0101f7cd1957ea6f4a7066af6124f0a0ad5dcc2 Mon Sep 17 00:00:00 2001 From: portfiend <109661617+portfiend@users.noreply.github.com> Date: Sat, 27 Jun 2026 07:33:57 -0500 Subject: [PATCH 11/26] rodentia todolist --- .../Prototypes/_DEN/Species/rodentia.yml | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/Resources/Prototypes/_DEN/Species/rodentia.yml b/Resources/Prototypes/_DEN/Species/rodentia.yml index ac9d1e7f1e..61f9d67bc0 100644 --- a/Resources/Prototypes/_DEN/Species/rodentia.yml +++ b/Resources/Prototypes/_DEN/Species/rodentia.yml @@ -9,3 +9,27 @@ maleFirstNames: NamesRodentiaFirstMale femaleFirstNames: NamesRodentiaFirstFemale lastNames: NamesRodentiaLast + +# +# Rodentia are a species of anthropomorphic rodent-people, and other "small mammal"-type species that aren't rodents. +# (Moles, bats, possums, shrews, and rabbits are all sort of included.) +# +# Rodentia are naturally detritivorous, allowing them to consume gastrotoxin, mold, and processed trash safely, +# and even derive nutrition from doing so! However, like other animals, they are sensitive to allicin and theobromine. +# They have red blood. +# +# TODO: Rodentia can rummage through disposal chutes, usually netting junk, but occasionally digging up snacks +# or treasure. +# +# TODO: Rodentia can use their incisors for "Cutting" interactions without needing wirecutters - such as snipping +# through cables or door wires. However, they will still be electrocuted without insulation. +# TODO: They get hungrier 33% faster. +# +# TODO: Rodentia are somewhat clumsy, and can't help but hurt themselves on mouse traps and glass shards, even +# when they're wearing shoes. +# +# TODO: Rodentia take more brute and shock damage. +# TODO: They also have a lower critical *and* death threshold than other species - 90 to crit, 180 to die. +# +# TODO: Rodentia are small enough to fit in duffel bags. +# From 42f57a431c7887721fd84df5d51b67ee04d44939 Mon Sep 17 00:00:00 2001 From: portfiend <109661617+portfiend@users.noreply.github.com> Date: Sat, 27 Jun 2026 10:58:47 -0500 Subject: [PATCH 12/26] allow detritivores to digest vent crud + trash --- Resources/Prototypes/Reagents/toxins.yml | 38 ++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/Resources/Prototypes/Reagents/toxins.yml b/Resources/Prototypes/Reagents/toxins.yml index 3fdda2c57d..fb1d6c39e8 100644 --- a/Resources/Prototypes/Reagents/toxins.yml +++ b/Resources/Prototypes/Reagents/toxins.yml @@ -477,6 +477,17 @@ damage: types: Poison: 2 + conditions: # DEN: Detritivores aren't poisoned by vent crud + - !type:MetabolizerTypeCondition + type: [Detritivore] + inverted: true + Digestion: # DEN: Detritivores can process vent crud + effects: + - !type:SatiateHunger + factor: 0.5 + conditions: + - !type:MetabolizerTypeCondition + type: [Detritivore] - type: reagent id: Romerol @@ -788,6 +799,33 @@ conditions: - !type:MetabolizerTypeCondition type: [Vox] + - !type:SatiateHunger # DEN: Detritivores can process trash + factor: 0.5 + conditions: + - !type:MetabolizerTypeCondition + type: [Detritivore] + - !type:MetabolizerTypeCondition + inverted: true + type: [Vox] + Bloodstream: # DEN: Add poison effect to trash + effects: + - !type:HealthChange + damage: + types: + Poison: 2 + conditions: + - !type:MetabolizerTypeCondition + inverted: true + type: [ Vox, Detritivore ] + - !type:Vomit + probability: 0.2 + conditions: + - !type:ReagentCondition + reagent: ToxinTrash + min: 2 + - !type:MetabolizerTypeCondition # DEN: Detritivore metabolism + type: [ Vox, Detritivore ] + inverted: true - type: reagent id: Hemorrhinol From 334de8c8970d3e5066f5340b0826f1ac6bb288c2 Mon Sep 17 00:00:00 2001 From: portfiend <109661617+portfiend@users.noreply.github.com> Date: Mon, 13 Jul 2026 11:43:44 -0500 Subject: [PATCH 13/26] Revert "allow detritivores to digest vent crud + trash" This reverts commit 42f57a431c7887721fd84df5d51b67ee04d44939. --- Resources/Prototypes/Reagents/toxins.yml | 38 ------------------------ 1 file changed, 38 deletions(-) diff --git a/Resources/Prototypes/Reagents/toxins.yml b/Resources/Prototypes/Reagents/toxins.yml index fb1d6c39e8..3fdda2c57d 100644 --- a/Resources/Prototypes/Reagents/toxins.yml +++ b/Resources/Prototypes/Reagents/toxins.yml @@ -477,17 +477,6 @@ damage: types: Poison: 2 - conditions: # DEN: Detritivores aren't poisoned by vent crud - - !type:MetabolizerTypeCondition - type: [Detritivore] - inverted: true - Digestion: # DEN: Detritivores can process vent crud - effects: - - !type:SatiateHunger - factor: 0.5 - conditions: - - !type:MetabolizerTypeCondition - type: [Detritivore] - type: reagent id: Romerol @@ -799,33 +788,6 @@ conditions: - !type:MetabolizerTypeCondition type: [Vox] - - !type:SatiateHunger # DEN: Detritivores can process trash - factor: 0.5 - conditions: - - !type:MetabolizerTypeCondition - type: [Detritivore] - - !type:MetabolizerTypeCondition - inverted: true - type: [Vox] - Bloodstream: # DEN: Add poison effect to trash - effects: - - !type:HealthChange - damage: - types: - Poison: 2 - conditions: - - !type:MetabolizerTypeCondition - inverted: true - type: [ Vox, Detritivore ] - - !type:Vomit - probability: 0.2 - conditions: - - !type:ReagentCondition - reagent: ToxinTrash - min: 2 - - !type:MetabolizerTypeCondition # DEN: Detritivore metabolism - type: [ Vox, Detritivore ] - inverted: true - type: reagent id: Hemorrhinol From 4647204f50c401df6f4cfb4ead8698d38882494c Mon Sep 17 00:00:00 2001 From: portfiend <109661617+portfiend@users.noreply.github.com> Date: Mon, 13 Jul 2026 11:44:18 -0500 Subject: [PATCH 14/26] Revert "allow detritivores to digest mold and gastrotoxin" This reverts commit 723dc9aee1c8271f4d90e711ac6f02a84ba89ef1. --- Resources/Prototypes/Reagents/toxins.yml | 34 +++--------------------- 1 file changed, 4 insertions(+), 30 deletions(-) diff --git a/Resources/Prototypes/Reagents/toxins.yml b/Resources/Prototypes/Reagents/toxins.yml index 3fdda2c57d..670baa829b 100644 --- a/Resources/Prototypes/Reagents/toxins.yml +++ b/Resources/Prototypes/Reagents/toxins.yml @@ -93,10 +93,6 @@ Bloodstream: effects: - !type:HealthChange - conditions: # DEN: Detritivore metabolism - - !type:MetabolizerTypeCondition - type: [ Detritivore ] - inverted: true damage: types: Poison: 2 @@ -105,16 +101,7 @@ - !type:ReagentCondition reagent: GastroToxin min: 2 - - !type:MetabolizerTypeCondition # DEN: Detritivore metabolism - type: [ Detritivore ] - inverted: true probability: 0.2 - Digestion: # DEN: Detritivores can digest gastrotoxin. - effects: - - !type:SatiateHunger - conditions: - - !type:MetabolizerTypeCondition - type: [Detritivore] - type: reagent id: Mold @@ -129,19 +116,9 @@ Bloodstream: effects: - !type:HealthChange - conditions: # DEN: Detritivore metabolism - - !type:MetabolizerTypeCondition - type: [ Detritivore ] - inverted: true damage: types: Poison: 1 - Digestion: # DEN: Detritivores can digest mold. - effects: - - !type:SatiateHunger - conditions: - - !type:MetabolizerTypeCondition - type: [Detritivore] - type: reagent id: PolytrinicAcid @@ -511,7 +488,7 @@ - !type:PopupMessage conditions: - !type:MetabolizerTypeCondition - type: [ Animal, Vox, Detritivore ] # DEN: Add Detritivore + type: [ Animal, Vox ] inverted: true type: Local visualType: MediumCaution @@ -521,12 +498,12 @@ probability: 0.1 conditions: - !type:MetabolizerTypeCondition - type: [ Animal, Vox, Plant, Detritivore ] # DEN: Add Detritivore + type: [ Animal, Vox, Plant ] inverted: true - !type:HealthChange conditions: - !type:MetabolizerTypeCondition - type: [ Animal, Vox, Plant, Detritivore ] # DEN: Add Detritivore + type: [ Animal, Vox, Plant ] inverted: true damage: types: @@ -541,16 +518,13 @@ - !type:AdjustReagent conditions: - !type:MetabolizerTypeCondition - type: [ Animal, Detritivore ] # DEN: Add Detritivore + type: [ Animal ] reagent: Protein amount: 0.5 - !type:AdjustReagent conditions: - !type:MetabolizerTypeCondition type: [ Vox ] - - !type:MetabolizerTypeCondition # DEN: Prevent redundant metabolism for detritivore vox - type: [ Detritivore ] - inverted: true reagent: Protein amount: 0.25 From 5b7fc359535968936ac83197ec1a3e61ee1d1c7c Mon Sep 17 00:00:00 2001 From: portfiend <109661617+portfiend@users.noreply.github.com> Date: Mon, 13 Jul 2026 11:44:30 -0500 Subject: [PATCH 15/26] Revert "add detritivore metabolizer" This reverts commit 2eafc97783fd861c994bb045cadf82fdbd0e92a0. --- Resources/Locale/en-US/_DEN/metabolism/metabolizer-types.ftl | 1 - Resources/Prototypes/_DEN/Chemistry/metabolizer_types.yml | 5 ----- 2 files changed, 6 deletions(-) delete mode 100644 Resources/Locale/en-US/_DEN/metabolism/metabolizer-types.ftl delete mode 100644 Resources/Prototypes/_DEN/Chemistry/metabolizer_types.yml diff --git a/Resources/Locale/en-US/_DEN/metabolism/metabolizer-types.ftl b/Resources/Locale/en-US/_DEN/metabolism/metabolizer-types.ftl deleted file mode 100644 index b3b8f03590..0000000000 --- a/Resources/Locale/en-US/_DEN/metabolism/metabolizer-types.ftl +++ /dev/null @@ -1 +0,0 @@ -metabolizer-type-detritivore = Detritivore diff --git a/Resources/Prototypes/_DEN/Chemistry/metabolizer_types.yml b/Resources/Prototypes/_DEN/Chemistry/metabolizer_types.yml deleted file mode 100644 index 0f38c926ad..0000000000 --- a/Resources/Prototypes/_DEN/Chemistry/metabolizer_types.yml +++ /dev/null @@ -1,5 +0,0 @@ -# Hardy digestion for trash eaters and decomposers. -# Can consume gastrotoxin and mold safely, and derive nutrition from doing so. -- type: metabolizerType - id: Detritivore - name: metabolizer-type-detritivore From edbc822146d58fc0dabe409d06926882d5f39879 Mon Sep 17 00:00:00 2001 From: portfiend <109661617+portfiend@users.noreply.github.com> Date: Mon, 13 Jul 2026 12:38:13 -0500 Subject: [PATCH 16/26] rodentia hunger and mob thresholds --- .../Nutrition/Components/HungerComponent.cs | 2 +- .../Nutrition/EntitySystems/HungerSystem.cs | 1 + .../Nutrition/Components/HungerComponent.cs | 38 +++++++++++++++++++ .../Prototypes/_DEN/Body/Species/rodentia.yml | 8 ++++ .../Prototypes/_DEN/Species/rodentia.yml | 4 +- 5 files changed, 50 insertions(+), 3 deletions(-) create mode 100644 Content.Shared/_DEN/Nutrition/Components/HungerComponent.cs diff --git a/Content.Shared/Nutrition/Components/HungerComponent.cs b/Content.Shared/Nutrition/Components/HungerComponent.cs index d5db991b1a..87a1bf037d 100644 --- a/Content.Shared/Nutrition/Components/HungerComponent.cs +++ b/Content.Shared/Nutrition/Components/HungerComponent.cs @@ -34,7 +34,7 @@ public sealed partial class HungerComponent : Component /// /// Any time this is modified, should be called. [DataField("baseDecayRate"), ViewVariables(VVAccess.ReadWrite)] - public float BaseDecayRate = 0.01666666666f; + public float BaseDecayRate = BaseHumanoidHungerRate; // DEN: 0.01666666666f -> BaseHumanoidHungerRate /// /// The actual amount at which decays. diff --git a/Content.Shared/Nutrition/EntitySystems/HungerSystem.cs b/Content.Shared/Nutrition/EntitySystems/HungerSystem.cs index b28455b02e..021c4eb9a6 100644 --- a/Content.Shared/Nutrition/EntitySystems/HungerSystem.cs +++ b/Content.Shared/Nutrition/EntitySystems/HungerSystem.cs @@ -158,6 +158,7 @@ private void DoHungerThresholdEffects(EntityUid uid, HungerComponent? component if (component.HungerThresholdDecayModifiers.TryGetValue(component.CurrentThreshold, out var modifier)) { component.ActualDecayRate = component.BaseDecayRate * modifier; + component.ActualDecayRate *= component.DecayRateMultiplier; // DEN - Decay rate multipliers DirtyField(uid, component, nameof(HungerComponent.ActualDecayRate)); SetAuthoritativeHungerValue((uid, component), GetHunger(component)); } diff --git a/Content.Shared/_DEN/Nutrition/Components/HungerComponent.cs b/Content.Shared/_DEN/Nutrition/Components/HungerComponent.cs new file mode 100644 index 0000000000..b008651caa --- /dev/null +++ b/Content.Shared/_DEN/Nutrition/Components/HungerComponent.cs @@ -0,0 +1,38 @@ +using Content.Shared.Nutrition.EntitySystems; + +namespace Content.Shared.Nutrition.Components; + +public sealed partial class HungerComponent : Component +{ + /// + /// How many tick intervals () it takes to drop hunger by + /// + public const float HungerDropTimeInIntervals = 50.0f; + + /// + /// Amount of hunger lost in . + /// + public const float HungerDropAmount = 50.0f; + + /// + /// How many ticks per "tick interval". 60 ticks at 1 tick / second = 1 minute. + /// + /// + /// This is a bad way of doing it but the better way is a huge breaking change + /// + private const float DropTickInterval = 60.0f; + + /// + /// The hunger rate that humanoid species are balanced around. + /// + private static readonly float BaseHumanoidHungerRate = HungerDropAmount / (HungerDropTimeInIntervals * DropTickInterval); + + /// + /// A flat multiplier applied to . + /// + /// + /// This value ideally should not change - this is to make species code more intuitive to write. + /// + [DataField, Access(typeof(HungerSystem), Friend = AccessPermissions.Read)] + public float DecayRateMultiplier = 1.0f; +} diff --git a/Resources/Prototypes/_DEN/Body/Species/rodentia.yml b/Resources/Prototypes/_DEN/Body/Species/rodentia.yml index 6072ea13fc..10342b1e78 100644 --- a/Resources/Prototypes/_DEN/Body/Species/rodentia.yml +++ b/Resources/Prototypes/_DEN/Body/Species/rodentia.yml @@ -87,6 +87,14 @@ - BaseSpeciesMobOrganic id: MobRodentia name: Urist McRat + components: + - type: Hunger # Faster hunger rate + decayRateMultiplier: 1.33 + - type: MobThresholds # Lower crit + death threshold + thresholds: + 0: Alive + 90: Critical + 180: Dead # region Base organs diff --git a/Resources/Prototypes/_DEN/Species/rodentia.yml b/Resources/Prototypes/_DEN/Species/rodentia.yml index 61f9d67bc0..3b76eba033 100644 --- a/Resources/Prototypes/_DEN/Species/rodentia.yml +++ b/Resources/Prototypes/_DEN/Species/rodentia.yml @@ -23,13 +23,13 @@ # # TODO: Rodentia can use their incisors for "Cutting" interactions without needing wirecutters - such as snipping # through cables or door wires. However, they will still be electrocuted without insulation. -# TODO: They get hungrier 33% faster. +# They get hungrier 33% faster. # # TODO: Rodentia are somewhat clumsy, and can't help but hurt themselves on mouse traps and glass shards, even # when they're wearing shoes. # # TODO: Rodentia take more brute and shock damage. -# TODO: They also have a lower critical *and* death threshold than other species - 90 to crit, 180 to die. +# They also have a lower critical *and* death threshold than other species - 90 to crit, 180 to die. # # TODO: Rodentia are small enough to fit in duffel bags. # From 2711450882699365faedca364d6ae8ae6d63c7cf Mon Sep 17 00:00:00 2001 From: portfiend <109661617+portfiend@users.noreply.github.com> Date: Mon, 13 Jul 2026 14:52:29 -0500 Subject: [PATCH 17/26] damage stuff --- Resources/Prototypes/_DEN/Body/Species/rodentia.yml | 9 +++++++++ Resources/Prototypes/_DEN/Damage/rodentia.yml | 7 +++++++ Resources/Prototypes/_DEN/Species/rodentia.yml | 2 +- 3 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 Resources/Prototypes/_DEN/Damage/rodentia.yml diff --git a/Resources/Prototypes/_DEN/Body/Species/rodentia.yml b/Resources/Prototypes/_DEN/Body/Species/rodentia.yml index 10342b1e78..08687a120b 100644 --- a/Resources/Prototypes/_DEN/Body/Species/rodentia.yml +++ b/Resources/Prototypes/_DEN/Body/Species/rodentia.yml @@ -95,6 +95,15 @@ 0: Alive 90: Critical 180: Dead + - type: Damageable # More shock + brute damage + damageModifierSet: Rodentia + - type: MeleeWeapon # Use teeth to deal sharp and piercing damage + angle: 0 + animation: WeaponArcBite + damage: + types: + Piercing: 3 + Slash: 2 # region Base organs diff --git a/Resources/Prototypes/_DEN/Damage/rodentia.yml b/Resources/Prototypes/_DEN/Damage/rodentia.yml new file mode 100644 index 0000000000..5492558d83 --- /dev/null +++ b/Resources/Prototypes/_DEN/Damage/rodentia.yml @@ -0,0 +1,7 @@ +- type: damageModifierSet + id: Rodentia + coefficients: + Blunt: 1.15 + Slash: 1.10 + Piercing: 1.10 + Shock: 1.15 diff --git a/Resources/Prototypes/_DEN/Species/rodentia.yml b/Resources/Prototypes/_DEN/Species/rodentia.yml index 3b76eba033..410cec9a02 100644 --- a/Resources/Prototypes/_DEN/Species/rodentia.yml +++ b/Resources/Prototypes/_DEN/Species/rodentia.yml @@ -28,7 +28,7 @@ # TODO: Rodentia are somewhat clumsy, and can't help but hurt themselves on mouse traps and glass shards, even # when they're wearing shoes. # -# TODO: Rodentia take more brute and shock damage. +# TODO: Rodentia take more brute and shock damage, but use their teeth to inflict Sharp and Piercing damage. # They also have a lower critical *and* death threshold than other species - 90 to crit, 180 to die. # # TODO: Rodentia are small enough to fit in duffel bags. From 1f03520d87b55332bc8ccc399e5d703fbc8a8226 Mon Sep 17 00:00:00 2001 From: portfiend <109661617+portfiend@users.noreply.github.com> Date: Mon, 13 Jul 2026 14:52:37 -0500 Subject: [PATCH 18/26] guidebook --- Resources/Prototypes/Guidebook/species.yml | 1 + .../Prototypes/_DEN/Guidebook/species.yml | 4 ++ .../_DEN/Guidebook/Mobs/Rodentia.xml | 64 +++++++++++++++++++ 3 files changed, 69 insertions(+) create mode 100644 Resources/Prototypes/_DEN/Guidebook/species.yml create mode 100644 Resources/ServerInfo/_DEN/Guidebook/Mobs/Rodentia.xml diff --git a/Resources/Prototypes/Guidebook/species.yml b/Resources/Prototypes/Guidebook/species.yml index c13dfa6107..b94ab7f324 100644 --- a/Resources/Prototypes/Guidebook/species.yml +++ b/Resources/Prototypes/Guidebook/species.yml @@ -15,6 +15,7 @@ - Human - Moth - Reptilian + - Rodentia # DEN - SlimePerson - Vox - Vulpkanin diff --git a/Resources/Prototypes/_DEN/Guidebook/species.yml b/Resources/Prototypes/_DEN/Guidebook/species.yml new file mode 100644 index 0000000000..82e8c53cdd --- /dev/null +++ b/Resources/Prototypes/_DEN/Guidebook/species.yml @@ -0,0 +1,4 @@ +- type: guideEntry + id: Rodentia + name: species-name-rodentia + text: "/ServerInfo/_DEN/Guidebook/Mobs/Rodentia.xml" diff --git a/Resources/ServerInfo/_DEN/Guidebook/Mobs/Rodentia.xml b/Resources/ServerInfo/_DEN/Guidebook/Mobs/Rodentia.xml new file mode 100644 index 0000000000..496684cff0 --- /dev/null +++ b/Resources/ServerInfo/_DEN/Guidebook/Mobs/Rodentia.xml @@ -0,0 +1,64 @@ + + # Rodentia + + + + + + Rodentia are a species of anthropomorphic rodent-like humanoids widespread throughout interstellar society. They are highly diverse, and despite their name, have been known to resemble non-rodent species' physiology as well, from bats, to marsupials, to insectivorous mammals like hedgehogs. + + ## Physiology + + Rodentia on average have light-weight, nimble builds. They have red blood and an omnivorous scavenger diet. They will be poisoned by allicin (onions, garlic) and theobromine (chocolate, coffee, tea), but are [color=#1e90ff]capable of digesting rotten meat, mold, and reprocessed trash safely.[/color] + + Rodentia are physically fragile. They [color=#ffa500]will take 15% more Blunt and Shock damage, as well as 10% more Slash and Piercing damage.[/color] In addition, [color=red]they will enter critical condition at 90 damage, and die at 180 damage.[/color] + + They tend to be clumsy with their feet and tails when they move, and [color=#ffa500]will trip on glass shards and mousetraps, even if wearing shoes.[/color] + + ## Rummaging + + + + + + + + + Rodentia are highly effective scavengers, capable of [color=#1e90ff]rummaging through certain appliances.[/color] Most of them contain junk, but who knows! You might get lucky and sift treasure out of the trash. + + + + + + + + + + + ## Gnawing + + + + + + Rodentia have powerful adapted incisors that deal [color=red]Sharp[/color] and [color=red]Piercing[/color] damage, and make for an effective [color=cyan]Cutting[/color] tool. Watch out for electric shocks! + + ## Rodentia Naming Conventions + + Rodentia are typically given a "standard" first name (dependent on individual culture), traditionally prefixed with an adjective descriptor. These descriptors may be selected by the rodentia themselves, but are often assigned by their peers - especially based on physical quality, temperament, or social reputation. + + Rodentian cultures are frequently heavily communal and place less emphasis on individual families - surnames are uncommon in unmarried rodentia. In some societies, a rodentia may opt to adapt their descriptor into a surname. + + - [color=#449944]Acceptable:[/color] Grumpy Rufus + - [color=#449944]Acceptable:[/color] Long-tail Ruby + - [color=#449944]Acceptable:[/color] Sneaky Whiskershire + - [color=#449944]Acceptable:[/color] Fat Frankie + - [color=#449944]Acceptable:[/color] Cheeky Spud + - [color=#449944]Acceptable:[/color] Oliver Haste + - [color=#449944]Acceptable:[/color] Willow Sharpclaws + - [color=#994444]Bad:[/color] Speedy Gonzales + - [color=#994444]Bad:[/color] Snotfuck the Rat + - [color=#994444]Bad:[/color] Tella Tubby + - [color=#994444]Bad:[/color] Big Dick + + From f84b26fe2c1488361608c237b77daedf89cd04bd Mon Sep 17 00:00:00 2001 From: portfiend <109661617+portfiend@users.noreply.github.com> Date: Sun, 19 Jul 2026 12:22:55 -0500 Subject: [PATCH 19/26] add tool interaction system --- .../ToggleToolInteractionSystem.cs | 6 ++ .../ToggleToolInteractionSystem.cs | 6 ++ .../ToggleToolInteractionComponent.cs | 43 +++++++++ .../SharedToggleToolInteractionSystem.cs | 93 +++++++++++++++++++ 4 files changed, 148 insertions(+) create mode 100644 Content.Client/_DEN/Tool/EntitySystems/ToggleToolInteractionSystem.cs create mode 100644 Content.Server/_DEN/Tool/EntitySystems/ToggleToolInteractionSystem.cs create mode 100644 Content.Shared/_DEN/Tool/Components/ToggleToolInteractionComponent.cs create mode 100644 Content.Shared/_DEN/Tool/EntitySystems/SharedToggleToolInteractionSystem.cs diff --git a/Content.Client/_DEN/Tool/EntitySystems/ToggleToolInteractionSystem.cs b/Content.Client/_DEN/Tool/EntitySystems/ToggleToolInteractionSystem.cs new file mode 100644 index 0000000000..07c6041822 --- /dev/null +++ b/Content.Client/_DEN/Tool/EntitySystems/ToggleToolInteractionSystem.cs @@ -0,0 +1,6 @@ +using Content.Shared._DEN.Tool.Components; + +namespace Content.Client._DEN.Tool.Components; + +public sealed partial class ToggleToolInteractionSystem : SharedToggleToolInteractionSystem +{ } diff --git a/Content.Server/_DEN/Tool/EntitySystems/ToggleToolInteractionSystem.cs b/Content.Server/_DEN/Tool/EntitySystems/ToggleToolInteractionSystem.cs new file mode 100644 index 0000000000..3eae737862 --- /dev/null +++ b/Content.Server/_DEN/Tool/EntitySystems/ToggleToolInteractionSystem.cs @@ -0,0 +1,6 @@ +using Content.Shared._DEN.Tool.Components; + +namespace Content.Server._DEN.Tool.Components; + +public sealed partial class ToggleToolInteractionSystem : SharedToggleToolInteractionSystem +{ } diff --git a/Content.Shared/_DEN/Tool/Components/ToggleToolInteractionComponent.cs b/Content.Shared/_DEN/Tool/Components/ToggleToolInteractionComponent.cs new file mode 100644 index 0000000000..d410f16118 --- /dev/null +++ b/Content.Shared/_DEN/Tool/Components/ToggleToolInteractionComponent.cs @@ -0,0 +1,43 @@ +using Content.Shared.Tools; +using Robust.Shared.GameStates; +using Robust.Shared.Prototypes; + +namespace Content.Shared._DEN.Tool.Components; + +/// +/// A component that gives a mob the ability to use a tool quality with their empty-hand interaction. +/// +[RegisterComponent] +[NetworkedComponent, AutoGenerateComponentState] +public sealed partial class ToggleToolInteractionComponent : Component +{ + /// + /// Whether or not tool interactions are enabled. + /// + [DataField, AutoNetworkedField] + public bool IsToolEnabled = false; + + /// + /// The entity to use for the toggle action. + /// + [DataField] + public EntProtoId ToolToggleAction = "ActionToolInteractionToggle"; + + /// + /// The entity representing the toggle action. + /// + [DataField, AutoNetworkedField] + public EntityUid? ToolToggleActionEntity; + + /// + /// Text displayed when the action is enabled. + /// + [DataField] + public LocId? ToggleOnText = "action-popup-tool-interaction-enabled"; + + /// + /// Text displayed when the action is disabled. + /// + [DataField] + public LocId? ToggleOffText = "action-popup-tool-interaction-disabled"; +} diff --git a/Content.Shared/_DEN/Tool/EntitySystems/SharedToggleToolInteractionSystem.cs b/Content.Shared/_DEN/Tool/EntitySystems/SharedToggleToolInteractionSystem.cs new file mode 100644 index 0000000000..de104ed2eb --- /dev/null +++ b/Content.Shared/_DEN/Tool/EntitySystems/SharedToggleToolInteractionSystem.cs @@ -0,0 +1,93 @@ +using Content.Shared.Actions; +using Content.Shared.CombatMode; +using Content.Shared.Interaction; +using Content.Shared.Popups; +using Content.Shared.Tools.Components; + +namespace Content.Shared._DEN.Tool.Components; + +public abstract partial class SharedToggleToolInteractionSystem : EntitySystem +{ + [Dependency] private SharedActionsSystem _actions = default!; + [Dependency] private SharedCombatModeSystem _combatMode = default!; + [Dependency] private SharedInteractionSystem _interaction = default!; + [Dependency] private SharedPopupSystem _popup = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnMapInit); + SubscribeLocalEvent(OnShutdown); + SubscribeLocalEvent(OnPerformAction); + SubscribeLocalEvent(OnUserInteractHand); + } + + private void OnMapInit(Entity ent, ref MapInitEvent args) + { + _actions.AddAction(ent.Owner, ref ent.Comp.ToolToggleActionEntity, ent.Comp.ToolToggleAction); + Dirty(ent); + } + + private void OnShutdown(Entity ent, ref ComponentShutdown args) + { + _actions.RemoveAction(ent.Owner, ent.Comp.ToolToggleActionEntity); + } + + private void OnPerformAction(Entity ent, ref ToggleToolInteractionActionEvent args) + { + if (args.Handled) + return; + + var value = !ent.Comp.IsToolEnabled; + SetToolInteractionEnabled(ent.AsNullable(), value); + + // Display message when toggled. + var msgLocId = value ? ent.Comp.ToggleOnText : ent.Comp.ToggleOffText; + if (msgLocId != null) + _popup.PopupClient(Loc.GetString(msgLocId), + args.Performer, + args.Performer); + + args.Handled = true; + } + + private void OnUserInteractHand(Entity ent, ref UserInteractHandEvent args) + { + if (args.Handled || !ent.Comp.IsToolEnabled || !HasComp(ent.Owner)) + return; + + _interaction.InteractUsing(ent.Owner, + ent.Owner, + args.Target, + Transform(args.Target).Coordinates); + + args.Handled = true; + } + + /// + /// Sets whether or not this entity can use their empty-hand interactions to perform tool actions. + /// + /// The entity to set tool interaction status. + /// If tool interactions should be enabled. + public void SetToolInteractionEnabled(Entity ent, bool enabled) + { + if (!Resolve(ent.Owner, ref ent.Comp) + || ent.Comp.IsToolEnabled == enabled) + return; + + ent.Comp.IsToolEnabled = enabled; + Dirty(ent); + + if (ent.Comp.ToolToggleActionEntity != null) + _actions.SetToggled(ent.Comp.ToolToggleActionEntity, enabled); + + if (enabled && TryComp(ent.Owner, out var combatMode)) + _combatMode.SetInCombatMode(ent.Owner, false, combatMode); + } +} + +/// +/// Event fired when the "toggle tool interaction" action is used. +/// +public sealed partial class ToggleToolInteractionActionEvent : InstantActionEvent; From da989148bed78df3934365d0b151989f07514777 Mon Sep 17 00:00:00 2001 From: portfiend <109661617+portfiend@users.noreply.github.com> Date: Sun, 19 Jul 2026 12:23:44 -0500 Subject: [PATCH 20/26] add tool interaction toggle actions --- .../_DEN/tool/tool-interaction-component.ftl | 2 ++ Resources/Prototypes/_DEN/Actions/species.yml | 9 ++++++++ Resources/Prototypes/_DEN/Actions/types.yml | 22 +++++++++++++++++++ 3 files changed, 33 insertions(+) create mode 100644 Resources/Locale/en-US/_DEN/tool/tool-interaction-component.ftl create mode 100644 Resources/Prototypes/_DEN/Actions/species.yml create mode 100644 Resources/Prototypes/_DEN/Actions/types.yml diff --git a/Resources/Locale/en-US/_DEN/tool/tool-interaction-component.ftl b/Resources/Locale/en-US/_DEN/tool/tool-interaction-component.ftl new file mode 100644 index 0000000000..391bffa470 --- /dev/null +++ b/Resources/Locale/en-US/_DEN/tool/tool-interaction-component.ftl @@ -0,0 +1,2 @@ +action-popup-tool-interaction-enabled = Tool interaction enabled +action-popup-tool-interaction-disabled = Tool interaction disabled diff --git a/Resources/Prototypes/_DEN/Actions/species.yml b/Resources/Prototypes/_DEN/Actions/species.yml new file mode 100644 index 0000000000..e59709eeb1 --- /dev/null +++ b/Resources/Prototypes/_DEN/Actions/species.yml @@ -0,0 +1,9 @@ +- type: entity + parent: ActionToolInteractionToggle + id: ActionGnawingToggle + name: "[color=cyan]Gnawing[/color]" + description: Use your teeth as a [color=yellow]Cutting[/color] tool. + +- type: entity + parent: [ActionGnawingToggle, ActionToolInteractionToggleOff] + id: ActionGnawingToggleOff diff --git a/Resources/Prototypes/_DEN/Actions/types.yml b/Resources/Prototypes/_DEN/Actions/types.yml new file mode 100644 index 0000000000..06db770252 --- /dev/null +++ b/Resources/Prototypes/_DEN/Actions/types.yml @@ -0,0 +1,22 @@ +# mental actions + +- type: entity + parent: BaseMentalAction + id: ActionToolInteractionToggle + name: "[color=cyan]Tool Interaction[/color]" + description: Use your empty hand as a tool + components: + - type: Action + icon: Interface/Actions/harmOff.png + iconOn: Interface/Actions/harm.png + priority: -90 + - type: InstantAction + event: !type:ToggleToolInteractionActionEvent + +- type: entity + parent: ActionToolInteractionToggle + id: ActionToolInteractionToggleOff + components: + - type: Action + enabled: false + autoPopulate: false From 7f8774d6f634beeec0d51e775679a960352c3821 Mon Sep 17 00:00:00 2001 From: portfiend <109661617+portfiend@users.noreply.github.com> Date: Sat, 25 Jul 2026 17:48:37 -0500 Subject: [PATCH 21/26] hang on let me try something else --- .../ToggleToolInteractionComponent.cs | 34 ++++++++++++++++--- 1 file changed, 29 insertions(+), 5 deletions(-) diff --git a/Content.Shared/_DEN/Tool/Components/ToggleToolInteractionComponent.cs b/Content.Shared/_DEN/Tool/Components/ToggleToolInteractionComponent.cs index d410f16118..e249fd0f63 100644 --- a/Content.Shared/_DEN/Tool/Components/ToggleToolInteractionComponent.cs +++ b/Content.Shared/_DEN/Tool/Components/ToggleToolInteractionComponent.cs @@ -1,11 +1,11 @@ -using Content.Shared.Tools; +using Robust.Shared.Containers; using Robust.Shared.GameStates; using Robust.Shared.Prototypes; namespace Content.Shared._DEN.Tool.Components; /// -/// A component that gives a mob the ability to use a tool quality with their empty-hand interaction. +/// A component that allows you to toggle using an entity in your empty hand. /// [RegisterComponent] [NetworkedComponent, AutoGenerateComponentState] @@ -17,6 +17,12 @@ public sealed partial class ToggleToolInteractionComponent : Component [DataField, AutoNetworkedField] public bool IsToolEnabled = false; + /// + /// The string ID used for the item container. + /// + [DataField] + public string ContainerId = "toggleable_tool"; + /// /// The entity to use for the toggle action. /// @@ -24,10 +30,10 @@ public sealed partial class ToggleToolInteractionComponent : Component public EntProtoId ToolToggleAction = "ActionToolInteractionToggle"; /// - /// The entity representing the toggle action. + /// The entity to put in the mob's hand when this is toggled. /// - [DataField, AutoNetworkedField] - public EntityUid? ToolToggleActionEntity; + [DataField(required: true)] + public EntProtoId Item = string.Empty; /// /// Text displayed when the action is enabled. @@ -40,4 +46,22 @@ public sealed partial class ToggleToolInteractionComponent : Component /// [DataField] public LocId? ToggleOffText = "action-popup-tool-interaction-disabled"; + + /// + /// The container holding the tool item. + /// + [DataField, AutoNetworkedField] + public Container? ItemContainer; + + /// + /// The entity representing the toggle action. + /// + [DataField, AutoNetworkedField] + public EntityUid? ToolToggleActionEntity; + + /// + /// The entity representing the toggleable item. + /// + [DataField, AutoNetworkedField] + public EntityUid? ItemEntity; } From 79d78a2da926da9c9c4ee3e91688a44964679629 Mon Sep 17 00:00:00 2001 From: portfiend <109661617+portfiend@users.noreply.github.com> Date: Fri, 31 Jul 2026 23:50:30 -0500 Subject: [PATCH 22/26] refactor tool organs --- ...nteractionSystem.cs => ToolOrganSystem.cs} | 2 +- ...nteractionSystem.cs => ToolOrganSystem.cs} | 2 +- ...tionComponent.cs => ToolOrganComponent.cs} | 37 ++--- .../Components/ToolOrganPerformerComponent.cs | 9 ++ .../SharedToggleToolInteractionSystem.cs | 93 ----------- .../EntitySystems/SharedToolOrganSystem.cs | 149 ++++++++++++++++++ .../Prototypes/_DEN/Body/Species/rodentia.yml | 4 + 7 files changed, 183 insertions(+), 113 deletions(-) rename Content.Client/_DEN/Tool/EntitySystems/{ToggleToolInteractionSystem.cs => ToolOrganSystem.cs} (51%) rename Content.Server/_DEN/Tool/EntitySystems/{ToggleToolInteractionSystem.cs => ToolOrganSystem.cs} (51%) rename Content.Shared/_DEN/Tool/Components/{ToggleToolInteractionComponent.cs => ToolOrganComponent.cs} (85%) create mode 100644 Content.Shared/_DEN/Tool/Components/ToolOrganPerformerComponent.cs delete mode 100644 Content.Shared/_DEN/Tool/EntitySystems/SharedToggleToolInteractionSystem.cs create mode 100644 Content.Shared/_DEN/Tool/EntitySystems/SharedToolOrganSystem.cs diff --git a/Content.Client/_DEN/Tool/EntitySystems/ToggleToolInteractionSystem.cs b/Content.Client/_DEN/Tool/EntitySystems/ToolOrganSystem.cs similarity index 51% rename from Content.Client/_DEN/Tool/EntitySystems/ToggleToolInteractionSystem.cs rename to Content.Client/_DEN/Tool/EntitySystems/ToolOrganSystem.cs index 07c6041822..dc6e782190 100644 --- a/Content.Client/_DEN/Tool/EntitySystems/ToggleToolInteractionSystem.cs +++ b/Content.Client/_DEN/Tool/EntitySystems/ToolOrganSystem.cs @@ -2,5 +2,5 @@ namespace Content.Client._DEN.Tool.Components; -public sealed partial class ToggleToolInteractionSystem : SharedToggleToolInteractionSystem +public sealed partial class ToolOrganSystem : SharedToolOrganSystem { } diff --git a/Content.Server/_DEN/Tool/EntitySystems/ToggleToolInteractionSystem.cs b/Content.Server/_DEN/Tool/EntitySystems/ToolOrganSystem.cs similarity index 51% rename from Content.Server/_DEN/Tool/EntitySystems/ToggleToolInteractionSystem.cs rename to Content.Server/_DEN/Tool/EntitySystems/ToolOrganSystem.cs index 3eae737862..038777af82 100644 --- a/Content.Server/_DEN/Tool/EntitySystems/ToggleToolInteractionSystem.cs +++ b/Content.Server/_DEN/Tool/EntitySystems/ToolOrganSystem.cs @@ -2,5 +2,5 @@ namespace Content.Server._DEN.Tool.Components; -public sealed partial class ToggleToolInteractionSystem : SharedToggleToolInteractionSystem +public sealed partial class ToolOrganSystem : SharedToolOrganSystem { } diff --git a/Content.Shared/_DEN/Tool/Components/ToggleToolInteractionComponent.cs b/Content.Shared/_DEN/Tool/Components/ToolOrganComponent.cs similarity index 85% rename from Content.Shared/_DEN/Tool/Components/ToggleToolInteractionComponent.cs rename to Content.Shared/_DEN/Tool/Components/ToolOrganComponent.cs index e249fd0f63..57040b102c 100644 --- a/Content.Shared/_DEN/Tool/Components/ToggleToolInteractionComponent.cs +++ b/Content.Shared/_DEN/Tool/Components/ToolOrganComponent.cs @@ -5,11 +5,12 @@ namespace Content.Shared._DEN.Tool.Components; /// -/// A component that allows you to toggle using an entity in your empty hand. +/// An organ that contains an entity representing a specific capability of the organ. +/// For example: giving an organ a "sharp" tool if you want this organ to be usable for cutting. /// [RegisterComponent] [NetworkedComponent, AutoGenerateComponentState] -public sealed partial class ToggleToolInteractionComponent : Component +public sealed partial class ToolOrganComponent : Component { /// /// Whether or not tool interactions are enabled. @@ -23,18 +24,6 @@ public sealed partial class ToggleToolInteractionComponent : Component [DataField] public string ContainerId = "toggleable_tool"; - /// - /// The entity to use for the toggle action. - /// - [DataField] - public EntProtoId ToolToggleAction = "ActionToolInteractionToggle"; - - /// - /// The entity to put in the mob's hand when this is toggled. - /// - [DataField(required: true)] - public EntProtoId Item = string.Empty; - /// /// Text displayed when the action is enabled. /// @@ -48,10 +37,16 @@ public sealed partial class ToggleToolInteractionComponent : Component public LocId? ToggleOffText = "action-popup-tool-interaction-disabled"; /// - /// The container holding the tool item. + /// The entity to use for the toggle action. /// - [DataField, AutoNetworkedField] - public Container? ItemContainer; + [DataField] + public EntProtoId ToolToggleAction = "ActionToolInteractionToggle"; + + /// + /// The entity to put in the mob's hand when this is toggled. + /// + [DataField(required: true)] + public EntProtoId Item = string.Empty; /// /// The entity representing the toggle action. @@ -59,9 +54,15 @@ public sealed partial class ToggleToolInteractionComponent : Component [DataField, AutoNetworkedField] public EntityUid? ToolToggleActionEntity; + /// + /// The container holding the tool item. + /// + [ViewVariables] + public Container? ItemContainer; + /// /// The entity representing the toggleable item. /// - [DataField, AutoNetworkedField] + [ViewVariables] public EntityUid? ItemEntity; } diff --git a/Content.Shared/_DEN/Tool/Components/ToolOrganPerformerComponent.cs b/Content.Shared/_DEN/Tool/Components/ToolOrganPerformerComponent.cs new file mode 100644 index 0000000000..48b47ca53e --- /dev/null +++ b/Content.Shared/_DEN/Tool/Components/ToolOrganPerformerComponent.cs @@ -0,0 +1,9 @@ + +namespace Content.Shared._DEN.Tool.Components; + +/// +/// Represents an entity that can use s. +/// +[RegisterComponent] +public sealed partial class ToolOrganPerformerComponent : Component +{ } diff --git a/Content.Shared/_DEN/Tool/EntitySystems/SharedToggleToolInteractionSystem.cs b/Content.Shared/_DEN/Tool/EntitySystems/SharedToggleToolInteractionSystem.cs deleted file mode 100644 index de104ed2eb..0000000000 --- a/Content.Shared/_DEN/Tool/EntitySystems/SharedToggleToolInteractionSystem.cs +++ /dev/null @@ -1,93 +0,0 @@ -using Content.Shared.Actions; -using Content.Shared.CombatMode; -using Content.Shared.Interaction; -using Content.Shared.Popups; -using Content.Shared.Tools.Components; - -namespace Content.Shared._DEN.Tool.Components; - -public abstract partial class SharedToggleToolInteractionSystem : EntitySystem -{ - [Dependency] private SharedActionsSystem _actions = default!; - [Dependency] private SharedCombatModeSystem _combatMode = default!; - [Dependency] private SharedInteractionSystem _interaction = default!; - [Dependency] private SharedPopupSystem _popup = default!; - - public override void Initialize() - { - base.Initialize(); - - SubscribeLocalEvent(OnMapInit); - SubscribeLocalEvent(OnShutdown); - SubscribeLocalEvent(OnPerformAction); - SubscribeLocalEvent(OnUserInteractHand); - } - - private void OnMapInit(Entity ent, ref MapInitEvent args) - { - _actions.AddAction(ent.Owner, ref ent.Comp.ToolToggleActionEntity, ent.Comp.ToolToggleAction); - Dirty(ent); - } - - private void OnShutdown(Entity ent, ref ComponentShutdown args) - { - _actions.RemoveAction(ent.Owner, ent.Comp.ToolToggleActionEntity); - } - - private void OnPerformAction(Entity ent, ref ToggleToolInteractionActionEvent args) - { - if (args.Handled) - return; - - var value = !ent.Comp.IsToolEnabled; - SetToolInteractionEnabled(ent.AsNullable(), value); - - // Display message when toggled. - var msgLocId = value ? ent.Comp.ToggleOnText : ent.Comp.ToggleOffText; - if (msgLocId != null) - _popup.PopupClient(Loc.GetString(msgLocId), - args.Performer, - args.Performer); - - args.Handled = true; - } - - private void OnUserInteractHand(Entity ent, ref UserInteractHandEvent args) - { - if (args.Handled || !ent.Comp.IsToolEnabled || !HasComp(ent.Owner)) - return; - - _interaction.InteractUsing(ent.Owner, - ent.Owner, - args.Target, - Transform(args.Target).Coordinates); - - args.Handled = true; - } - - /// - /// Sets whether or not this entity can use their empty-hand interactions to perform tool actions. - /// - /// The entity to set tool interaction status. - /// If tool interactions should be enabled. - public void SetToolInteractionEnabled(Entity ent, bool enabled) - { - if (!Resolve(ent.Owner, ref ent.Comp) - || ent.Comp.IsToolEnabled == enabled) - return; - - ent.Comp.IsToolEnabled = enabled; - Dirty(ent); - - if (ent.Comp.ToolToggleActionEntity != null) - _actions.SetToggled(ent.Comp.ToolToggleActionEntity, enabled); - - if (enabled && TryComp(ent.Owner, out var combatMode)) - _combatMode.SetInCombatMode(ent.Owner, false, combatMode); - } -} - -/// -/// Event fired when the "toggle tool interaction" action is used. -/// -public sealed partial class ToggleToolInteractionActionEvent : InstantActionEvent; diff --git a/Content.Shared/_DEN/Tool/EntitySystems/SharedToolOrganSystem.cs b/Content.Shared/_DEN/Tool/EntitySystems/SharedToolOrganSystem.cs new file mode 100644 index 0000000000..8eb853af24 --- /dev/null +++ b/Content.Shared/_DEN/Tool/EntitySystems/SharedToolOrganSystem.cs @@ -0,0 +1,149 @@ +using Content.Shared.Actions; +using Content.Shared.Body; +using Content.Shared.CombatMode; +using Content.Shared.Inventory.VirtualItem; +using Content.Shared.Popups; +using Robust.Shared.Containers; +using Robust.Shared.Utility; + +namespace Content.Shared._DEN.Tool.Components; + +/// +/// System logic for organs that contain pseudo-tools. +/// Using these tools is toggled via action. +/// +public abstract partial class SharedToolOrganSystem : EntitySystem +{ + [Dependency] private SharedActionsSystem _actions = default!; + [Dependency] private BodySystem _body = default!; + [Dependency] private SharedCombatModeSystem _combatMode = default!; + [Dependency] private SharedContainerSystem _container = default!; + [Dependency] private SharedVirtualItemSystem _virtualItem = default!; + [Dependency] private SharedPopupSystem _popup = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(_body.RelayEvent); + + SubscribeLocalEvent(OnComponentInit); + SubscribeLocalEvent(OnOrganGotInserted); + SubscribeLocalEvent(OnOrganRemoved); + SubscribeLocalEvent>(OnGetToolOrgan); + + SubscribeLocalEvent(OnPerformAction); + } + + private void OnComponentInit(Entity ent, ref ComponentInit args) + { + ent.Comp.ItemContainer = _container.EnsureContainer(ent.Owner, ent.Comp.ContainerId); + + var toolEnt = PredictedSpawnAtPosition(ent.Comp.Item, Transform(ent.Owner).Coordinates); + if (!_container.Insert(toolEnt, ent.Comp.ItemContainer)) + { + DebugTools.Assert($"Could not insert {ToPrettyString(toolEnt)} into {ToPrettyString(ent)}. This is likely due to broken YAML!"); + PredictedDel(toolEnt); + } + else + ent.Comp.ItemEntity = toolEnt; + + Dirty(ent); + } + + private void OnOrganGotInserted(Entity ent, ref OrganGotInsertedEvent args) + { + _actions.AddAction(args.Target, ref ent.Comp.ToolToggleActionEntity, ent.Comp.ToolToggleAction); + EnsureComp(ent.Owner); + Dirty(ent); + } + + private void OnOrganRemoved(Entity ent, ref OrganGotRemovedEvent args) + { + _actions.RemoveAction(args.Target, ent.Comp.ToolToggleActionEntity); + TrySetToolInteractionEnabled(ent.Owner, false); + Dirty(ent); + } + + private void OnPerformAction(Entity ent, ref ToggleToolInteractionActionEvent args) + { + if (args.Handled) + return; + + var ev = new GetToolOrganEvent(Action: args.Action, Mob: ent.Owner); + RaiseLocalEvent(ent.Owner, ref ev); + + if (ev.Handled) + args.Handled = true; + } + + private void OnGetToolOrgan(Entity ent, ref BodyRelayedEvent args) + { + if (args.Args.Handled || args.Args.Action != ent.Comp.ToolToggleActionEntity) + return; + + var mob = args.Args.Mob; + var value = !ent.Comp.IsToolEnabled; + if (!TrySetToolInteractionEnabled(ent.AsNullable(), value, mob)) + return; + + // Display message when toggled. + var msgLocId = value ? ent.Comp.ToggleOnText : ent.Comp.ToggleOffText; + if (msgLocId != null) + _popup.PopupClient(Loc.GetString(msgLocId), mob, mob); + + args.Args = args.Args with { Handled = true }; + } + + /// + /// Sets whether or not this entity can use their empty-hand interactions to perform tool actions. + /// + /// The entity to set tool interaction status. + /// If tool interactions should be enabled. + public bool TrySetToolInteractionEnabled(Entity ent, bool enabled, EntityUid? mob = null) + { + if (!Resolve(ent.Owner, ref ent.Comp) // Not a tool organ + || ent.Comp.IsToolEnabled == enabled // Value is already set to this + || ent.Comp.ItemEntity == null // No tool entity + || TerminatingOrDeleted(ent.Comp.ItemEntity) // Tool entity is being deleted + || !TryComp(ent.Owner, out var organ) // Not an organ + || organ.Body == null) // Not attached to a mob + return false; + + mob ??= organ.Body.Value; + var toolEnt = ent.Comp.ItemEntity.Value; + + // Put the entity in your hands as a virtual entity + if (enabled && !_virtualItem.TrySpawnVirtualItemInHand(toolEnt, mob.Value, dropOthers: false)) + return false; + else if (!enabled) + _virtualItem.DeleteInHandsMatching(mob.Value, toolEnt); + + // Set the enabled state of the tool + ent.Comp.IsToolEnabled = enabled; + Dirty(ent); + + if (ent.Comp.ToolToggleActionEntity != null) + _actions.SetToggled(ent.Comp.ToolToggleActionEntity, enabled); + + if (enabled && TryComp(mob, out var combatMode)) + _combatMode.SetInCombatMode(mob.Value, false, combatMode); + + return true; + } +} + +/// +/// Event fired when the "toggle tool interaction" action is used. +/// +public sealed partial class ToggleToolInteractionActionEvent : InstantActionEvent +{ } + +/// +/// Event fired to attempt to get the appropriate tool entity when it is toggled on. +/// +/// The mob that is using this tool entity. +/// The action that triggered this. +/// Whether or not this event has been handled. +[ByRefEvent] +public record struct GetToolOrganEvent(EntityUid Action, EntityUid Mob, bool Handled = false); diff --git a/Resources/Prototypes/_DEN/Body/Species/rodentia.yml b/Resources/Prototypes/_DEN/Body/Species/rodentia.yml index 08687a120b..83c1c38411 100644 --- a/Resources/Prototypes/_DEN/Body/Species/rodentia.yml +++ b/Resources/Prototypes/_DEN/Body/Species/rodentia.yml @@ -104,6 +104,7 @@ types: Piercing: 3 Slash: 2 + - type: ToolOrganPerformer # region Base organs @@ -166,6 +167,9 @@ - enum.HumanoidVisualLayers.Snout - enum.HumanoidVisualLayers.HeadTop - enum.HumanoidVisualLayers.HeadSide + - type: ToolOrgan # Incisors + toolToggleAction: ActionGnawingToggle + item: Wirecutter - type: entity parent: [ OrganBaseArmLeft, OrganRodentiaExternal ] From 068e7ce1a4a78603ca511a963703c92fd2ceb45e Mon Sep 17 00:00:00 2001 From: portfiend <109661617+portfiend@users.noreply.github.com> Date: Sat, 1 Aug 2026 14:42:25 -0500 Subject: [PATCH 23/26] let rodentia rummage through vneding machines --- .../Structures/Machines/vending_machines.yml | 42 ++ .../Prototypes/_DEN/Body/Species/rodentia.yml | 1 + .../_DEN/Catalog/Fills/Rummage/drinks.yml | 361 ++++++++++++++++++ .../_DEN/Catalog/Fills/Rummage/food.yml | 152 ++++++++ .../_DEN/Catalog/Fills/Rummage/machines.yml | 40 ++ 5 files changed, 596 insertions(+) create mode 100644 Resources/Prototypes/_DEN/Catalog/Fills/Rummage/drinks.yml create mode 100644 Resources/Prototypes/_DEN/Catalog/Fills/Rummage/food.yml create mode 100644 Resources/Prototypes/_DEN/Catalog/Fills/Rummage/machines.yml diff --git a/Resources/Prototypes/Entities/Structures/Machines/vending_machines.yml b/Resources/Prototypes/Entities/Structures/Machines/vending_machines.yml index 2abfba6732..2dea1bb83d 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/vending_machines.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/vending_machines.yml @@ -509,6 +509,9 @@ radius: 1.5 energy: 2.0 color: "#ad7c4b" + - type: Rummageable # DEN - make rummageable + table: !type:NestedSelector + tableId: RummageableVendingMachineHotDrinks - type: entity parent: VendingMachine @@ -545,6 +548,9 @@ radius: 1.5 energy: 3.0 color: "#3c5eb5" + - type: Rummageable # DEN - make rummageable + table: !type:NestedSelector + tableId: RummageableVendingMachineCola - type: entity parent: VendingMachineCola @@ -609,6 +615,9 @@ radius: 1.5 energy: 3.0 color: "#44964A" + - type: Rummageable # DEN - make rummageable + table: !type:NestedSelector + tableId: RummageableVendingMachineSpaceUp - type: entity parent: VendingMachineCola @@ -631,6 +640,9 @@ radius: 1.5 energy: 3.0 color: "#CBC6BE" + - type: Rummageable # DEN - make rummageable + table: !type:NestedSelector + tableId: RummageableVendingMachineSoda - type: entity parent: VendingMachineCola @@ -654,6 +666,9 @@ radius: 1.5 energy: 3.0 color: "#D3A44D" + - type: Rummageable # DEN - make rummageable + table: !type:NestedSelector + tableId: RummageableVendingMachineStarkist - type: entity parent: VendingMachine @@ -688,6 +703,9 @@ radius: 1.5 energy: 3.0 color: "#66538F" + - type: Rummageable # DEN - make rummageable + table: !type:NestedSelector + tableId: RummageableVendingMachineShamblersJuice - type: entity parent: VendingMachine @@ -724,6 +742,9 @@ radius: 1.5 energy: 3.0 color: "#6927C5" + - type: Rummageable # DEN - make rummageable + table: !type:NestedSelector + tableId: RummageableVendingMachineShamblersJuice - type: entity parent: VendingMachine @@ -760,6 +781,9 @@ radius: 1.5 energy: 3.0 color: "#D82929" + - type: Rummageable # DEN - make rummageable + table: !type:NestedSelector + tableId: RummageableVendingMachineDrGibb - type: entity parent: VendingMachine @@ -796,6 +820,9 @@ radius: 1.5 energy: 3.0 color: "#00E645" + - type: Rummageable # DEN - make rummageable + table: !type:NestedSelector + tableId: RummageableVendingMachineSmite - type: entity parent: VendingMachine @@ -892,6 +919,9 @@ radius: 1.5 energy: 3.0 color: "#6148c7" + - type: Rummageable # DEN - make rummageable + table: !type:NestedSelector + tableId: RummageableVendingMachineDiscountDans - type: entity parent: VendingMachine @@ -1126,6 +1156,9 @@ radius: 1.5 energy: 3.0 color: "#c73434" + - type: Rummageable # DEN - make rummageable + table: !type:NestedSelector + tableId: RummageableVendingMachineGetmoreChocolate - type: entity parent: VendingMachineSnack @@ -1156,6 +1189,9 @@ radius: 1.5 energy: 3.0 color: "#737785" + - type: Rummageable # DEN - make rummageable + table: !type:NestedSelector + tableId: RummageableVendingMachineSustenance - type: entity parent: VendingMachineSnack @@ -1273,6 +1309,9 @@ energy: 3.0 color: "#389690" - type: RussianAccent + - type: Rummageable # DEN - make rummageable + table: !type:NestedSelector + tableId: RummageableVendingMachineBoda - type: entity parent: VendingMachine @@ -1471,6 +1510,9 @@ radius: 1.5 energy: 3.0 color: "#ffe599" + - type: Rummageable # DEN - make rummageable + table: !type:NestedSelector + tableId: RummageableVendingMachineChang - type: entity parent: VendingMachine diff --git a/Resources/Prototypes/_DEN/Body/Species/rodentia.yml b/Resources/Prototypes/_DEN/Body/Species/rodentia.yml index 83c1c38411..402a0a6b9c 100644 --- a/Resources/Prototypes/_DEN/Body/Species/rodentia.yml +++ b/Resources/Prototypes/_DEN/Body/Species/rodentia.yml @@ -104,6 +104,7 @@ types: Piercing: 3 Slash: 2 + - type: Rummager # Can rummage through objects - type: ToolOrganPerformer # region Base organs diff --git a/Resources/Prototypes/_DEN/Catalog/Fills/Rummage/drinks.yml b/Resources/Prototypes/_DEN/Catalog/Fills/Rummage/drinks.yml new file mode 100644 index 0000000000..bd65b4c792 --- /dev/null +++ b/Resources/Prototypes/_DEN/Catalog/Fills/Rummage/drinks.yml @@ -0,0 +1,361 @@ +- type: entityTable + id: RummageableVendingMachineBoda + table: !type:GroupSelector + children: + - &lootGeneric + !type:NestedSelector + tableId: RummageableVendingMachineGeneric + weight: 50 + - !type:NestedSelector + tableId: TrashVendingMachineBoda + weight: 30 + - !type:NestedSelector + tableId: LootVendingMachineBoda + weight: 20 + +- type: entityTable + id: RummageableVendingMachineCola + table: !type:GroupSelector + children: + - *lootGeneric + - !type:NestedSelector + tableId: TrashVendingMachineCola + weight: 30 + - !type:NestedSelector + tableId: LootVendingMachineCola + weight: 20 + +- type: entityTable + id: RummageableVendingMachineDrGibb + table: !type:GroupSelector + children: + - *lootGeneric + - !type:NestedSelector + tableId: TrashVendingMachineDrGibb + weight: 30 + - !type:NestedSelector + tableId: LootVendingMachineDrGibb + weight: 20 + +- type: entityTable + id: RummageableVendingMachineHotDrinks + table: !type:GroupSelector + children: + - *lootGeneric + - !type:NestedSelector + tableId: TrashVendingMachineHotDrinks + weight: 30 + - !type:NestedSelector + tableId: LootVendingMachineHotDrinks + weight: 20 + +- type: entityTable + id: RummageableVendingMachinePwrGame + table: !type:GroupSelector + children: + - *lootGeneric + - !type:NestedSelector + tableId: TrashVendingMachinePwrGame + weight: 30 + - !type:NestedSelector + tableId: LootVendingMachinePwrGame + weight: 20 + +- type: entityTable + id: RummageableVendingMachineShamblersJuice + table: !type:GroupSelector + children: + - *lootGeneric + - !type:NestedSelector + tableId: TrashVendingMachineShamblersJuice + weight: 30 + - !type:NestedSelector + tableId: LootVendingMachineShamblersJuice + weight: 20 + +- type: entityTable + id: RummageableVendingMachineSmite + table: !type:GroupSelector + children: + - *lootGeneric + - !type:NestedSelector + tableId: TrashVendingMachineSmite + weight: 30 + - !type:NestedSelector + tableId: LootVendingMachineSmite + weight: 20 + +- type: entityTable + id: RummageableVendingMachineSoda + table: !type:GroupSelector + children: + - *lootGeneric + - !type:NestedSelector + tableId: TrashVendingMachineSoda + weight: 30 + - !type:NestedSelector + tableId: LootVendingMachineSoda + weight: 20 + +- type: entityTable + id: RummageableVendingMachineSpaceUp + table: !type:GroupSelector + children: + - *lootGeneric + - !type:NestedSelector + tableId: TrashVendingMachineSpaceUp + weight: 30 + - !type:NestedSelector + tableId: LootVendingMachineSpaceUp + weight: 20 + +- type: entityTable + id: RummageableVendingMachineStarkist + table: !type:GroupSelector + children: + - *lootGeneric + - !type:NestedSelector + tableId: TrashVendingMachineStarkist + weight: 30 + - !type:NestedSelector + tableId: LootVendingMachineStarkist + weight: 20 + +## Common + +- type: entityTable + id: LootVendingMachineDrinksCommon + table: !type:GroupSelector + children: + - id: DrinkGrapeCan + - id: DrinkRootBeerCan + - id: DrinkIcedTeaCan + - id: DrinkSolDryCan + - id: DrinkFourteenLokoCan + - id: DrinkChangelingStingCan + +- type: entityTable + id: TrashVendingMachineDrinksCommon + table: !type:GroupSelector + children: # TODO: Trashify + - id: DrinkGrapeCan + - id: DrinkRootBeerCan + - id: DrinkIcedTeaCan + - id: DrinkSolDryCan + - id: DrinkFourteenLokoCan + - id: DrinkChangelingStingCan + +# Loot + +- type: entityTable + id: LootVendingMachineBoda + table: !type:GroupSelector + children: + - id: DrinkSodaWaterCan + weight: 5 + - id: DrinkColaCan + +- type: entityTable + id: LootVendingMachineCola + table: !type:GroupSelector + children: + - id: DrinkColaCan + weight: 2 + - id: DrinkLemonLimeCan + - id: DrinkLemonLimeCranberryCan + - &commonLootDrinks + !type:NestedSelector + tableId: LootVendingMachineDrinksCommon + weight: 6 + +- type: entityTable + id: LootVendingMachineDrGibb + table: !type:GroupSelector + children: + - id: DrinkDrGibbCan + - id: DrinkLemonLimeCan + - id: DrinkLemonLimeCranberryCan + weight: 3 + - *commonLootDrinks + +- type: entityTable + id: LootVendingMachineHotDrinks + table: !type:GroupSelector + children: + - id: DrinkHotCoffee + - id: DrinkCafeLatte + - id: DrinkTeacup + - id: DrinkGreenTea + - id: DrinkHotCoco + +- type: entityTable + id: LootVendingMachinePwrGame + table: !type:GroupSelector + children: + - id: DrinkPwrGameCan + weight: 2 + - id: DrinkEnergyDrinkCan + weight: 2 + - id: DrinkDrGibbCan + weight: 1.5 + - *commonLootDrinks + +- type: entityTable + id: LootVendingMachineShamblersJuice + table: !type:GroupSelector + children: + - id: DrinkShamblersJuiceCan + weight: 2 + - id: DrinkLemonLimeCan + - id: DrinkLemonLimeCranberryCan + - *commonLootDrinks + +- type: entityTable + id: LootVendingMachineSmite + table: !type:GroupSelector + children: + - id: DrinkLemonLimeCan + weight: 4 + - id: DrinkLemonLimeCranberryCan + weight: 3 + - id: DrinkColaCan + - id: DrinkSolDryCan + - id: DrinkStarkistCan + - id: DrinkChangelingStingCan + +- type: entityTable + id: LootVendingMachineSoda + table: !type:GroupSelector + children: + - id: DrinkColaCan + weight: 2 + - id: DrinkLemonLimeCan + - id: DrinkLemonLimeCranberryCan + - *commonLootDrinks + +- type: entityTable + id: LootVendingMachineSpaceUp + table: !type:GroupSelector + children: + - id: DrinkSpaceUpCan + weight: 3 + - id: DrinkSpaceMountainWindCan + weight: 3 + - *commonLootDrinks + +- type: entityTable + id: LootVendingMachineStarkist + table: !type:GroupSelector + children: + - id: DrinkStarkistCan + weight: 3 + - id: DrinkLemonLimeCan + - id: DrinkLemonLimeCranberryCan + - *commonLootDrinks + +# Trash + +- type: entityTable + id: TrashVendingMachineBoda + table: !type:GroupSelector + children: # TODO: Trashify + - id: DrinkSodaWaterCan + weight: 5 + - id: DrinkColaCan + +- type: entityTable + id: TrashVendingMachineCola + table: !type:GroupSelector + children: # TODO: Trashify + - id: DrinkColaCan + weight: 2 + - id: DrinkLemonLimeCan + - id: DrinkLemonLimeCranberryCan + - &commonTrashDrinks + !type:NestedSelector + tableId: TrashVendingMachineDrinksCommon + weight: 6 + +- type: entityTable + id: TrashVendingMachineDrGibb + table: !type:GroupSelector + children: # TODO: Trashify + - id: DrinkDrGibbCan + - id: DrinkLemonLimeCan + - id: DrinkLemonLimeCranberryCan + weight: 3 + - *commonTrashDrinks + +- type: entityTable + id: TrashVendingMachineHotDrinks + table: !type:GroupSelector + children: # TODO: Trashify + - id: DrinkHotCoffee + - id: DrinkCafeLatte + - id: DrinkTeacup + - id: DrinkGreenTea + - id: DrinkHotCoco + +- type: entityTable + id: TrashVendingMachinePwrGame + table: !type:GroupSelector + children: # TODO: Trashify + - id: DrinkPwrGameCan + weight: 2 + - id: DrinkEnergyDrinkCan + weight: 2 + - id: DrinkDrGibbCan + weight: 1.5 + - *commonTrashDrinks + +- type: entityTable + id: TrashVendingMachineShamblersJuice + table: !type:GroupSelector + children: # TODO: Trashify + - id: DrinkShamblersJuiceCan + weight: 2 + - id: DrinkLemonLimeCan + - id: DrinkLemonLimeCranberryCan + - *commonTrashDrinks + +- type: entityTable + id: TrashVendingMachineSmite + table: !type:GroupSelector + children: # TODO: Trashify + - id: DrinkLemonLimeCan + weight: 4 + - id: DrinkLemonLimeCranberryCan + weight: 3 + - id: DrinkColaCan + - id: DrinkSolDryCan + - id: DrinkStarkistCan + - id: DrinkChangelingStingCan + +- type: entityTable + id: TrashVendingMachineSoda + table: !type:GroupSelector + children: # TODO: Trashify + - id: DrinkColaCan + - id: DrinkLemonLimeCan + - id: DrinkLemonLimeCranberryCan + - *commonTrashDrinks + +- type: entityTable + id: TrashVendingMachineSpaceUp + table: !type:GroupSelector + children: # TODO: Trashify + - id: DrinkSpaceUpCan + weight: 3 + - id: DrinkSpaceMountainWindCan + weight: 3 + - *commonTrashDrinks + +- type: entityTable + id: TrashVendingMachineStarkist + table: !type:GroupSelector + children: # TODO: Trashify + - id: DrinkStarkistCan + weight: 3 + - id: DrinkLemonLimeCan + - id: DrinkLemonLimeCranberryCan + - *commonTrashDrinks diff --git a/Resources/Prototypes/_DEN/Catalog/Fills/Rummage/food.yml b/Resources/Prototypes/_DEN/Catalog/Fills/Rummage/food.yml new file mode 100644 index 0000000000..0841fa1d4c --- /dev/null +++ b/Resources/Prototypes/_DEN/Catalog/Fills/Rummage/food.yml @@ -0,0 +1,152 @@ +- type: entityTable + id: RummageableVendingMachineChang + table: !type:GroupSelector + children: + - &lootGeneric + !type:NestedSelector + tableId: RummageableVendingMachineGeneric + weight: 50 + - !type:NestedSelector + tableId: TrashVendingMachineChang + weight: 30 + - !type:NestedSelector + tableId: LootVendingMachineChang + weight: 20 + +- type: entityTable + id: RummageableVendingMachineDiscountDans + table: !type:GroupSelector + children: + - *lootGeneric + - !type:NestedSelector + tableId: TrashVendingMachineDiscountDans + weight: 30 + - !type:NestedSelector + tableId: LootVendingMachineDiscountDans + weight: 20 + +- type: entityTable + id: RummageableVendingMachineGetmoreChocolate + table: !type:GroupSelector + children: + - *lootGeneric + - !type:NestedSelector + tableId: TrashVendingMachineGetmoreChocolate + weight: 30 + - !type:NestedSelector + tableId: LootVendingMachineGetmoreChocolate + weight: 20 + +- type: entityTable + id: RummageableVendingMachineSustenance + table: !type:GroupSelector + children: + - *lootGeneric + - !type:NestedSelector + tableId: TrashVendingMachineSustenance + weight: 30 + - !type:NestedSelector + tableId: LootVendingMachineSustenance + weight: 20 + +## Loot + +- type: entityTable + id: LootVendingMachineChang + table: !type:GroupSelector + children: + - id: FoodCondimentPacketSoy + - id: FoodSnackCookieFortune + - id: DrinkRamen + - id: DrinkHellRamen + - id: FoodSnackChowMein + - id: FoodSnackDanDanNoodles + +- type: entityTable + id: LootVendingMachineDiscountDans + table: !type:GroupSelector + children: + - id: FoodSnackCheesie + - id: FoodSnackChips + - id: FoodSnackBoritos + - id: DrinkEnergyDrinkCan + - id: FoodSnackPopcorn + - id: FoodSnackEnergy + - id: FoodSnackDanDanNoodles + +- type: entityTable + id: LootVendingMachineGetmoreChocolate + table: !type:GroupSelector + children: + - id: FoodSnackRaisins + - id: FoodSnackChocolate + - id: FoodSnackCnDs + - id: FoodSnackPistachios + - id: FoodSnackSus + - id: FoodSnackSemki + - id: FoodSnackSyndi + weight: 0.5 + +- type: entityTable + id: LootVendingMachineSustenance + table: !type:GroupSelector + children: + - id: FoodSnackNutribrick + - id: FoodSnackMREBrownie + - id: FoodCondimentPacketKetchup + - id: FoodTinMRE + - id: FoodTinBeans + - id: FoodTinPeaches + - id: DrinkBeerCan + weight: 0.5 + +## Trash + +- type: entityTable + id: TrashVendingMachineChang + table: !type:GroupSelector + children: # TODO: Trashify + - id: FoodCondimentPacketSoy + - id: FoodSnackCookieFortune + - id: DrinkRamen + - id: DrinkHellRamen + - id: FoodSnackChowMein + - id: FoodSnackDanDanNoodles + +- type: entityTable + id: TrashVendingMachineDiscountDans + table: !type:GroupSelector + children: # TODO: Trashify + - id: FoodSnackCheesie + - id: FoodSnackChips + - id: FoodSnackBoritos + - id: DrinkEnergyDrinkCan + - id: FoodSnackPopcorn + - id: FoodSnackEnergy + - id: FoodSnackDanDanNoodles + +- type: entityTable + id: TrashVendingMachineGetmoreChocolate + table: !type:GroupSelector + children: # TODO: Trashify + - id: FoodSnackRaisins + - id: FoodSnackChocolate + - id: FoodSnackCnDs + - id: FoodSnackPistachios + - id: FoodSnackSus + - id: FoodSnackSemki + - id: FoodSnackSyndi + weight: 0.5 + +- type: entityTable + id: TrashVendingMachineSustenance + table: !type:GroupSelector + children: # TODO: Trashify + - id: FoodSnackNutribrick + - id: FoodSnackMREBrownie + - id: FoodCondimentPacketKetchup + - id: FoodTinMRE + - id: FoodTinBeans + - id: FoodTinPeaches + - id: DrinkBeerCan + weight: 0.5 diff --git a/Resources/Prototypes/_DEN/Catalog/Fills/Rummage/machines.yml b/Resources/Prototypes/_DEN/Catalog/Fills/Rummage/machines.yml new file mode 100644 index 0000000000..1c963e0360 --- /dev/null +++ b/Resources/Prototypes/_DEN/Catalog/Fills/Rummage/machines.yml @@ -0,0 +1,40 @@ +- type: entityTable + id: RummageableVendingMachineGeneric + table: !type:GroupSelector + children: + # Miscellaneous trash + - !type:GroupSelector + weight: 30 + children: + - !type:NestedSelector + tableId: AllBananaPeelsTable + - id: CigaretteSpent + - id: CigarSpent + weight: 0.3 + - id: FoodFrozenPopsicleTrash + weight: 0.75 + - id: BrokenBottle + - id: ShardGlass + # Spesos + - !type:GroupSelector + weight: 15 + children: + - id: SpaceCash10 + weight: 20 + - id: SpaceCash100 + weight: 10 + - id: SpaceCash500 + weight: 5 + - id: SpaceCash1000 + weight: 1 + # Coins + - !type:NestedSelector + tableId: TreasureCoinPile + weight: 10 + # Vermin + - !type:GroupSelector + weight: 3 + children: + - id: MobCockroach + - id: MobMouse + - id: MobMouseDead From 021b388c16da46d4c898ef30229296f24120de3c Mon Sep 17 00:00:00 2001 From: portfiend <109661617+portfiend@users.noreply.github.com> Date: Sat, 1 Aug 2026 15:11:56 -0500 Subject: [PATCH 24/26] trashify vending machibe tables --- .../_DEN/Catalog/Fills/Rummage/drinks.yml | 100 +++++++++--------- .../_DEN/Catalog/Fills/Rummage/food.yml | 60 +++++------ .../Consumable/Drinks/drinks_empty.yml | 100 ++++++++++++++++++ .../Consumable/Food/Containers/empty.yml | 8 ++ 4 files changed, 187 insertions(+), 81 deletions(-) create mode 100644 Resources/Prototypes/_DEN/Entities/Objects/Consumable/Drinks/drinks_empty.yml create mode 100644 Resources/Prototypes/_DEN/Entities/Objects/Consumable/Food/Containers/empty.yml diff --git a/Resources/Prototypes/_DEN/Catalog/Fills/Rummage/drinks.yml b/Resources/Prototypes/_DEN/Catalog/Fills/Rummage/drinks.yml index bd65b4c792..e72ec8ae46 100644 --- a/Resources/Prototypes/_DEN/Catalog/Fills/Rummage/drinks.yml +++ b/Resources/Prototypes/_DEN/Catalog/Fills/Rummage/drinks.yml @@ -137,13 +137,13 @@ - type: entityTable id: TrashVendingMachineDrinksCommon table: !type:GroupSelector - children: # TODO: Trashify - - id: DrinkGrapeCan - - id: DrinkRootBeerCan - - id: DrinkIcedTeaCan - - id: DrinkSolDryCan - - id: DrinkFourteenLokoCan - - id: DrinkChangelingStingCan + children: + - id: DrinkGrapeCanEmpty + - id: DrinkRootBeerCanEmpty + - id: DrinkIcedTeaCanEmpty + - id: DrinkSolDryCanEmpty + - id: DrinkFourteenLokoCanEmpty + - id: DrinkChangelingStingCanEmpty # Loot @@ -258,19 +258,19 @@ - type: entityTable id: TrashVendingMachineBoda table: !type:GroupSelector - children: # TODO: Trashify - - id: DrinkSodaWaterCan + children: + - id: DrinkSodaWaterCanEmpty weight: 5 - - id: DrinkColaCan + - id: DrinkColaCanEmpty - type: entityTable id: TrashVendingMachineCola table: !type:GroupSelector - children: # TODO: Trashify - - id: DrinkColaCan + children: + - id: DrinkColaCanEmpty weight: 2 - - id: DrinkLemonLimeCan - - id: DrinkLemonLimeCranberryCan + - id: DrinkLemonLimeCanEmpty + - id: DrinkLemonLimeCranberryCanEmpty - &commonTrashDrinks !type:NestedSelector tableId: TrashVendingMachineDrinksCommon @@ -279,83 +279,83 @@ - type: entityTable id: TrashVendingMachineDrGibb table: !type:GroupSelector - children: # TODO: Trashify - - id: DrinkDrGibbCan - - id: DrinkLemonLimeCan - - id: DrinkLemonLimeCranberryCan + children: + - id: DrinkDrGibbCanEmpty + - id: DrinkLemonLimeCanEmpty + - id: DrinkLemonLimeCranberryCanEmpty weight: 3 - *commonTrashDrinks - type: entityTable id: TrashVendingMachineHotDrinks table: !type:GroupSelector - children: # TODO: Trashify - - id: DrinkHotCoffee - - id: DrinkCafeLatte - - id: DrinkTeacup - - id: DrinkGreenTea - - id: DrinkHotCoco + children: + - id: DrinkHotCoffeeEmpty + - id: DrinkCafeLatteEmpty + - id: DrinkTeacupEmpty + - id: DrinkGreenTeaEmpty + - id: DrinkHotCocoEmpty - type: entityTable id: TrashVendingMachinePwrGame table: !type:GroupSelector - children: # TODO: Trashify - - id: DrinkPwrGameCan + children: + - id: DrinkPwrGameCanEmpty weight: 2 - - id: DrinkEnergyDrinkCan + - id: DrinkEnergyDrinkCanEmpty weight: 2 - - id: DrinkDrGibbCan + - id: DrinkDrGibbCanEmpty weight: 1.5 - *commonTrashDrinks - type: entityTable id: TrashVendingMachineShamblersJuice table: !type:GroupSelector - children: # TODO: Trashify - - id: DrinkShamblersJuiceCan + children: + - id: DrinkShamblersJuiceCanEmpty weight: 2 - - id: DrinkLemonLimeCan - - id: DrinkLemonLimeCranberryCan + - id: DrinkLemonLimeCanEmpty + - id: DrinkLemonLimeCranberryCanEmpty - *commonTrashDrinks - type: entityTable id: TrashVendingMachineSmite table: !type:GroupSelector - children: # TODO: Trashify - - id: DrinkLemonLimeCan + children: + - id: DrinkLemonLimeCanEmpty weight: 4 - - id: DrinkLemonLimeCranberryCan + - id: DrinkLemonLimeCranberryCanEmpty weight: 3 - - id: DrinkColaCan - - id: DrinkSolDryCan - - id: DrinkStarkistCan - - id: DrinkChangelingStingCan + - id: DrinkColaCanEmpty + - id: DrinkSolDryCanEmpty + - id: DrinkStarkistCanEmpty + - id: DrinkChangelingStingCanEmpty - type: entityTable id: TrashVendingMachineSoda table: !type:GroupSelector - children: # TODO: Trashify - - id: DrinkColaCan - - id: DrinkLemonLimeCan - - id: DrinkLemonLimeCranberryCan + children: + - id: DrinkColaCanEmpty + - id: DrinkLemonLimeCanEmpty + - id: DrinkLemonLimeCranberryCanEmpty - *commonTrashDrinks - type: entityTable id: TrashVendingMachineSpaceUp table: !type:GroupSelector - children: # TODO: Trashify - - id: DrinkSpaceUpCan + children: + - id: DrinkSpaceUpCanEmpty weight: 3 - - id: DrinkSpaceMountainWindCan + - id: DrinkSpaceMountainWindCanEmpty weight: 3 - *commonTrashDrinks - type: entityTable id: TrashVendingMachineStarkist table: !type:GroupSelector - children: # TODO: Trashify - - id: DrinkStarkistCan + children: + - id: DrinkStarkistCanEmpty weight: 3 - - id: DrinkLemonLimeCan - - id: DrinkLemonLimeCranberryCan + - id: DrinkLemonLimeCanEmpty + - id: DrinkLemonLimeCranberryCanEmpty - *commonTrashDrinks diff --git a/Resources/Prototypes/_DEN/Catalog/Fills/Rummage/food.yml b/Resources/Prototypes/_DEN/Catalog/Fills/Rummage/food.yml index 0841fa1d4c..ce8a85df14 100644 --- a/Resources/Prototypes/_DEN/Catalog/Fills/Rummage/food.yml +++ b/Resources/Prototypes/_DEN/Catalog/Fills/Rummage/food.yml @@ -105,48 +105,46 @@ - type: entityTable id: TrashVendingMachineChang table: !type:GroupSelector - children: # TODO: Trashify - - id: FoodCondimentPacketSoy - - id: FoodSnackCookieFortune - - id: DrinkRamen - - id: DrinkHellRamen - - id: FoodSnackChowMein - - id: FoodSnackDanDanNoodles + children: + - id: FoodCondimentPacketEmpty + - id: FoodCookieFortune + - id: FoodPacketCupRamenTrash + - id: FoodPacketChowMeinTrash + - id: FoodPacketDanDanTrash - type: entityTable id: TrashVendingMachineDiscountDans table: !type:GroupSelector - children: # TODO: Trashify - - id: FoodSnackCheesie - - id: FoodSnackChips - - id: FoodSnackBoritos - - id: DrinkEnergyDrinkCan - - id: FoodSnackPopcorn - - id: FoodSnackEnergy - - id: FoodSnackDanDanNoodles + children: + - id: FoodPacketCheesieTrash + - id: FoodPacketChipsTrash + - id: FoodPacketBoritosTrash + - id: DrinkEnergyDrinkCanEmpty + - id: FoodPacketPopcornTrash + - id: FoodPacketEnergyTrash + - id: FoodPacketDanDanTrash - type: entityTable id: TrashVendingMachineGetmoreChocolate table: !type:GroupSelector - children: # TODO: Trashify - - id: FoodSnackRaisins - - id: FoodSnackChocolate - - id: FoodSnackCnDs - - id: FoodSnackPistachios - - id: FoodSnackSus - - id: FoodSnackSemki - - id: FoodSnackSyndi + children: + - id: FoodPacketRaisinsTrash + - id: FoodPacketChocolateTrash + - id: FoodPacketCnDsTrash + - id: FoodPacketPistachioTrash + - id: FoodPacketSusTrash + - id: FoodPacketSemkiTrash + - id: FoodPacketSyndiTrash weight: 0.5 - type: entityTable id: TrashVendingMachineSustenance table: !type:GroupSelector - children: # TODO: Trashify - - id: FoodSnackNutribrick - - id: FoodSnackMREBrownie - - id: FoodCondimentPacketKetchup - - id: FoodTinMRE - - id: FoodTinBeans - - id: FoodTinPeaches - - id: DrinkBeerCan + children: + - id: FoodPacketMRETrash + - id: FoodCondimentPacketEmpty + - id: FoodTinMRETrash + - id: FoodTinBeansTrash + - id: FoodTinPeachesTrash + - id: DrinkBeerCanEmpty weight: 0.5 diff --git a/Resources/Prototypes/_DEN/Entities/Objects/Consumable/Drinks/drinks_empty.yml b/Resources/Prototypes/_DEN/Entities/Objects/Consumable/Drinks/drinks_empty.yml new file mode 100644 index 0000000000..53ae956bee --- /dev/null +++ b/Resources/Prototypes/_DEN/Entities/Objects/Consumable/Drinks/drinks_empty.yml @@ -0,0 +1,100 @@ +- type: entity + abstract: true + id: DrinkEmpty + suffix: Empty + components: + - type: Solution + solution: + reagents: [] + +- type: entity + parent: [DrinkEmpty. DrinkBeerCan] + id: DrinkBeerCanEmpty + +- type: entity + parent: [DrinkEmpty. DrinkCafeLatte] + id: DrinkCafeLatteEmpty + +- type: entity + parent: [DrinkEmpty. DrinkChangelingStingCan] + id: DrinkChangelingStingCanEmpty + +- type: entity + parent: [DrinkEmpty. DrinkColaCan] + id: DrinkColaCanEmpty + +- type: entity + parent: [DrinkEmpty. DrinkDrGibbCan] + id: DrinkDrGibbCanEmpty + +- type: entity + parent: [DrinkEmpty. DrinkEnergyDrinkCan] + id: DrinkEnergyDrinkEmpty + +- type: entity + parent: [DrinkEmpty. DrinkFourteenLokoCan] + id: DrinkFourteenLokoCanEmpty + +- type: entity + parent: [DrinkEmpty. DrinkGrapeCan] + id: DrinkGrapeCanEmpty + +- type: entity + parent: [DrinkEmpty. DrinkGreenTea] + id: DrinkGreenTeaEmpty + +- type: entity + parent: [DrinkEmpty. DrinkHotCoco] + id: DrinkHotCocoEmpty + +- type: entity + parent: [DrinkEmpty. DrinkHotCoffee] + id: DrinkHotCoffeeEmpty + +- type: entity + parent: [DrinkEmpty. DrinkIcedTeaCan] + id: DrinkIcedTeaCanEmpty + +- type: entity + parent: [DrinkEmpty. DrinkLemonLimeCan] + id: DrinkLemonLimeCanEmpty + +- type: entity + parent: [DrinkEmpty. DrinkLemonLimeCranberryCan] + id: DrinkLemonLimeCranberryCanEmpty + +- type: entity + parent: [DrinkEmpty. DrinkPwrGameCan] + id: DrinkPwrGameCanEmpty + +- type: entity + parent: [DrinkEmpty. DrinkRootBeerCan] + id: DrinkRootBeerCanEmpty + +- type: entity + parent: [DrinkEmpty. DrinkShamblersJuiceCan] + id: DrinkShamblersJuiceCanEmpty + +- type: entity + parent: [DrinkEmpty. DrinkSodaWaterCan] + id: DrinkSodaWaterCanEmpty + +- type: entity + parent: [DrinkEmpty. DrinkSolDryCan] + id: DrinkSolDryCanEmpty + +- type: entity + parent: [DrinkEmpty. DrinkSpaceMountainWindCan] + id: DrinkSpaceMountainWindCanEmpty + +- type: entity + parent: [DrinkEmpty. DrinkSpaceUpCan] + id: DrinkSpaceUpCanEmpty + +- type: entity + parent: [DrinkEmpty. DrinkStarkistCan] + id: DrinkStarkistCanEmpty + +- type: entity + parent: [DrinkEmpty. DrinkTeacup] + id: DrinkTeacupEmpty diff --git a/Resources/Prototypes/_DEN/Entities/Objects/Consumable/Food/Containers/empty.yml b/Resources/Prototypes/_DEN/Entities/Objects/Consumable/Food/Containers/empty.yml new file mode 100644 index 0000000000..0201217730 --- /dev/null +++ b/Resources/Prototypes/_DEN/Entities/Objects/Consumable/Food/Containers/empty.yml @@ -0,0 +1,8 @@ +- type: entity + parent: BaseFoodCondimentPacket + id: FoodCondimentPacketEmpty + name: empty condiment packet + description: This can probably go in the trash. + components: + - type: Openable + opened: true From 1a07f7955ea3081817e932957bdad1a266da28f0 Mon Sep 17 00:00:00 2001 From: portfiend <109661617+portfiend@users.noreply.github.com> Date: Sat, 1 Aug 2026 15:16:16 -0500 Subject: [PATCH 25/26] oops --- .../Consumable/Drinks/drinks_empty.yml | 46 +++++++++---------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/Resources/Prototypes/_DEN/Entities/Objects/Consumable/Drinks/drinks_empty.yml b/Resources/Prototypes/_DEN/Entities/Objects/Consumable/Drinks/drinks_empty.yml index 53ae956bee..38d63071e2 100644 --- a/Resources/Prototypes/_DEN/Entities/Objects/Consumable/Drinks/drinks_empty.yml +++ b/Resources/Prototypes/_DEN/Entities/Objects/Consumable/Drinks/drinks_empty.yml @@ -8,93 +8,93 @@ reagents: [] - type: entity - parent: [DrinkEmpty. DrinkBeerCan] + parent: [DrinkEmpty, DrinkBeerCan] id: DrinkBeerCanEmpty - type: entity - parent: [DrinkEmpty. DrinkCafeLatte] + parent: [DrinkEmpty, DrinkCafeLatte] id: DrinkCafeLatteEmpty - type: entity - parent: [DrinkEmpty. DrinkChangelingStingCan] + parent: [DrinkEmpty, DrinkChangelingStingCan] id: DrinkChangelingStingCanEmpty - type: entity - parent: [DrinkEmpty. DrinkColaCan] + parent: [DrinkEmpty, DrinkColaCan] id: DrinkColaCanEmpty - type: entity - parent: [DrinkEmpty. DrinkDrGibbCan] + parent: [DrinkEmpty, DrinkDrGibbCan] id: DrinkDrGibbCanEmpty - type: entity - parent: [DrinkEmpty. DrinkEnergyDrinkCan] + parent: [DrinkEmpty, DrinkEnergyDrinkCan] id: DrinkEnergyDrinkEmpty - type: entity - parent: [DrinkEmpty. DrinkFourteenLokoCan] + parent: [DrinkEmpty, DrinkFourteenLokoCan] id: DrinkFourteenLokoCanEmpty - type: entity - parent: [DrinkEmpty. DrinkGrapeCan] + parent: [DrinkEmpty, DrinkGrapeCan] id: DrinkGrapeCanEmpty - type: entity - parent: [DrinkEmpty. DrinkGreenTea] + parent: [DrinkEmpty, DrinkGreenTea] id: DrinkGreenTeaEmpty - type: entity - parent: [DrinkEmpty. DrinkHotCoco] + parent: [DrinkEmpty, DrinkHotCoco] id: DrinkHotCocoEmpty - type: entity - parent: [DrinkEmpty. DrinkHotCoffee] + parent: [DrinkEmpty, DrinkHotCoffee] id: DrinkHotCoffeeEmpty - type: entity - parent: [DrinkEmpty. DrinkIcedTeaCan] + parent: [DrinkEmpty, DrinkIcedTeaCan] id: DrinkIcedTeaCanEmpty - type: entity - parent: [DrinkEmpty. DrinkLemonLimeCan] + parent: [DrinkEmpty, DrinkLemonLimeCan] id: DrinkLemonLimeCanEmpty - type: entity - parent: [DrinkEmpty. DrinkLemonLimeCranberryCan] + parent: [DrinkEmpty, DrinkLemonLimeCranberryCan] id: DrinkLemonLimeCranberryCanEmpty - type: entity - parent: [DrinkEmpty. DrinkPwrGameCan] + parent: [DrinkEmpty, DrinkPwrGameCan] id: DrinkPwrGameCanEmpty - type: entity - parent: [DrinkEmpty. DrinkRootBeerCan] + parent: [DrinkEmpty, DrinkRootBeerCan] id: DrinkRootBeerCanEmpty - type: entity - parent: [DrinkEmpty. DrinkShamblersJuiceCan] + parent: [DrinkEmpty, DrinkShamblersJuiceCan] id: DrinkShamblersJuiceCanEmpty - type: entity - parent: [DrinkEmpty. DrinkSodaWaterCan] + parent: [DrinkEmpty, DrinkSodaWaterCan] id: DrinkSodaWaterCanEmpty - type: entity - parent: [DrinkEmpty. DrinkSolDryCan] + parent: [DrinkEmpty, DrinkSolDryCan] id: DrinkSolDryCanEmpty - type: entity - parent: [DrinkEmpty. DrinkSpaceMountainWindCan] + parent: [DrinkEmpty, DrinkSpaceMountainWindCan] id: DrinkSpaceMountainWindCanEmpty - type: entity - parent: [DrinkEmpty. DrinkSpaceUpCan] + parent: [DrinkEmpty, DrinkSpaceUpCan] id: DrinkSpaceUpCanEmpty - type: entity - parent: [DrinkEmpty. DrinkStarkistCan] + parent: [DrinkEmpty, DrinkStarkistCan] id: DrinkStarkistCanEmpty - type: entity - parent: [DrinkEmpty. DrinkTeacup] + parent: [DrinkEmpty, DrinkTeacup] id: DrinkTeacupEmpty From 61399e8f62f64630183755610e3ee9710d0eacc0 Mon Sep 17 00:00:00 2001 From: portfiend <109661617+portfiend@users.noreply.github.com> Date: Sat, 1 Aug 2026 15:29:50 -0500 Subject: [PATCH 26/26] tweak loot pools --- .../_DEN/Catalog/Fills/Rummage/food.yml | 24 ++++++---- .../Consumable/Drinks/drinks_empty.yml | 48 ++++++++++++------- 2 files changed, 46 insertions(+), 26 deletions(-) diff --git a/Resources/Prototypes/_DEN/Catalog/Fills/Rummage/food.yml b/Resources/Prototypes/_DEN/Catalog/Fills/Rummage/food.yml index ce8a85df14..4e04d203e3 100644 --- a/Resources/Prototypes/_DEN/Catalog/Fills/Rummage/food.yml +++ b/Resources/Prototypes/_DEN/Catalog/Fills/Rummage/food.yml @@ -91,14 +91,18 @@ id: LootVendingMachineSustenance table: !type:GroupSelector children: + - id: DrinkMREFlask - id: FoodSnackNutribrick - id: FoodSnackMREBrownie - id: FoodCondimentPacketKetchup - - id: FoodTinMRE - - id: FoodTinBeans - - id: FoodTinPeaches - - id: DrinkBeerCan + - !type:GroupSelector weight: 0.5 + children: + - id: FoodTinMRE + - id: FoodTinBeans + - id: FoodTinPeaches + - id: DrinkBeerCan + weight: 0.5 ## Trash @@ -141,10 +145,14 @@ id: TrashVendingMachineSustenance table: !type:GroupSelector children: + - id: DrinkMREFlaskEmpty - id: FoodPacketMRETrash - id: FoodCondimentPacketEmpty - - id: FoodTinMRETrash - - id: FoodTinBeansTrash - - id: FoodTinPeachesTrash - - id: DrinkBeerCanEmpty + - !type:GroupSelector weight: 0.5 + children: + - id: FoodTinMRETrash + - id: FoodTinBeansTrash + - id: FoodTinPeachesTrash + - id: DrinkBeerCanEmpty + weight: 0.5 diff --git a/Resources/Prototypes/_DEN/Entities/Objects/Consumable/Drinks/drinks_empty.yml b/Resources/Prototypes/_DEN/Entities/Objects/Consumable/Drinks/drinks_empty.yml index 38d63071e2..a2d64e56e6 100644 --- a/Resources/Prototypes/_DEN/Entities/Objects/Consumable/Drinks/drinks_empty.yml +++ b/Resources/Prototypes/_DEN/Entities/Objects/Consumable/Drinks/drinks_empty.yml @@ -8,7 +8,15 @@ reagents: [] - type: entity - parent: [DrinkEmpty, DrinkBeerCan] + abstract: true + parent: DrinkEmpty + id: DrinkCanEmpty + components: + - type: Openable + opened: true + +- type: entity + parent: [DrinkCanEmpty, DrinkBeerCan] id: DrinkBeerCanEmpty - type: entity @@ -16,27 +24,31 @@ id: DrinkCafeLatteEmpty - type: entity - parent: [DrinkEmpty, DrinkChangelingStingCan] + parent: [DrinkCanEmpty, DrinkChangelingStingCan] id: DrinkChangelingStingCanEmpty - type: entity - parent: [DrinkEmpty, DrinkColaCan] + parent: [DrinkCanEmpty, DrinkColaCan] id: DrinkColaCanEmpty - type: entity - parent: [DrinkEmpty, DrinkDrGibbCan] + parent: [DrinkCanEmpty, DrinkDrGibbCan] id: DrinkDrGibbCanEmpty - type: entity - parent: [DrinkEmpty, DrinkEnergyDrinkCan] + parent: [DrinkCanEmpty, DrinkEnergyDrinkCan] id: DrinkEnergyDrinkEmpty - type: entity - parent: [DrinkEmpty, DrinkFourteenLokoCan] + parent: [DrinkCanEmpty, DrinkMREFlask] + id: DrinkMREFlaskEmpty + +- type: entity + parent: [DrinkCanEmpty, DrinkFourteenLokoCan] id: DrinkFourteenLokoCanEmpty - type: entity - parent: [DrinkEmpty, DrinkGrapeCan] + parent: [DrinkCanEmpty, DrinkGrapeCan] id: DrinkGrapeCanEmpty - type: entity @@ -52,47 +64,47 @@ id: DrinkHotCoffeeEmpty - type: entity - parent: [DrinkEmpty, DrinkIcedTeaCan] + parent: [DrinkCanEmpty, DrinkIcedTeaCan] id: DrinkIcedTeaCanEmpty - type: entity - parent: [DrinkEmpty, DrinkLemonLimeCan] + parent: [DrinkCanEmpty, DrinkLemonLimeCan] id: DrinkLemonLimeCanEmpty - type: entity - parent: [DrinkEmpty, DrinkLemonLimeCranberryCan] + parent: [DrinkCanEmpty, DrinkLemonLimeCranberryCan] id: DrinkLemonLimeCranberryCanEmpty - type: entity - parent: [DrinkEmpty, DrinkPwrGameCan] + parent: [DrinkCanEmpty, DrinkPwrGameCan] id: DrinkPwrGameCanEmpty - type: entity - parent: [DrinkEmpty, DrinkRootBeerCan] + parent: [DrinkCanEmpty, DrinkRootBeerCan] id: DrinkRootBeerCanEmpty - type: entity - parent: [DrinkEmpty, DrinkShamblersJuiceCan] + parent: [DrinkCanEmpty, DrinkShamblersJuiceCan] id: DrinkShamblersJuiceCanEmpty - type: entity - parent: [DrinkEmpty, DrinkSodaWaterCan] + parent: [DrinkCanEmpty, DrinkSodaWaterCan] id: DrinkSodaWaterCanEmpty - type: entity - parent: [DrinkEmpty, DrinkSolDryCan] + parent: [DrinkCanEmpty, DrinkSolDryCan] id: DrinkSolDryCanEmpty - type: entity - parent: [DrinkEmpty, DrinkSpaceMountainWindCan] + parent: [DrinkCanEmpty, DrinkSpaceMountainWindCan] id: DrinkSpaceMountainWindCanEmpty - type: entity - parent: [DrinkEmpty, DrinkSpaceUpCan] + parent: [DrinkCanEmpty, DrinkSpaceUpCan] id: DrinkSpaceUpCanEmpty - type: entity - parent: [DrinkEmpty, DrinkStarkistCan] + parent: [DrinkCanEmpty, DrinkStarkistCan] id: DrinkStarkistCanEmpty - type: entity