From b4e2e6862812d9f5a2737cb1697417b5e317e61d Mon Sep 17 00:00:00 2001 From: scrivoy <179060466+scrivoy@users.noreply.github.com> Date: Mon, 27 Oct 2025 23:58:45 +0100 Subject: [PATCH] Resprite and refactor wall dispensers (fuel, cleaner) (#36251) * resprite fuel and cleaner walldispenser * added sprites and moved walldispensers in own .rsi * forgot to remove sprites in old location * meta.json - use 4 spaces instead of 2 * moved reagent from food to tank container * clean up code inheritance * replace static sprites with layered sprites and update related code * added BaseDispenser for shared logic across dispensers * make BaseDispenser unspawnable * Add Explosive and PacifismDangerousAttack to FuelDispenser for consistency with WeldingFuelTank * moved the sprite one pixel down * reset wall_dispensers.yml to master * rename sprite states, remove unused sprites, bring back code changes after merge * really remove every unused sprite * add maxVol * indent to 4 spaces * cleanup * remove pepper dispenser * switch to shared fill level sprite --- .../Wallmounts/Storage/wall_dispensers.yml | 59 ++++++++++++------ .../Storage/tanks.rsi/cleanerdispenser.png | Bin 1069 -> 0 bytes .../Storage/tanks.rsi/fueldispenser.png | Bin 1105 -> 0 bytes .../Structures/Storage/tanks.rsi/meta.json | 11 +--- .../Storage/tanks.rsi/pepperdispenser.png | Bin 1096 -> 0 bytes .../walldispenser.rsi/cleanerdispenser.png | Bin 0 -> 1172 bytes .../Wallmounts/walldispenser.rsi/fill-1.png | Bin 0 -> 568 bytes .../Wallmounts/walldispenser.rsi/fill-2.png | Bin 0 -> 595 bytes .../Wallmounts/walldispenser.rsi/fill-3.png | Bin 0 -> 599 bytes .../Wallmounts/walldispenser.rsi/fill-4.png | Bin 0 -> 619 bytes .../Wallmounts/walldispenser.rsi/fill-5.png | Bin 0 -> 649 bytes .../walldispenser.rsi/fueldispenser.png | Bin 0 -> 1170 bytes .../Wallmounts/walldispenser.rsi/meta.json | 32 ++++++++++ 13 files changed, 73 insertions(+), 29 deletions(-) delete mode 100644 Resources/Textures/Structures/Storage/tanks.rsi/cleanerdispenser.png delete mode 100644 Resources/Textures/Structures/Storage/tanks.rsi/fueldispenser.png delete mode 100644 Resources/Textures/Structures/Storage/tanks.rsi/pepperdispenser.png create mode 100644 Resources/Textures/Structures/Wallmounts/walldispenser.rsi/cleanerdispenser.png create mode 100644 Resources/Textures/Structures/Wallmounts/walldispenser.rsi/fill-1.png create mode 100644 Resources/Textures/Structures/Wallmounts/walldispenser.rsi/fill-2.png create mode 100644 Resources/Textures/Structures/Wallmounts/walldispenser.rsi/fill-3.png create mode 100644 Resources/Textures/Structures/Wallmounts/walldispenser.rsi/fill-4.png create mode 100644 Resources/Textures/Structures/Wallmounts/walldispenser.rsi/fill-5.png create mode 100644 Resources/Textures/Structures/Wallmounts/walldispenser.rsi/fueldispenser.png create mode 100644 Resources/Textures/Structures/Wallmounts/walldispenser.rsi/meta.json diff --git a/Resources/Prototypes/Entities/Structures/Wallmounts/Storage/wall_dispensers.yml b/Resources/Prototypes/Entities/Structures/Wallmounts/Storage/wall_dispensers.yml index 962963c341..cfcbd59dc2 100644 --- a/Resources/Prototypes/Entities/Structures/Wallmounts/Storage/wall_dispensers.yml +++ b/Resources/Prototypes/Entities/Structures/Wallmounts/Storage/wall_dispensers.yml @@ -4,8 +4,7 @@ abstract: true components: - type: Sprite - sprite: Structures/Storage/tanks.rsi - state: cleanerdispenser + sprite: Structures/Wallmounts/walldispenser.rsi - type: Appearance - type: Destructible thresholds: @@ -13,8 +12,8 @@ !type:DamageTrigger damage: 50 behaviors: - - !type:DoActsBehavior - acts: [ "Destruction" ] + - !type:DoActsBehavior + acts: [ "Destruction" ] - trigger: !type:DamageTypeTrigger damageType: Heat @@ -46,17 +45,48 @@ - type: ExaminableSolution solution: tank +- type: entity + parent: BaseDispenser + id: CleanerDispenser + name: space cleaner dispenser + description: Wallmount Space Cleaner dispenser. + components: + - type: Sprite + layers: + - state: cleanerdispenser + - state: fill-1 + map: ["enum.SolutionContainerLayers.Fill"] + visible: false + - type: SolutionContainerVisuals + maxFillLevels: 5 + fillBaseName: fill- + - type: SolutionContainerManager + solutions: + tank: + maxVol: 5000 + reagents: + - ReagentId: SpaceCleaner + Quantity: 5000 + - type: entity parent: BaseDispenser id: FuelDispenser name: fuel dispenser + description: Wallmount Fuel dispenser. components: - type: Sprite - sprite: Structures/Storage/tanks.rsi - state: fueldispenser + layers: + - state: fueldispenser + - state: fill-1 + map: ["enum.SolutionContainerLayers.Fill"] + visible: false + - type: SolutionContainerVisuals + maxFillLevels: 5 + fillBaseName: fill- - type: SolutionContainerManager solutions: tank: + maxVol: 1000 reagents: - ReagentId: WeldingFuel Quantity: 1000 @@ -67,16 +97,7 @@ weldingDamage: types: Heat: 20 - -- type: entity - parent: BaseDispenser - id: CleanerDispenser - name: space cleaner dispenser - components: - - type: SolutionContainerManager - solutions: - tank: - reagents: - - ReagentId: SpaceCleaner - Quantity: 5000 - - type: ReagentTank + - type: PacifismDangerousAttack + - type: Explosive + explosionType: Default + totalIntensity: 50 diff --git a/Resources/Textures/Structures/Storage/tanks.rsi/cleanerdispenser.png b/Resources/Textures/Structures/Storage/tanks.rsi/cleanerdispenser.png deleted file mode 100644 index 0d42fa402e435e1fbc12cffb18239c35a4cc8c2e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1069 zcmV+|1k(G7P)(vT3CfBo+ykScb4D8;y1qCG% zR3Ivqri(UYQRRzFxU2NM1K-cy79H4n$*Y#sM)6>(3e9A{1nWjm-UOz@)X=&-i zC|c=(-+XObmUDUoS!j$wT=(+BKq|G?!es$>#x36ophO z)qVz|-uKzi#IKh~q{0?l!f>DP%nt%eyPzq9pSO zQU_7s68?4vMN#lPk3ylq>gp;1P{?FjE}#<$G*_{zs#G4{A`C+ki3F;uQvKx%0KzaN znM|@Z|2eX}Z{lEdVHhGR3JIVQMTcy+m4PUV$mjF%g@Z3(sZ@%cHUHbTjb&MgqKIJ_ zh@yxr%k1s#p=w&o4R|7f@$vCvPjow&oSbab>vcTOdud#jkt8W5&}t8ef5%xXG+$89 z^Ww~iqDV6Nat*gC!MPDQIOBpO0mS`rS`(fdfo62IT8&P_h@Gd?>3^pL2cwilvE_Fw zoEw2AW@cvzMUjz_5r&6{(K8vAS5|<(FoypWKi$2H_-Eu{7@}!fOXufGz%)&wD59^g n4>-Ofq9|(F0~ff!e~v!@r2Ft1c|%pH00000NkvXXu0mjfrGe~> diff --git a/Resources/Textures/Structures/Storage/tanks.rsi/fueldispenser.png b/Resources/Textures/Structures/Storage/tanks.rsi/fueldispenser.png deleted file mode 100644 index 333ffde9a9cd0519f7f3b7344a6402d1e15ca16f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1105 zcmV-X1g`suP)f#B!^H?MQO{IA=t#m1}|nm?A>(_)SCb%xGicA&2!p$HSf$b&pR^|J zKF|F8JTo&hXqt90fjVyMYa}B9MqiwT4Kwx4>JpOBe-5-`nkI%Z2!$xSyDQBT&~=?$F2|SIxA^(s zeE`x%nmyw&A3o?{WMqUwSAipEle-5u34(xiZJq7J8dcL|a&j_^B}o#pEaQ0|Ksb^Y zD&Tn@f*|nl;X@Qf0l;-#Y};mbb~X%_%jLp5f*_zM3eM*lgbe84rm$_BJ9~SifUgDy zFirDf0+wYV%QB{El1wJ)?(Qa&$>6#!sZ@&o{(cr07g1G}_V#xA`}^72+G1yC2Y{{z z1K75W7So8uVtm)x34o#~M5EE>6)++Ky=@Z3e44+q$RK^*%ob`8inm& z5N#VNa6`2|85;wRyWepfo-Ql^G^YR@kCLKDT<^I;WUov|ROQLaGu|6WA&L^)nLT#$ zCaGi_q9{>uG&ZvPc(oe0Z{6bly?c1oDxUA7sw%^yqx?8GhhZ4a5l|EbrxsyuX^n)@ z%I^LlS2{Xb`gNOx(MoRrkVLYZ<==Nu6p^x3p(oWxHk-wDU6RQp8yg#VKr$Y0xPZ67%0;yLZ2m-siyBLOnZQEf$%d$wP(}<#oVHk*_h%C!gDiu^sYq$Z=B``id ze&!e545p^0YUOen*L7b6mt`bL3JEmY1LEIF)(G`KsO!3+GNLGkDnjEYxHJMU&$u8- zz_9|rE1U4r2-K@9l}fZ3MwmPni~T!K@N$*1C^r0Vgi9k($IR?3z9=$0Jj~G05PCe$ z+WI>17sl|P;`>LB5dW;)_kA=?Ync2}2^5P(f*|19wQB$;c7$n~1VPZS2VUbf{&V~R Xdl>ufOHIYt00000NkvXXu0mjfe%1a$ diff --git a/Resources/Textures/Structures/Storage/tanks.rsi/meta.json b/Resources/Textures/Structures/Storage/tanks.rsi/meta.json index c4d31e80b2..93b557cf5a 100644 --- a/Resources/Textures/Structures/Storage/tanks.rsi/meta.json +++ b/Resources/Textures/Structures/Storage/tanks.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/8442af39ee82b813194f71db82edd2923d97818d, watercooler Taken from paradise at https://github.com/ParadiseSS13/Paradise/commit/ae2258d9235752ac6d80ec11e36553fe3b6ae59e, dispensers taken from paradise at https://github.com/ParadiseSS13/Paradise/commit/846ce475b2258a4336d8895f07f2c0f4053963bc", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/8442af39ee82b813194f71db82edd2923d97818d, watercooler Taken from paradise at https://github.com/ParadiseSS13/Paradise/commit/ae2258d9235752ac6d80ec11e36553fe3b6ae59e", "size": { "x": 32, "y": 32 @@ -117,15 +117,6 @@ }, { "name": "generictank-1" - }, - { - "name": "cleanerdispenser" - }, - { - "name": "fueldispenser" - }, - { - "name": "pepperdispenser" } ] } diff --git a/Resources/Textures/Structures/Storage/tanks.rsi/pepperdispenser.png b/Resources/Textures/Structures/Storage/tanks.rsi/pepperdispenser.png deleted file mode 100644 index f8b99b524446dd701aafb921634bae454f2068bd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1096 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Wallmounts/walldispenser.rsi/fill-3.png b/Resources/Textures/Structures/Wallmounts/walldispenser.rsi/fill-3.png new file mode 100644 index 0000000000000000000000000000000000000000..16db0b0904340e277cb24e793fb046b18f2bcfc9 GIT binary patch literal 599 zcmV-d0;v6oP)EX>4Tx04R}tkv&MmKpe$iTeTup!FCXF$WR5rE-K+0Yt2!bCV?t+t|iu}v_ypoO(+!Jwop^fF z(mC%FM_5Txh|h_~4Z0xlBiCh@-#8Z?_Vdh$kx9=HM~H=D8_R9XN`^{2MI2RBjq?3j zmle)ioYiubHSft^7|LtQOI)Wpj3gGY2oVBgRI!0FEW~KlNHLM7{e*{q$nlHhlF79J zMvi$@ph9x|;D7MDTeC1Z;U{oBCBbxV`?fXf|V@JW{p$&msy{e=SXen#Jv1H!jJ&#K#7b04Py{D4^000SaNLh0L z01FcU01FcV0GgZ_00007bV*G`2k8b56CVLKJwaFi002`-L_t(o!|l?c4FE9=Ls3_{ zRXbHy=u$y}8K5ACj`pgeg8!Ih5Gk?*0Kl!xtUm5uJDIPsfs;GWs*DKDIk)qPwkpRM lm6?*H-h2DY>;?dE;sqwyf)rzqUmgGe002ovPDHLkV1lQ>3N-)# literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Wallmounts/walldispenser.rsi/fill-4.png b/Resources/Textures/Structures/Wallmounts/walldispenser.rsi/fill-4.png new file mode 100644 index 0000000000000000000000000000000000000000..087ca74ecd98190f26df96803aefaa4f42124706 GIT binary patch literal 619 zcmV-x0+juUP)EX>4Tx04R}tkv&MmKpe$iTeTup!FCXF$WR5rE-K+0Yt2!bCV?t+t|iu}v_ypoO(+!Jwop^fF z(mC%FM_5Txh|h_~4Z0xlBiCh@-#8Z?_Vdh$kx9=HM~H=D8_R9XN`^{2MI2RBjq?3j zmle)ioYiubHSft^7|LtQOI)Wpj3gGY2oVBgRI!0FEW~KlNHLM7{e*{q$nlHhlF79J zMvi$@ph9x|;D7MDTeC1Z;U{oBCBbxV`?fXf|V@JW{p$&msy{e=SXen#Jv1H!jJ&#K#7b04Py{D4^000SaNLh0L z01FcU01FcV0GgZ_00007bV*G`2k8b56CWD9SctR$003u6L_t(o!|l_t4Zt7_MA0M4 z9!$qntiV!Klng*YnjobjmX#vKf8EK2ZON7Z0DqNpo=dHDTC%6lu`7mKj4@d9=L0-9 zv}EuFo<8TU*jm#V!<;>~?^8;dy?04cN-4Z$?gjwhaRK`DrWhVYg5>}J002ovPDHLk FV1nKh6;J>G literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Wallmounts/walldispenser.rsi/fill-5.png b/Resources/Textures/Structures/Wallmounts/walldispenser.rsi/fill-5.png new file mode 100644 index 0000000000000000000000000000000000000000..cbc6e5f12a5dec068d5827801ab0cf7a6cdd3845 GIT binary patch literal 649 zcmV;40(Sk0P)EX>4Tx04R}tkv&MmKpe$iTeTup!FCXF$WR5rE-K+0Yt2!bCV?t+t|iu}v_ypoO(+!Jwop^fF z(mC%FM_5Txh|h_~4Z0xlBiCh@-#8Z?_Vdh$kx9=HM~H=D8_R9XN`^{2MI2RBjq?3j zmle)ioYiubHSft^7|LtQOI)Wpj3gGY2oVBgRI!0FEW~KlNHLM7{e*{q$nlHhlF79J zMvi$@ph9x|;D7MDTeC1Z;U{oBCBbxV`?fXf|V@JW{p$&msy{e=SXen#Jv1H!jJ&#K#7b04Py{D4^000SaNLh0L z01FcU01FcV0GgZ_00007bV*G`2k8b56CX4F>JZof004zaL_t(o!|l|u2?QY&1kmxg zCQP&->#(Zdf)&_}k)Z_`{7aT)BljZ<#~t&sVFCw40V1L=bE~qHqGJpIK+f6SEqUjh_p0o@ jpYPm~fAS|JA|m<#)LW$e9`u9&00000NkvXXu0mjfn#LsY literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Wallmounts/walldispenser.rsi/fueldispenser.png b/Resources/Textures/Structures/Wallmounts/walldispenser.rsi/fueldispenser.png new file mode 100644 index 0000000000000000000000000000000000000000..75556478b70c53c877db84fd60c345f155067703 GIT binary patch literal 1170 zcmV;D1a13?P)EX>4Tx04R}tkv&MmKpe$iTeTup!FCXF$WR5rE-K+0Yt2!bCV?t+t|iu}v_ypoO(+!Jwop^fF z(mC%FM_5Txh|h_~4Z0xlBiCh@-#8Z?_Vdh$kx9=HM~H=D8_R9XN`^{2MI2RBjq?3j zmle)ioYiubHSft^7|LtQOI)Wpj3gGY2oVBgRI!0FEW~KlNHLM7{e*{q$nlHhlF79J zMvi$@ph9x|;D7MDTeC1Z;U{oBCBbxV`?fXf|V@JW{p$&msy{e=SXen#Jv1H!jJ&#K#7b04Py{D4^000SaNLh0L z01FcU01FcV0GgZ_00007bV*G`2k8b56C4c`re3fB00NFlL_t(o!|j&OOB7)o#y^J6 zJG;!%xTa7hXdOIkLeN1FM5v^YpkH7VUGm;v;JLq`KfsF+c`$>$gw;h|gm!g75>_+< z+j7UW5vQD4#Obikw7=Y$wY4t$oaTAonfHC>`{Q|EsH2WL{xcei2fDkvZOgJSO%u~J zYqE(f%gC~f5Q0=HRj_Ac@ynKFaj~NvfUIS?u$-8#$dj=sk`P?IcD-yAW@l&0MzpMetYvYz?-r5BB@AQNo%74)q$Bsfp0nbMt^C`6qK>wpr zPwqtUv);mn@eBA-kk+aNJbgBfX_{zShIl;g$pH*wmwBldI{vJapC(@dBq3N%OcM^| zly7Jnt1Br&!7Knd-u|5rsH$pT>51?~`;H$!$nWv(v_SuGJzHU&-_4&J=)=2!~FJ$W(~ zW%$8E48y=Q_YNZzKv5JXUcRWl2)DPl3kt}K=L*gs{p~9gldk|6zIT`Qv*-L5p)AWt zLXeC_X>DySaK1|1aYEDFV@KEB^>%cfmgeT_1UQ{A{d%mRGrYKi`NRU^kk2O;xX{(* zUw{yTwe_^`(=fja+D?b6J}FBC6d#v<(b?H)Lry?bQxgXV2kvtvoT}Bu;<$H*#*+{r zNfNegyU+h50>?#TtrwK#fZG91QOk1RhK5R