From 9c976d517ecdb70cf064862a177ca2dc0fc8a3b8 Mon Sep 17 00:00:00 2001 From: Slava0135 <40753025+Slava0135@users.noreply.github.com> Date: Wed, 28 Jun 2023 05:48:06 +0300 Subject: [PATCH] Add space lube tube (#17387) --- Content.Server/Lube/LubeSystem.cs | 72 ++++++++++++++++++ Content.Server/Lube/LubedSystem.cs | 49 ++++++++++++ Content.Shared/Lube/LubeComponent.cs | 47 ++++++++++++ Content.Shared/Lube/LubedComponent.cs | 17 +++++ Resources/Locale/en-US/lube/lube.ftl | 4 + .../Prototypes/Catalog/Fills/Lockers/misc.yml | 2 + .../Objects/Consumable/Drinks/drinks_fun.yml | 33 ++++++++ .../Consumable/Drinks/lube-tube.rsi/fill1.png | Bin 0 -> 717 bytes .../Consumable/Drinks/lube-tube.rsi/fill2.png | Bin 0 -> 718 bytes .../Consumable/Drinks/lube-tube.rsi/fill3.png | Bin 0 -> 717 bytes .../Consumable/Drinks/lube-tube.rsi/fill4.png | Bin 0 -> 717 bytes .../Consumable/Drinks/lube-tube.rsi/fill5.png | Bin 0 -> 718 bytes .../Consumable/Drinks/lube-tube.rsi/fill6.png | Bin 0 -> 680 bytes .../Drinks/lube-tube.rsi/icon-front.png | Bin 0 -> 712 bytes .../Consumable/Drinks/lube-tube.rsi/icon.png | Bin 0 -> 713 bytes .../Consumable/Drinks/lube-tube.rsi/meta.json | 35 +++++++++ 16 files changed, 259 insertions(+) create mode 100644 Content.Server/Lube/LubeSystem.cs create mode 100644 Content.Server/Lube/LubedSystem.cs create mode 100644 Content.Shared/Lube/LubeComponent.cs create mode 100644 Content.Shared/Lube/LubedComponent.cs create mode 100644 Resources/Locale/en-US/lube/lube.ftl create mode 100644 Resources/Textures/Objects/Consumable/Drinks/lube-tube.rsi/fill1.png create mode 100644 Resources/Textures/Objects/Consumable/Drinks/lube-tube.rsi/fill2.png create mode 100644 Resources/Textures/Objects/Consumable/Drinks/lube-tube.rsi/fill3.png create mode 100644 Resources/Textures/Objects/Consumable/Drinks/lube-tube.rsi/fill4.png create mode 100644 Resources/Textures/Objects/Consumable/Drinks/lube-tube.rsi/fill5.png create mode 100644 Resources/Textures/Objects/Consumable/Drinks/lube-tube.rsi/fill6.png create mode 100644 Resources/Textures/Objects/Consumable/Drinks/lube-tube.rsi/icon-front.png create mode 100644 Resources/Textures/Objects/Consumable/Drinks/lube-tube.rsi/icon.png create mode 100644 Resources/Textures/Objects/Consumable/Drinks/lube-tube.rsi/meta.json diff --git a/Content.Server/Lube/LubeSystem.cs b/Content.Server/Lube/LubeSystem.cs new file mode 100644 index 0000000000..972da9b908 --- /dev/null +++ b/Content.Server/Lube/LubeSystem.cs @@ -0,0 +1,72 @@ +using Content.Server.Chemistry.EntitySystems; +using Content.Server.Nutrition.Components; +using Content.Shared.IdentityManagement; +using Content.Shared.Interaction; +using Content.Shared.Item; +using Content.Shared.Lube; +using Content.Shared.Popups; +using Robust.Shared.Random; + +namespace Content.Server.Lube; + +public sealed class LubeSystem : EntitySystem +{ + [Dependency] private readonly SharedAudioSystem _audio = default!; + [Dependency] private readonly SharedPopupSystem _popup = default!; + [Dependency] private readonly SolutionContainerSystem _solutionContainer = default!; + [Dependency] private readonly IRobustRandom _random = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnInteract); + } + + // When glue bottle is used on item it will apply the glued and unremoveable components. + private void OnInteract(EntityUid uid, LubeComponent component, AfterInteractEvent args) + { + if (args.Handled) + return; + + if (!args.CanReach || args.Target is not { Valid: true } target) + return; + + if (TryComp(uid, out var drink) && !drink.Opened) + { + return; + } + + if (TryLube(uid, component, target)) + { + args.Handled = true; + _audio.PlayPvs(component.Squeeze, uid); + _popup.PopupEntity(Loc.GetString("lube-success", ("target", Identity.Entity(target, EntityManager))), args.User, args.User, PopupType.Medium); + } + else + { + _popup.PopupEntity(Loc.GetString("lube-failure", ("target", Identity.Entity(target, EntityManager))), args.User, args.User, PopupType.Medium); + } + } + + private bool TryLube(EntityUid uid, LubeComponent component, EntityUid target) + { + if (HasComp(target) || !HasComp(target)) + { + return false; + } + + if (HasComp(target) && _solutionContainer.TryGetSolution(uid, component.Solution, out var solution)) + { + var quantity = solution.RemoveReagent(component.Reagent, component.Consumption); + if (quantity > 0) + { + var lubed = EnsureComp(target); + lubed.SlipsLeft = _random.Next(component.MinSlips * quantity.Int(), component.MaxSlips * quantity.Int()); + lubed.SlipStrength = component.SlipStrength; + return true; + } + } + return false; + } +} diff --git a/Content.Server/Lube/LubedSystem.cs b/Content.Server/Lube/LubedSystem.cs new file mode 100644 index 0000000000..d81005e631 --- /dev/null +++ b/Content.Server/Lube/LubedSystem.cs @@ -0,0 +1,49 @@ +using Content.Shared.IdentityManagement; +using Content.Shared.Lube; +using Content.Shared.Popups; +using Content.Shared.Throwing; +using Robust.Shared.Containers; +using Robust.Shared.Random; + +namespace Content.Server.Lube; + +public sealed class LubedSystem : EntitySystem +{ + [Dependency] private readonly MetaDataSystem _metaData = default!; + [Dependency] private readonly ThrowingSystem _throwing = default!; + [Dependency] private readonly IRobustRandom _random = default!; + [Dependency] private readonly SharedTransformSystem _transform = default!; + [Dependency] private readonly SharedPopupSystem _popup = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnInit); + SubscribeLocalEvent(OnHandPickUp); + } + + private void OnInit(EntityUid uid, LubedComponent component, ComponentInit args) + { + var meta = MetaData(uid); + var name = meta.EntityName; + component.BeforeLubedEntityName = meta.EntityName; + _metaData.SetEntityName(uid, Loc.GetString("lubed-name-prefix", ("target", name))); + } + + private void OnHandPickUp(EntityUid uid, LubedComponent component, ContainerGettingInsertedAttemptEvent args) + { + if (component.SlipsLeft <= 0) + { + RemComp(uid); + _metaData.SetEntityName(uid, component.BeforeLubedEntityName); + return; + } + component.SlipsLeft--; + args.Cancel(); + var user = args.Container.Owner; + _transform.SetCoordinates(uid, Transform(user).Coordinates); + _throwing.TryThrow(uid, _random.NextVector2(), strength: component.SlipStrength); + _popup.PopupEntity(Loc.GetString("lube-slip", ("target", Identity.Entity(uid, EntityManager))), user, user, PopupType.MediumCaution); + } +} diff --git a/Content.Shared/Lube/LubeComponent.cs b/Content.Shared/Lube/LubeComponent.cs new file mode 100644 index 0000000000..d945f14265 --- /dev/null +++ b/Content.Shared/Lube/LubeComponent.cs @@ -0,0 +1,47 @@ +using Content.Shared.Chemistry.Reagent; +using Content.Shared.FixedPoint; +using Robust.Shared.Audio; +using Robust.Shared.GameStates; +using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; + +namespace Content.Shared.Lube; + +[RegisterComponent, NetworkedComponent] +public sealed class LubeComponent : Component +{ + [DataField("squeeze")] + public SoundSpecifier Squeeze = new SoundPathSpecifier("/Audio/Items/squeezebottle.ogg"); + + /// + /// Solution on the entity that contains the glue. + /// + [DataField("solution")] + public string Solution = "drink"; + + /// + /// Reagent that will be used as glue. + /// + [DataField("reagent", customTypeSerializer: typeof(PrototypeIdSerializer))] + public string Reagent = "SpaceLube"; + + /// + /// Reagent consumption per use. + /// + [DataField("consumption"), ViewVariables(VVAccess.ReadWrite)] + public FixedPoint2 Consumption = FixedPoint2.New(3); + + /// + /// Min slips per unit + /// + [DataField("minSlips"), ViewVariables(VVAccess.ReadWrite)] + public int MinSlips = 1; + + /// + /// Max slips per unit + /// + [DataField("maxSlips"), ViewVariables(VVAccess.ReadWrite)] + public int MaxSlips = 6; + + [DataField("slipStrength"), ViewVariables(VVAccess.ReadWrite)] + public int SlipStrength = 10; +} diff --git a/Content.Shared/Lube/LubedComponent.cs b/Content.Shared/Lube/LubedComponent.cs new file mode 100644 index 0000000000..1fd3322dc8 --- /dev/null +++ b/Content.Shared/Lube/LubedComponent.cs @@ -0,0 +1,17 @@ +namespace Content.Shared.Lube; + +[RegisterComponent] +public sealed class LubedComponent : Component +{ + /// + /// Reverts name to before prefix event (essentially removes prefix). + /// + [DataField("beforeLubedEntityName")] + public string BeforeLubedEntityName = string.Empty; + + [DataField("slipsLeft"), ViewVariables(VVAccess.ReadWrite)] + public int SlipsLeft; + + [DataField("slipStrength"), ViewVariables(VVAccess.ReadWrite)] + public int SlipStrength; +} diff --git a/Resources/Locale/en-US/lube/lube.ftl b/Resources/Locale/en-US/lube/lube.ftl new file mode 100644 index 0000000000..57af8f774a --- /dev/null +++ b/Resources/Locale/en-US/lube/lube.ftl @@ -0,0 +1,4 @@ +lube-success = {THE($target)} has been covered in lube! +lubed-name-prefix = Lubed {$target} +lube-failure = Can't cover {THE($target)} in lube! +lube-slip = {THE($target)} slips out of your hands! diff --git a/Resources/Prototypes/Catalog/Fills/Lockers/misc.yml b/Resources/Prototypes/Catalog/Fills/Lockers/misc.yml index e02d7c3076..6396a52834 100644 --- a/Resources/Prototypes/Catalog/Fills/Lockers/misc.yml +++ b/Resources/Prototypes/Catalog/Fills/Lockers/misc.yml @@ -129,6 +129,8 @@ prob: 0.20 - id: DrinkSpaceGlue prob: 0.20 + - id: DrinkSpaceLube + prob: 0.20 - type: entity id: ClosetWallMaintenanceFilledRandom diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks_fun.yml b/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks_fun.yml index 398c7e4351..cfdc5a6b54 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks_fun.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks_fun.yml @@ -29,3 +29,36 @@ - type: SolutionContainerVisuals maxFillLevels: 6 fillBaseName: fill + +- type: entity + parent: DrinkBase + id: DrinkSpaceLube + name: space lube tube + description: High performance lubricant intended for maintenance of extremely complex mechanical equipment. + components: + - type: Drink + isOpen: false + openSounds: + collection: packetOpenSounds + - type: Sprite + sprite: Objects/Consumable/Drinks/lube-tube.rsi + layers: + - state: icon + map: [ "enum.SolutionContainerLayers.Base" ] + - state: fill1 + map: [ "enum.SolutionContainerLayers.Fill" ] + visible: false + - state: icon-front + map: [ "enum.SolutionContainerLayers.Overlay" ] + - type: Appearance + - type: SolutionContainerManager + solutions: + drink: + maxVol: 30 + reagents: + - ReagentId: SpaceLube + Quantity: 30 + - type: SolutionContainerVisuals + maxFillLevels: 6 + fillBaseName: fill + - type: Lube diff --git a/Resources/Textures/Objects/Consumable/Drinks/lube-tube.rsi/fill1.png b/Resources/Textures/Objects/Consumable/Drinks/lube-tube.rsi/fill1.png new file mode 100644 index 0000000000000000000000000000000000000000..d96e4747815693ed90c31e1aeb9b4e42b6e83a58 GIT binary patch literal 717 zcmV;;0y6!HP)D2Suhp-Yic6|B0nY0?U54M~d>SHZ=h;2^sA zHTVy76-Dr&BS6+8m_N{%{SQn2bZ;KMPI5K3#J1S~Xy6RF5(RF!DN-Foi zc{;|#xYxZi41s6YeIJ6BUHB=x?)S0l{+!4aJ;7zZ=3kebranb4*R;Vy=-z_!tD2VD zgNtqGd$f{vvLg9q`wRo#&Y&v+J-5)l;$>C+&glazY|0hg!2SUY%lYorUxBn|&rFJo zu>b%732;bRa{vGf6951U69E94oEQKA0R~A#K~z`?WBmXBKf^!*rh&8^WcR2820R2< z$Vmf?jErDy)h_&S?X7!0GLVy?DGGtxuYWUuFeQMj5CB;S^1Z$k8-p+x6T`kcKfru) z970hDkYgdbo}ur6x8MGudx|7J*=Yb|%f)BENU{u@VzL~tDo&I^TY?R29w-rlz@d9T zz%;1@Sq=bMa`gq}z6Y7ZNNV9xP*4EUhZ9VkIFY0RiKGw!S?=xajni^+B&d=NwY9Yw zK$sjr6$f0sdX*fz!Fs6T0J3cdY8-XIXb6mk07)ewD7)F&+2QQT0Oc6AZruuLFcO(J z2RsU>UKvf8Fo8(FLzI#10Fq26Lh*n{!KecOUMV~XvjH!s00000NkvXXu0mjfe@H)? literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Consumable/Drinks/lube-tube.rsi/fill2.png b/Resources/Textures/Objects/Consumable/Drinks/lube-tube.rsi/fill2.png new file mode 100644 index 0000000000000000000000000000000000000000..0134a590cc35c6063614f377e4a68421b326ab4c GIT binary patch literal 718 zcmV;<0x|uGP)D2Suhp-Yic6|B0nY0?U54M~d>SHZ=h;2^sA zHTVy76-Dr&BS6+8m_N{%{SQn2bZ;KMPI5K3#J1S~Xy6RF5(RF!DN-Foi zc{;|#xYxZi41s6YeIJ6BUHB=x?)S0l{+!4aJ;7zZ=3kebranb4*R;Vy=-z_!tD2VD zgNtqGd$f{vvLg9q`wRo#&Y&v+J-5)l;$>C+&glazY|0hg!2SUY%lYorUxBn|&rFJo zu>b%732;bRa{vGf6951U69E94oEQKA0S8G$K~z`?WBmXBKf^!*rh&8^WcR2820R2< z$Vmf?jErDy)h_&S?X7!0GLVy?DGGtxuYWUuFeQMj5CB;S^1Z$k8-p+x6T`kcKfru) z970hDkYgdbo}ur6x8MGudx|7J*=Yb|%f)BENU{u@VzL~tDo&I^TY?R29w-rlz@d9T zz%;1@Sq=bMa`gq}z6Y7ZNNV9xP*4EUhZ9VkIFY0RiKGw!S?=xajni^+B&d=NwY9Yw zK$sjr6$f0sdX*fz!Fs6T0J3cdY8-XIXb6y04uBGyot+)dc05pyVe8hdkmeGRDRVRm z20R3)UKvf8FoDR}hbSZ20VJ7DgyI2@f>8$m0Q`?U2t!RCrvLx|07*qoM6N<$f|f)- AG5`Po literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Consumable/Drinks/lube-tube.rsi/fill3.png b/Resources/Textures/Objects/Consumable/Drinks/lube-tube.rsi/fill3.png new file mode 100644 index 0000000000000000000000000000000000000000..4731349b16aa2041208477df2173e148d9806518 GIT binary patch literal 717 zcmV;;0y6!HP)D2Suhp-Yic6|B0nY0?U54M~d>SHZ=h;2^sA zHTVy76-Dr&BS6+8m_N{%{SQn2bZ;KMPI5K3#J1S~Xy6RF5(RF!DN-Foi zc{;|#xYxZi41s6YeIJ6BUHB=x?)S0l{+!4aJ;7zZ=3kebranb4*R;Vy=-z_!tD2VD zgNtqGd$f{vvLg9q`wRo#&Y&v+J-5)l;$>C+&glazY|0hg!2SUY%lYorUxBn|&rFJo zu>b%732;bRa{vGf6951U69E94oEQKA0R~A#K~z`?WBmXBKf^!*rh&8^WcR2820R2< z$Vmf?jErDy)h_&S?X7!0GLVy?DGGtxuYWUuFeQMj5CB;S^1Z$k8-p+x6T`kcKfru) z970hDkYgdbo}ur6x8MGudx|7J*=Yb|%f)BENU{u@VzL~tDo&I^TY?R29w-rlz@d9T zz%;1@Sq=bMa`gq}z6Y7ZNNV9xP*4EUhZ9VkIFY0RiKGw!S?=xajni^+B&d=NwY9Yw zK$sjr6$f0sdX*fz!Fs6T0J3cdY8-U{Nx1+N)OL1uI9stmIfkuUw?Y~VM8?Z#6pV(z zfQJCpE29Y$CJ>qaA<9U007<43p?JWfVAKHsn*=-vyfD?V00000NkvXXu0mjfENeeO literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Consumable/Drinks/lube-tube.rsi/fill4.png b/Resources/Textures/Objects/Consumable/Drinks/lube-tube.rsi/fill4.png new file mode 100644 index 0000000000000000000000000000000000000000..0acebd225e181843a3a0078d473ec21cba505131 GIT binary patch literal 717 zcmV;;0y6!HP)D2Suhp-Yic6|B0nY0?U54M~d>SHZ=h;2^sA zHTVy76-Dr&BS6+8m_N{%{SQn2bZ;KMPI5K3#J1S~Xy6RF5(RF!DN-Foi zc{;|#xYxZi41s6YeIJ6BUHB=x?)S0l{+!4aJ;7zZ=3kebranb4*R;Vy=-z_!tD2VD zgNtqGd$f{vvLg9q`wRo#&Y&v+J-5)l;$>C+&glazY|0hg!2SUY%lYorUxBn|&rFJo zu>b%732;bRa{vGf6951U69E94oEQKA0R~A#K~z`?WBmXBKf^!*rh&8^WcR2820R2< z$Vmf?jErDy)h_&S?X7!0GLVy?DGGtxuYWUuFeQMj5CB;S^1Z$k8-p+x6T`kcKfru) z970hDkYgdbo}ur6x8MGudx|7J*=Yb|%f)BENU{u@VzL~tDo&I^TY?R29w-rlz@d9T zz%;1@Sq=bMa`gq}z6Y7ZNNV9xP*4EUhZ9VkIFY0RiKGw!S?=xajni^+B&d=NwY9Yw zK$sjr6$f0sdX*fz!Fs6T0J3cdY9uKQfGo1Jv%}ej1IjUM-MST0RTAl{0S|#u2aJZm zXb4cfGMX@90+A&EL>b8rAjxzh6pyBX0S^HHIe9z?cI{`;00000NkvXXu0mjfD8oIX literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Consumable/Drinks/lube-tube.rsi/fill5.png b/Resources/Textures/Objects/Consumable/Drinks/lube-tube.rsi/fill5.png new file mode 100644 index 0000000000000000000000000000000000000000..9e5b326d35df623a33a4e4a4e7824d4b67859f9e GIT binary patch literal 718 zcmV;<0x|uGP)D2Suhp-Yic6|B0nY0?U54M~d>SHZ=h;2^sA zHTVy76-Dr&BS6+8m_N{%{SQn2bZ;KMPI5K3#J1S~Xy6RF5(RF!DN-Foi zc{;|#xYxZi41s6YeIJ6BUHB=x?)S0l{+!4aJ;7zZ=3kebranb4*R;Vy=-z_!tD2VD zgNtqGd$f{vvLg9q`wRo#&Y&v+J-5)l;$>C+&glazY|0hg!2SUY%lYorUxBn|&rFJo zu>b%732;bRa{vGf6951U69E94oEQKA0S8G$K~z`?WBmXBKf^!*rh&8^WcR2820R2< z$Vmf?jErDy)h_&S?X7!0GLVy?DGGtxuYWUuFeQMj5CB;S^1Z$k8-p+x6T`kcKfru) z970hDkYgdbo}ur6x8MGudx|7J*=Yb|%f)BENU{u@VzL~tDo&I^TY?R29w-rlz@d9T zz%;1@Sq=bMa`gq}z6Y7ZNNV9xP*4EUhZ9VkIFY0RiKGw!S?=xajni^+BuH`qx&?N2 zc5tD$Z{IRpy?PbSCze671AvxdZNUf&3p0Qmv~}xNNJT-U3x<9{M5IS?DjN-f(GVC7 zfdLNzs#iu6CQQJY=dnqU>;PD2Suhp-Yic6|B0nY0?U54M~d>SHZ=h;2^sA zHTVy76-Dr&BS6+8m_N{%{SQn2bZ;KMPI5K3#J1S~Xy6RF5(RF!DN-Foi zc{;|#xYxZi41s6YeIJ6BUHB=x?)S0l{+!4aJ;7zZ=3kebranb4*R;Vy=-z_!tD2VD zgNtqGd$f{vvLg9q`wRo#&Y&v+J-5)l;$>C+&glazY|0hg!2SUY%lYorUxBn|&rFJo zu>b%732;bRa{vGf6951U69E94oEQKA0O3hQK~z`?WBmXBKf^!*rh&8^WcR2820R2< z$Vmf?jErDy)h_&S?X7!0GLVy?DGGtxuYWUuFeQMj5CB;S^1Z$k8-p+x6T`kcKfru) z970hDkYgdbo}ur6x8MGudx|7J*=Yb|%f)BENU{u@VzL~tDo&I^TY?R29w-rlz@d9T zz%;1@Sq=bMa`gq}z6Y7ZNNV9xP*4EUhZ9VkIFY0RiKGw!S>D;%NvQsY6q7ieh$=Dk zvmvT~Nau})z-S1JhQMeD40s4oy)v3GVFF3TA;}IP$#fzV4|o)eIsgFOE;X!gsszvg O0000o!)sqec$){^vri4oGj|5TQdr#KV&du~x-;!7+t)TzXp~r@h)17POEUZ0*Z6(*jh@O+D$g0Zy zcb={>I1qG?CZP7w_g}lAZX3R~eE;*%_rH!H@&M;n#lI{$4Zn-NRnfZkp?MunFDjb0 z17{o1es5=;?2ieZ`fiL?(x8C4vBVJZm%qYfAifzc2cJ|RGEVMO)HXu^aE uBosqr)P^LPPK4s&lLm{Q0000Y27PzXwNlNhcFx%&M7QJ@-NL~kjL3cW>K{a@Xem_u zUVQ)n010qNS#tmY3ljhU3ljkVnw%H_0099>L_t(o31j^K|3AY(0;Ykq9Ax*X0|q<< zSjb5OjEsz6ZCY_N!6`WKSs7#No{tRVB3?d^RQm*r4#kONH!sDVq9)5I9l5 zifWJ;q0k_^Bt&xqA~m8(5aLqH0fg+qDL?9f(GVC7fdLNzYL$ebd=4*+2$g=wg#y(p vqX`ox5M2*|973`KkX=s=_JF5>Q3n73n&Co-YU)Gw00000NkvXXu0mjf8*VTK literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Consumable/Drinks/lube-tube.rsi/meta.json b/Resources/Textures/Objects/Consumable/Drinks/lube-tube.rsi/meta.json new file mode 100644 index 0000000000..734e9e1e64 --- /dev/null +++ b/Resources/Textures/Objects/Consumable/Drinks/lube-tube.rsi/meta.json @@ -0,0 +1,35 @@ +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-NC-SA-4.0", + "copyright": "Created by discord: brainfood#7460 / github: brainfood1183.", + "states": [ + { + "name": "icon" + }, + { + "name": "icon-front" + }, + { + "name": "fill1" + }, + { + "name": "fill2" + }, + { + "name": "fill3" + }, + { + "name": "fill4" + }, + { + "name": "fill5" + }, + { + "name": "fill6" + } + ] +}