diff --git a/Content.Server/Fluids/EntitySystems/SpraySystem.cs b/Content.Server/Fluids/EntitySystems/SpraySystem.cs index e3cb9a00c7e..cec404b522a 100644 --- a/Content.Server/Fluids/EntitySystems/SpraySystem.cs +++ b/Content.Server/Fluids/EntitySystems/SpraySystem.cs @@ -42,6 +42,9 @@ using Content.Shared.Fluids.Components; using Robust.Server.Containers; using Robust.Shared.Map; +using Content.Shared.Inventory; // Funky atmos - firefighter backpack +using Content.Shared.Whitelist; +using Content.Shared.Hands.EntitySystems; // Funky atmos - firefighter backpack namespace Content.Server.Fluids.EntitySystems; @@ -59,6 +62,10 @@ public sealed class SpraySystem : SharedSpraySystem [Dependency] private readonly SharedTransformSystem _transform = default!; [Dependency] private readonly IConfigurationManager _cfg = default!; [Dependency] private readonly ContainerSystem _container = default!; + [Dependency] private readonly InventorySystem _inventory = default!; // Funky atmos - firefighter backpack + [Dependency] private readonly EntityWhitelistSystem _whitelistSystem = default!; // Funky atmos - firefighter backpack + [Dependency] private readonly SharedHandsSystem _handsSystem = default!; // Funky atmos - firefighter backpack + private float _gridImpulseMultiplier; @@ -111,8 +118,22 @@ public override void Spray(Entity entity, EntityUid? user = null public override void Spray(Entity entity, MapCoordinates mapcoord, EntityUid? user = null) { - if (!_solutionContainer.TryGetSolution(entity.Owner, entity.Comp.Solution, out var soln, out var solution)) + // Funky atmos - firefighter backpack + var sprayOwner = entity.Owner; + var solutionName = entity.Comp.Solution; + + if (entity.Comp.ExternalContainer) + { + TryFindExternalProvider(entity, user, ref sprayOwner, ref solutionName); + } + + if (!_solutionContainer.TryGetSolution(sprayOwner, solutionName, out var soln, out var solution)) return; + // Funky atmos - end of changes + + // Funky - Uncomment and delete above block to revert + // if (!_solutionContainer.TryGetSolution(entity.Owner, entity.Comp.Solution, out var soln, out var solution)) + // return; var ev = new SprayAttemptEvent(user); RaiseLocalEvent(entity, ref ev); @@ -232,4 +253,41 @@ public override void Spray(Entity entity, MapCoordinates mapcoor _useDelay.TryResetDelay(entity); } + + private void TryFindExternalProvider(Entity entity, EntityUid? user, ref EntityUid sprayOwner, ref string solutionName) + { + if (!entity.Comp.ExternalContainer) + return; + + if (user == null) + return; + + foreach (var item in _handsSystem.EnumerateHeld(user.Value)) + { + if (item == entity.Owner) + continue; + + if (!_whitelistSystem.IsWhitelistFailOrNull(entity.Comp.ProviderWhitelist, item) && + _solutionContainer.TryGetSolution(item, entity.Comp.TankSolutionName, out _, out _)) + { + sprayOwner = item; + solutionName = entity.Comp.TankSolutionName; + return; + } + } + + if (_inventory.TryGetContainerSlotEnumerator(user.Value, out var enumerator, entity.Comp.TargetSlot)) + { + while (enumerator.NextItem(out var item)) + { + if (!_whitelistSystem.IsWhitelistFailOrNull(entity.Comp.ProviderWhitelist, item) && + _solutionContainer.TryGetSolution(item, entity.Comp.TankSolutionName, out _, out _)) + { + sprayOwner = item; + solutionName = entity.Comp.TankSolutionName; + return; + } + } + } + } } diff --git a/Content.Server/_Funkystation/Atmos/Components/AtmosResinDespawnComponent.cs b/Content.Server/_Funkystation/Atmos/Components/AtmosResinDespawnComponent.cs new file mode 100644 index 00000000000..02109a7da95 --- /dev/null +++ b/Content.Server/_Funkystation/Atmos/Components/AtmosResinDespawnComponent.cs @@ -0,0 +1,12 @@ +using Content.Server._Funkystation.Atmos.EntitySystems; + +namespace Content.Server._Funkystation.Atmos.Components; + +/// +/// When a TimedDespawnComponent despawns, another one will be spawned in its place. +/// Funky atmos - firefighter backpack +/// +[RegisterComponent, Access(typeof(AtmosResinDespawnSystem))] +public sealed partial class AtmosResinDespawnComponent : Component +{ +} diff --git a/Content.Server/_Funkystation/Atmos/EntitySystems/AtmosResinDespawnSystem.cs b/Content.Server/_Funkystation/Atmos/EntitySystems/AtmosResinDespawnSystem.cs new file mode 100644 index 00000000000..53d878d24c3 --- /dev/null +++ b/Content.Server/_Funkystation/Atmos/EntitySystems/AtmosResinDespawnSystem.cs @@ -0,0 +1,75 @@ +using Content.Server._Funkystation.Atmos.Components; +using Robust.Shared.Spawners; +using Content.Shared.Atmos; +using Content.Server.Atmos.EntitySystems; + +namespace Content.Server._Funkystation.Atmos.EntitySystems; + + +/// +/// Sets atmospheric temperature to 20C and removes all toxins. +/// Funky atmos - firefighter backpack +/// +public sealed class AtmosResinDespawnSystem : EntitySystem +{ + [Dependency] private readonly AtmosphereSystem _atmo = default!; + [Dependency] private readonly GasTileOverlaySystem _gasOverlaySystem = default!; + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnDespawn); + } + + private void OnDespawn(EntityUid uid, AtmosResinDespawnComponent comp, ref TimedDespawnEvent args) + { + if (!TryComp(uid, out TransformComponent? xform)) + return; + + var mix = _atmo.GetContainingMixture(uid, true); + GasMixture tempMix = new(); + if (mix is null) return; + + var gasesToRemove = new[] + { + Gas.WaterVapor, + Gas.CarbonDioxide, + Gas.Plasma, + Gas.Tritium, + Gas.Ammonia, + Gas.NitrousOxide, + Gas.Frezon, + Gas.BZ, + Gas.Healium, + Gas.Nitrium, + Gas.Hydrogen, + Gas.HyperNoblium, + Gas.ProtoNitrate, + Gas.Zauker, + Gas.Halon, + Gas.Helium, + Gas.AntiNoblium + }; + + float totalMolesRemoved = 0f; + + foreach (var gas in gasesToRemove) + { + float moles = mix.GetMoles(gas); + if (moles > 0) + { + totalMolesRemoved += moles; + mix.AdjustMoles(gas, -moles); + } + } + + if (totalMolesRemoved > 0) + { + tempMix.AdjustMoles(Gas.WaterVapor, totalMolesRemoved); + } + + _atmo.Merge(mix, tempMix); + mix.Temperature = Atmospherics.T20C; + _gasOverlaySystem.UpdateSessions(); + } +} diff --git a/Content.Shared/Chemistry/Components/SlotBasedConnectedContainerComponent.cs b/Content.Shared/Chemistry/Components/SlotBasedConnectedContainerComponent.cs index 927e5d34ba3..a68d80f67d3 100644 --- a/Content.Shared/Chemistry/Components/SlotBasedConnectedContainerComponent.cs +++ b/Content.Shared/Chemistry/Components/SlotBasedConnectedContainerComponent.cs @@ -25,4 +25,11 @@ public sealed partial class SlotBasedConnectedContainerComponent : Component /// [DataField] public EntityWhitelist? ContainerWhitelist; + + /// + /// If true, also check the user's active hands for a valid provider. + /// Funky atmos - firefighter backpack + /// + [DataField] + public bool CheckHands = false; } diff --git a/Content.Shared/Containers/SlotBasedConnectedContainerSystem.cs b/Content.Shared/Containers/SlotBasedConnectedContainerSystem.cs index b9c8b09c1e9..b9ed137b8b4 100644 --- a/Content.Shared/Containers/SlotBasedConnectedContainerSystem.cs +++ b/Content.Shared/Containers/SlotBasedConnectedContainerSystem.cs @@ -3,6 +3,7 @@ using System.Diagnostics.CodeAnalysis; using Content.Shared.Chemistry.Components; +using Content.Shared.Hands.EntitySystems; using Content.Shared.Inventory; using Content.Shared.Whitelist; using Robust.Shared.Containers; @@ -18,6 +19,7 @@ public sealed class SlotBasedConnectedContainerSystem : EntitySystem [Dependency] private readonly SharedContainerSystem _containers = default!; [Dependency] private readonly EntityWhitelistSystem _whitelistSystem = default!; [Dependency] private readonly InventorySystem _inventory = default!; + [Dependency] private readonly SharedHandsSystem _hands = default!; // Funky atmos - firefighter backpack /// public override void Initialize() @@ -59,6 +61,25 @@ private bool TryGetConnectedContainer(EntityUid uid, SlotFlags slotFlag, EntityW return false; var user = container.Owner; + + // Funky atmos - firefighter backpack + // Check hands for connected container + if (TryComp(uid, out var comp) && comp.CheckHands) + { + foreach (var held in _hands.EnumerateHeld(user)) + { + if (held == uid) // don't pick active hand + continue; + + if (!_whitelistSystem.IsWhitelistFailOrNull(providerWhitelist, held)) + { + slotEntity = held; + return true; + } + } + } + // Funky atmos - end of changes + if (!_inventory.TryGetContainerSlotEnumerator(user, out var enumerator, slotFlag)) return false; diff --git a/Content.Shared/Fluids/Components/SprayComponent.cs b/Content.Shared/Fluids/Components/SprayComponent.cs index 40e4fe062cd..8bc088aedea 100644 --- a/Content.Shared/Fluids/Components/SprayComponent.cs +++ b/Content.Shared/Fluids/Components/SprayComponent.cs @@ -28,6 +28,8 @@ using Content.Shared.Fluids.EntitySystems; using Robust.Shared.Audio; using Robust.Shared.Prototypes; +using Content.Shared.Inventory; // Funky atmos - firefighter backpack +using Content.Shared.Whitelist; // Funky atmos - firefighter backpack namespace Content.Shared.Fluids.Components; @@ -38,6 +40,9 @@ public sealed partial class SprayComponent : Component [DataField] public string Solution = "spray"; + [DataField] + public string TankSolutionName = "tank"; // Funky atmos - firefighter backpack + [DataField] public FixedPoint2 TransferAmount = 10; @@ -68,4 +73,13 @@ public sealed partial class SprayComponent : Component [DataField] public LocId SprayEmptyPopupMessage = "spray-component-is-empty-message"; + + [ViewVariables(VVAccess.ReadWrite), DataField] + public SlotFlags TargetSlot; // Funky atmos - firefighter backpack + + [ViewVariables(VVAccess.ReadWrite), DataField] + public EntityWhitelist? ProviderWhitelist; // Funky atmos - firefighter backpack + + [ViewVariables(VVAccess.ReadWrite), DataField] + public bool ExternalContainer = false; // Funky atmos - firefighter backpack } diff --git a/Content.Shared/_Funkystation/Atmos/Components/FirefighterTankRefillableComponent.cs b/Content.Shared/_Funkystation/Atmos/Components/FirefighterTankRefillableComponent.cs new file mode 100644 index 00000000000..d4f4a241189 --- /dev/null +++ b/Content.Shared/_Funkystation/Atmos/Components/FirefighterTankRefillableComponent.cs @@ -0,0 +1,41 @@ +using Content.Shared.Chemistry.Reagent; +using Robust.Shared.Audio; +using Robust.Shared.GameStates; +using Robust.Shared.Prototypes; +using Content.Shared.Inventory; +using Content.Shared.Whitelist; + +namespace Content.Shared._Funkystation.Atmos.Components; + +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState(true)] +public sealed partial class FirefighterTankRefillableComponent : Component +{ + [DataField, AutoNetworkedField] + public bool Enabled; + + /// + /// Name of solution/>. + /// + public const string SolutionName = "tank"; + + /// + /// Reagent that will be used in backpack. + /// + [DataField] + public ProtoId TankReagent = "Water"; + + [ViewVariables(VVAccess.ReadWrite), DataField] + public SlotFlags TargetSlot; + + [ViewVariables(VVAccess.ReadWrite), DataField] + public EntityWhitelist? ProviderWhitelist; + + [ViewVariables(VVAccess.ReadWrite), DataField] + public bool ExternalContainer = false; + + /// + /// Sound played when refilling the backpack. + /// + [DataField] + public SoundSpecifier FirefightingNozzleRefill = new SoundPathSpecifier("/Audio/Effects/refill.ogg"); +} diff --git a/Content.Shared/_Funkystation/Atmos/Systems/FirefighterTankRefillableSystem.cs b/Content.Shared/_Funkystation/Atmos/Systems/FirefighterTankRefillableSystem.cs new file mode 100644 index 00000000000..836967695d1 --- /dev/null +++ b/Content.Shared/_Funkystation/Atmos/Systems/FirefighterTankRefillableSystem.cs @@ -0,0 +1,106 @@ +// Funky atmos - firefighter backpack + +using Content.Shared.Chemistry.Components; +using Content.Shared.DoAfter; +using Content.Shared.FixedPoint; +using Content.Shared.Interaction; +using Content.Shared.Inventory; +using Content.Shared.Whitelist; +using Content.Shared._Funkystation.Atmos.Components; +using Content.Shared.Chemistry.EntitySystems; +using Content.Shared.Hands.EntitySystems; +using Content.Shared.Popups; +using Robust.Shared.Audio.Systems; + +namespace Content.Shared._Funkystation.Atmos.Systems; + +public sealed class FirefighterTankRefillableSystem : EntitySystem +{ + [Dependency] private readonly InventorySystem _inventory = default!; + [Dependency] private readonly EntityWhitelistSystem _whitelistSystem = default!; + [Dependency] private readonly SharedPopupSystem _popup = default!; + [Dependency] private readonly SharedAudioSystem _audioSystem = default!; + [Dependency] private readonly SharedDoAfterSystem _doAfterSystem = default!; + [Dependency] private readonly SharedSolutionContainerSystem _solutionContainerSystem = default!; + [Dependency] private readonly SharedHandsSystem _handsSystem = default!; + public override void Initialize() + { + base.Initialize(); + SubscribeLocalEvent(OnFirefightingNozzleAfterInteract); + } + + private void OnFirefightingNozzleAfterInteract(Entity entity, ref AfterInteractEvent args) + { + var sprayOwner = entity.Owner; + var solutionName = FirefighterTankRefillableComponent.SolutionName; + + if (args.Handled) + return; + + if (args.Target is not { Valid: true } target || !args.CanReach) + return; + + if (TryComp(target, out ReagentTankComponent? tank) && tank.TankType == ReagentTankType.Fuel) + return; + + if (entity.Comp.ExternalContainer) + { + bool foundContainer = false; + + // Check held items (exclude nozzle itself) + foreach (var item in _handsSystem.EnumerateHeld(args.User)) + { + if (item == entity.Owner) + continue; + + if (!_whitelistSystem.IsWhitelistFailOrNull(entity.Comp.ProviderWhitelist, item) && + _solutionContainerSystem.TryGetSolution(item, FirefighterTankRefillableComponent.SolutionName, out _, out _)) + { + sprayOwner = item; + solutionName = FirefighterTankRefillableComponent.SolutionName; + foundContainer = true; + break; + } + } + + // Fall back to target slot + if (!foundContainer && _inventory.TryGetContainerSlotEnumerator(args.User, out var enumerator, entity.Comp.TargetSlot)) + { + while (enumerator.NextItem(out var item)) + { + if (!_whitelistSystem.IsWhitelistFailOrNull(entity.Comp.ProviderWhitelist, item) && + _solutionContainerSystem.TryGetSolution(item, FirefighterTankRefillableComponent.SolutionName, out _, out _)) + { + sprayOwner = item; + solutionName = FirefighterTankRefillableComponent.SolutionName; + foundContainer = true; + break; + } + } + } + } + + if (_solutionContainerSystem.TryGetDrainableSolution(target, out var targetSoln, out var targetSolution) + && _solutionContainerSystem.TryGetSolution(sprayOwner, solutionName, out var solutionComp, out var atmosBackpackTankSolution)) + { + var trans = FixedPoint2.Min(atmosBackpackTankSolution.AvailableVolume, targetSolution.Volume); + if (trans > 0) + { + var drained = _solutionContainerSystem.Drain(target, targetSoln.Value, trans); + _solutionContainerSystem.TryAddSolution(solutionComp.Value, drained); + _audioSystem.PlayPredicted(entity.Comp.FirefightingNozzleRefill, entity, user: args.User); + _popup.PopupClient(Loc.GetString("firefighter-nozzle-component-after-interact-refilled-message"), entity, args.User); + } + else if (atmosBackpackTankSolution.AvailableVolume <= 0) + { + _popup.PopupClient(Loc.GetString("firefighter-nozzle-component-already-full"), entity, args.User); + } + else + { + _popup.PopupClient(Loc.GetString("firefighter-nozzle-component-no-water-in-tank", ("owner", args.Target)), entity, args.User); + } + + args.Handled = true; + } + } +} diff --git a/Resources/Locale/en-US/_Funkystation/tools/components/firefighter-nozzle-component.ftl b/Resources/Locale/en-US/_Funkystation/tools/components/firefighter-nozzle-component.ftl new file mode 100644 index 00000000000..6e84cb5c5db --- /dev/null +++ b/Resources/Locale/en-US/_Funkystation/tools/components/firefighter-nozzle-component.ftl @@ -0,0 +1,3 @@ +firefighter-nozzle-component-no-water-in-tank = The {$owner} is empty. +firefighter-nozzle-component-after-interact-refilled-message = Refilled! +firefighter-nozzle-component-already-full = The backpack water tank is already full. diff --git a/Resources/Prototypes/Catalog/Fills/Lockers/engineer.yml b/Resources/Prototypes/Catalog/Fills/Lockers/engineer.yml index 031b22bd3e7..ee4f3b7f764 100644 --- a/Resources/Prototypes/Catalog/Fills/Lockers/engineer.yml +++ b/Resources/Prototypes/Catalog/Fills/Lockers/engineer.yml @@ -190,6 +190,7 @@ - id: RPD - id: RCDAmmo - id: AirGrenade + - id: ClothingBackpackFirefighterTank # Funkystation - type: entityTable id: FillAtmosphericsHardsuit diff --git a/Resources/Prototypes/_Funkystation/Entities/Clothing/Back/specific.yml b/Resources/Prototypes/_Funkystation/Entities/Clothing/Back/specific.yml new file mode 100644 index 00000000000..b068d7f31fc --- /dev/null +++ b/Resources/Prototypes/_Funkystation/Entities/Clothing/Back/specific.yml @@ -0,0 +1,47 @@ +- type: entity + parent: Clothing + id: ClothingBackpackFirefighterTank + name: backpack firefighter tank + description: A refrigerated backpack water tank that can switch modes to launch ATMOS resin or work as a high pressure extinguisher. + components: + - type: Tag + tags: + - AtmosBackTank + - WhitelistChameleon + - type: Sprite + sprite: _Funkystation/Clothing/Back/Backpacks/atmosbackpacktank.rsi + state: icon + - type: Item + size: Ginormous + - type: Clothing + slots: BACK + sprite: _Funkystation/Clothing/Back/Backpacks/atmosbackpacktank.rsi + - type: SolutionAmmoProvider + solutionId: tank + proto: AtmosResin + fireCost: 25 + - type: SolutionContainerManager + solutions: + tank: + maxVol: 1200 + reagents: + - ReagentId: Water + Quantity: 1200 + - type: DrawableSolution + solution: tank + - type: DrainableSolution + solution: tank + - type: ExaminableSolution + solution: tank + - type: ItemSlots + slots: + nozzle_slot: + name: FirefighterNozzle + startingItem: FirefighterNozzle + whitelist: + tags: + - Nozzle + - type: FirefighterTankRefillable + - type: ContainerContainer + containers: + nozzle_slot: !type:ContainerSlot diff --git a/Resources/Prototypes/_Funkystation/Entities/Effects/chemistry_effects.yml b/Resources/Prototypes/_Funkystation/Entities/Effects/chemistry_effects.yml new file mode 100644 index 00000000000..0e4772b7dfd --- /dev/null +++ b/Resources/Prototypes/_Funkystation/Entities/Effects/chemistry_effects.yml @@ -0,0 +1,26 @@ +- type: entity + parent: BaseFoam + id: Resin + name: resin + categories: [ HideSpawnMenu ] + components: + - type: Sprite + color: "#ffffffcc" + sprite: _Funkystation/Effects/resin.rsi + layers: + - state: resin + map: ["enum.FoamVisualLayers.Base"] + - map: [ "enum.EdgeLayer.South" ] + state: resin-south + - map: [ "enum.EdgeLayer.East" ] + state: resin-east + - map: [ "enum.EdgeLayer.North" ] + state: resin-north + - map: [ "enum.EdgeLayer.West" ] + state: resin-west + - type: SmoothEdge + - type: IconSmooth + mode: NoSprite + - type: FoamVisuals + animationTime: 0.6 + animationState: resin-dissolve diff --git a/Resources/Prototypes/_Funkystation/Entities/Objects/Tools/firefighting-nozzle.yml b/Resources/Prototypes/_Funkystation/Entities/Objects/Tools/firefighting-nozzle.yml new file mode 100644 index 00000000000..2d787f01744 --- /dev/null +++ b/Resources/Prototypes/_Funkystation/Entities/Objects/Tools/firefighting-nozzle.yml @@ -0,0 +1,79 @@ +- type: entity + id: FirefighterNozzle + parent: BaseItem + name: firefighter nozzle + description: A specialized nozzle intended to fight fires. + components: + - type: Sprite + sprite: _Funkystation/Objects/Weapons/Guns/Basic/extinguishernozzle.rsi + state: icon + - type: Item + sprite: _Funkystation/Objects/Weapons/Guns/Basic/extinguishernozzle.rsi + size: Normal + - type: FirefighterTankRefillable + externalContainer: true + targetSlot: BACK + providerWhitelist: + tags: + - AtmosBackTank + - type: Tag + tags: + - Nozzle + + - type: Spray + transferAmount: 15 + pushbackAmount: 60 + spraySound: + path: /Audio/Effects/extinguish.ogg + sprayedPrototype: ExtinguisherSpray + vaporAmount: 5 + vaporSpread: 120 + sprayDistance: 5 + sprayVelocity: 2.0 + externalContainer: true + targetSlot: BACK + providerWhitelist: + tags: + - NozzleBackTank + - AtmosBackTank + - type: UseDelay + - type: PacifismAllowedGun + - type: Gun + fireRate: 1 + selectedMode: SemiAuto + availableModes: + - SemiAuto + soundGunshot: + path: /Audio/Effects/thunk.ogg + soundEmpty: + path: /Audio/Items/hiss.ogg + clumsyProof: true + - type: ClothingSlotAmmoProvider + - type: SlotBasedConnectedContainer + targetSlot: BACK + containerWhitelist: + tags: + - NozzleBackTank + - AtmosBackTank + checkHands: true + +- type: entity + parent: [ BaseCivilianContraband, GrenadeBase ] + categories: [ HideSpawnMenu ] + id: AtmosResin + name: atmos resin + description: Special grenade for atmosians. + components: + - type: Sprite + sprite: _Funkystation/Objects/Weapons/Grenades/frozen-smoke-capsule.rsi + state: icon + - type: SmokeOnTrigger + duration: 9 + spreadAmount: 1000 # Overly high number so resin spreads more evenly. Capped by duration. + smokePrototype: Resin + - type: DeleteOnTrigger + - type: TriggerOnLand + - type: TimerTriggerVisuals + - type: EmitSoundOnTrigger + sound: /Audio/Items/smoke_grenade_smoke.ogg + positional: true diff --git a/Resources/Prototypes/_Funkystation/tags.yml b/Resources/Prototypes/_Funkystation/tags.yml index 149d001cefa..8caf246d564 100644 --- a/Resources/Prototypes/_Funkystation/tags.yml +++ b/Resources/Prototypes/_Funkystation/tags.yml @@ -12,3 +12,12 @@ - type: Tag # Funky atmos - /tg/ gases id: PlasmaSheet + +- type: Tag # Funky atmos - firefighter backpack + id: AtmosBackTank + +- type: Tag # Funky atmos - firefighter backpack + id: Nozzle + +- type: Tag # Funky atmos - firefighter backpack + id: AtmosResinGrenade diff --git a/Resources/Textures/_Funkystation/Clothing/Back/Backpacks/atmosbackpacktank.rsi/equipped-BACKPACK.png b/Resources/Textures/_Funkystation/Clothing/Back/Backpacks/atmosbackpacktank.rsi/equipped-BACKPACK.png new file mode 100644 index 00000000000..74f5c86d8d0 Binary files /dev/null and b/Resources/Textures/_Funkystation/Clothing/Back/Backpacks/atmosbackpacktank.rsi/equipped-BACKPACK.png differ diff --git a/Resources/Textures/_Funkystation/Clothing/Back/Backpacks/atmosbackpacktank.rsi/icon.png b/Resources/Textures/_Funkystation/Clothing/Back/Backpacks/atmosbackpacktank.rsi/icon.png new file mode 100644 index 00000000000..d80de900422 Binary files /dev/null and b/Resources/Textures/_Funkystation/Clothing/Back/Backpacks/atmosbackpacktank.rsi/icon.png differ diff --git a/Resources/Textures/_Funkystation/Clothing/Back/Backpacks/atmosbackpacktank.rsi/inhand-left.png b/Resources/Textures/_Funkystation/Clothing/Back/Backpacks/atmosbackpacktank.rsi/inhand-left.png new file mode 100644 index 00000000000..3806eeb6673 Binary files /dev/null and b/Resources/Textures/_Funkystation/Clothing/Back/Backpacks/atmosbackpacktank.rsi/inhand-left.png differ diff --git a/Resources/Textures/_Funkystation/Clothing/Back/Backpacks/atmosbackpacktank.rsi/inhand-right.png b/Resources/Textures/_Funkystation/Clothing/Back/Backpacks/atmosbackpacktank.rsi/inhand-right.png new file mode 100644 index 00000000000..ae08447e49d Binary files /dev/null and b/Resources/Textures/_Funkystation/Clothing/Back/Backpacks/atmosbackpacktank.rsi/inhand-right.png differ diff --git a/Resources/Textures/_Funkystation/Clothing/Back/Backpacks/atmosbackpacktank.rsi/meta.json b/Resources/Textures/_Funkystation/Clothing/Back/Backpacks/atmosbackpacktank.rsi/meta.json new file mode 100644 index 00000000000..8895b8a08b3 --- /dev/null +++ b/Resources/Textures/_Funkystation/Clothing/Back/Backpacks/atmosbackpacktank.rsi/meta.json @@ -0,0 +1,26 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/pull/5645/commits/46a3170b2a1a0f9b6f03dd6bda8e443afed85ee3", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-BACKPACK", + "directions": 4 + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/_Funkystation/Effects/resin.rsi/meta.json b/Resources/Textures/_Funkystation/Effects/resin.rsi/meta.json new file mode 100644 index 00000000000..32e997cd6fb --- /dev/null +++ b/Resources/Textures/_Funkystation/Effects/resin.rsi/meta.json @@ -0,0 +1,40 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from https://github.com/discordia-space/CEV-Eris/blob/81b3a082ccdfb425f36bbed6e5bc1f0faed346ec/icons/effects/effects.dmi, foam_directionals by brainfood1183 (github), resin modifications by lumpylemons", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "resin" + }, + { + "name": "resin-west" + }, + { + "name": "resin-east" + }, + { + "name": "resin-north" + }, + { + "name": "resin-south" + }, + { + "name": "resin-dissolve", + "directions": 1, + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + } + ] +} diff --git a/Resources/Textures/_Funkystation/Effects/resin.rsi/resin-dissolve.png b/Resources/Textures/_Funkystation/Effects/resin.rsi/resin-dissolve.png new file mode 100644 index 00000000000..9f0bfdf1c56 Binary files /dev/null and b/Resources/Textures/_Funkystation/Effects/resin.rsi/resin-dissolve.png differ diff --git a/Resources/Textures/_Funkystation/Effects/resin.rsi/resin-east.png b/Resources/Textures/_Funkystation/Effects/resin.rsi/resin-east.png new file mode 100644 index 00000000000..02f697f34cd Binary files /dev/null and b/Resources/Textures/_Funkystation/Effects/resin.rsi/resin-east.png differ diff --git a/Resources/Textures/_Funkystation/Effects/resin.rsi/resin-north.png b/Resources/Textures/_Funkystation/Effects/resin.rsi/resin-north.png new file mode 100644 index 00000000000..757fe00af18 Binary files /dev/null and b/Resources/Textures/_Funkystation/Effects/resin.rsi/resin-north.png differ diff --git a/Resources/Textures/_Funkystation/Effects/resin.rsi/resin-south.png b/Resources/Textures/_Funkystation/Effects/resin.rsi/resin-south.png new file mode 100644 index 00000000000..add56e417c6 Binary files /dev/null and b/Resources/Textures/_Funkystation/Effects/resin.rsi/resin-south.png differ diff --git a/Resources/Textures/_Funkystation/Effects/resin.rsi/resin-west.png b/Resources/Textures/_Funkystation/Effects/resin.rsi/resin-west.png new file mode 100644 index 00000000000..ba676735b3e Binary files /dev/null and b/Resources/Textures/_Funkystation/Effects/resin.rsi/resin-west.png differ diff --git a/Resources/Textures/_Funkystation/Effects/resin.rsi/resin.png b/Resources/Textures/_Funkystation/Effects/resin.rsi/resin.png new file mode 100644 index 00000000000..01f15e9953e Binary files /dev/null and b/Resources/Textures/_Funkystation/Effects/resin.rsi/resin.png differ diff --git a/Resources/Textures/_Funkystation/Objects/Weapons/Grenades/frozen-smoke-capsule.rsi/equipped-BELT.png b/Resources/Textures/_Funkystation/Objects/Weapons/Grenades/frozen-smoke-capsule.rsi/equipped-BELT.png new file mode 100644 index 00000000000..912f5aebcef Binary files /dev/null and b/Resources/Textures/_Funkystation/Objects/Weapons/Grenades/frozen-smoke-capsule.rsi/equipped-BELT.png differ diff --git a/Resources/Textures/_Funkystation/Objects/Weapons/Grenades/frozen-smoke-capsule.rsi/icon.png b/Resources/Textures/_Funkystation/Objects/Weapons/Grenades/frozen-smoke-capsule.rsi/icon.png new file mode 100644 index 00000000000..a61f7b5a9b2 Binary files /dev/null and b/Resources/Textures/_Funkystation/Objects/Weapons/Grenades/frozen-smoke-capsule.rsi/icon.png differ diff --git a/Resources/Textures/_Funkystation/Objects/Weapons/Grenades/frozen-smoke-capsule.rsi/meta.json b/Resources/Textures/_Funkystation/Objects/Weapons/Grenades/frozen-smoke-capsule.rsi/meta.json new file mode 100644 index 00000000000..06e0b2b0927 --- /dev/null +++ b/Resources/Textures/_Funkystation/Objects/Weapons/Grenades/frozen-smoke-capsule.rsi/meta.json @@ -0,0 +1,21 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation at https://github.com/tgstation/tgstation/pull/5645/commits/46a3170b2a1a0f9b6f03dd6bda8e443afed85ee3", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "primed" + }, + { + "name": "equipped-BELT", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/_Funkystation/Objects/Weapons/Grenades/frozen-smoke-capsule.rsi/primed.png b/Resources/Textures/_Funkystation/Objects/Weapons/Grenades/frozen-smoke-capsule.rsi/primed.png new file mode 100644 index 00000000000..a61f7b5a9b2 Binary files /dev/null and b/Resources/Textures/_Funkystation/Objects/Weapons/Grenades/frozen-smoke-capsule.rsi/primed.png differ diff --git a/Resources/Textures/_Funkystation/Objects/Weapons/Guns/Basic/extinguishernozzle.rsi/icon.png b/Resources/Textures/_Funkystation/Objects/Weapons/Guns/Basic/extinguishernozzle.rsi/icon.png new file mode 100644 index 00000000000..cab041893e6 Binary files /dev/null and b/Resources/Textures/_Funkystation/Objects/Weapons/Guns/Basic/extinguishernozzle.rsi/icon.png differ diff --git a/Resources/Textures/_Funkystation/Objects/Weapons/Guns/Basic/extinguishernozzle.rsi/inhand-left.png b/Resources/Textures/_Funkystation/Objects/Weapons/Guns/Basic/extinguishernozzle.rsi/inhand-left.png new file mode 100644 index 00000000000..cbac18697bf Binary files /dev/null and b/Resources/Textures/_Funkystation/Objects/Weapons/Guns/Basic/extinguishernozzle.rsi/inhand-left.png differ diff --git a/Resources/Textures/_Funkystation/Objects/Weapons/Guns/Basic/extinguishernozzle.rsi/inhand-right.png b/Resources/Textures/_Funkystation/Objects/Weapons/Guns/Basic/extinguishernozzle.rsi/inhand-right.png new file mode 100644 index 00000000000..ca22fe4b912 Binary files /dev/null and b/Resources/Textures/_Funkystation/Objects/Weapons/Guns/Basic/extinguishernozzle.rsi/inhand-right.png differ diff --git a/Resources/Textures/_Funkystation/Objects/Weapons/Guns/Basic/extinguishernozzle.rsi/meta.json b/Resources/Textures/_Funkystation/Objects/Weapons/Guns/Basic/extinguishernozzle.rsi/meta.json new file mode 100644 index 00000000000..1b97b10a211 --- /dev/null +++ b/Resources/Textures/_Funkystation/Objects/Weapons/Guns/Basic/extinguishernozzle.rsi/meta.json @@ -0,0 +1,22 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "tgstation at https://github.com/tgstation/tgstation/pull/5645/commits/46a3170b2a1a0f9b6f03dd6bda8e443afed85ee3", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "inhand-right", + "directions": 4 + }, + { + "name": "inhand-left", + "directions": 4 + } + ] +}