diff --git a/Content.Server/Glue/GlueSystem.cs b/Content.Server/Glue/GlueSystem.cs new file mode 100644 index 0000000000..91dc122daf --- /dev/null +++ b/Content.Server/Glue/GlueSystem.cs @@ -0,0 +1,61 @@ +using Content.Shared.IdentityManagement; +using Content.Shared.Popups; +using Content.Shared.Item; +using Content.Shared.Interaction.Components; +using Content.Shared.Glue; +using Content.Server.Nutrition.EntitySystems; +using Content.Shared.Interaction; +using Content.Server.Nutrition.Components; + +namespace Content.Server.Glue +{ + public sealed class GlueSystem : EntitySystem + { + [Dependency] private readonly SharedAudioSystem _audio = default!; + [Dependency] private readonly SharedPopupSystem _popup = default!; + [Dependency] private readonly FoodSystem _food = 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, GlueComponent component, AfterInteractEvent args) + { + if (args.Handled) + return; + + if (!args.CanReach || args.Target is not { Valid: true } target) + return; + + if (HasComp(target)) + { + _popup.PopupEntity(Loc.GetString("glue-failure", ("target", Identity.Entity(target, EntityManager))), args.User, + args.User, PopupType.Medium); + return; + } + + + if (HasComp(target)) + { + _audio.PlayPvs(component.Squeeze, uid); + EnsureComp(target); + _popup.PopupEntity(Loc.GetString("glue-success", ("target", Identity.Entity(target, EntityManager))), args.User, + args.User, PopupType.Medium); + EnsureComp(target); + } + + if (TryComp(uid, out var food)) + { + _food.DeleteAndSpawnTrash(food, uid, args.User); + } + + args.Handled = true; + } + + } +} diff --git a/Content.Server/Glue/GluedSystem.cs b/Content.Server/Glue/GluedSystem.cs new file mode 100644 index 0000000000..ea0ceff438 --- /dev/null +++ b/Content.Server/Glue/GluedSystem.cs @@ -0,0 +1,64 @@ +using Content.Shared.Interaction.Components; +using Robust.Shared.Timing; +using Content.Shared.Interaction; +using Content.Shared.Glue; +using Content.Shared.Hands.Components; + +namespace Content.Server.Glue; + +public sealed class GluedSystem : EntitySystem +{ + [Dependency] private readonly SharedAudioSystem _audio = default!; + [Dependency] private readonly IGameTiming _timing = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnGluedInit); + SubscribeLocalEvent(OnPickUp); + } + + // Timing to remove glued and unremoveable. + public override void Update(float frameTime) + { + base.Update(frameTime); + + + var query = EntityQueryEnumerator(); + while (query.MoveNext(out var uid, out var glue)) + { + if (!glue.GlueBroken || glue.Glued) + continue; + + if (_timing.CurTime < glue.GlueTime) + continue; + + glue.Glued = false; + glue.GlueBroken = false; + MetaData(uid).EntityName = glue.BeforeGluedEntityName; + RemComp(uid); + RemComp(uid); + } + } + + //Adds the prefix on init. + private void OnGluedInit(EntityUid uid, GluedComponent component, ComponentInit args) + { + var meta = MetaData(uid); + var name = meta.EntityName; + component.BeforeGluedEntityName = meta.EntityName; + meta.EntityName = Loc.GetString("glued-name-prefix", ("target", name)); + } + + // Timers start only when the glued item is picked up. + private void OnPickUp(EntityUid uid, GluedComponent component, InteractHandEvent args) + { + var userHands = Comp(args.User); + if (userHands.ActiveHandEntity == uid) + { + component.GlueBroken = true; + component.GlueTime = _timing.CurTime + component.GlueCooldown; + } + } +} diff --git a/Content.Server/Nutrition/EntitySystems/FoodSystem.cs b/Content.Server/Nutrition/EntitySystems/FoodSystem.cs index 31b78b1080..1e0d253dcb 100644 --- a/Content.Server/Nutrition/EntitySystems/FoodSystem.cs +++ b/Content.Server/Nutrition/EntitySystems/FoodSystem.cs @@ -300,7 +300,7 @@ namespace Content.Server.Nutrition.EntitySystems DeleteAndSpawnTrash(component, uid, args.User); } - private void DeleteAndSpawnTrash(FoodComponent component, EntityUid food, EntityUid? user = null) + public void DeleteAndSpawnTrash(FoodComponent component, EntityUid food, EntityUid? user = null) { //We're empty. Become trash. var position = Transform(food).MapPosition; diff --git a/Content.Server/Puppet/PuppetDummySystem.cs b/Content.Server/Puppet/PuppetDummySystem.cs new file mode 100644 index 0000000000..ce1e7d21d8 --- /dev/null +++ b/Content.Server/Puppet/PuppetDummySystem.cs @@ -0,0 +1,100 @@ +using Content.Server.Ghost.Roles.Components; +using Content.Server.Popups; +using Content.Shared.Interaction.Events; +using Content.Shared.Puppet; +using Content.Shared.Hands.Components; +using Content.Server.Speech.Muting; +using Content.Shared.CombatMode; +using Content.Shared.Hands; + +namespace Content.Server.Puppet +{ + public sealed class PuppetDummySystem : SharedPuppetDummySystem + { + [Dependency] private readonly PopupSystem _popupSystem = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnDropped); + SubscribeLocalEvent(OnUseInHand); + SubscribeLocalEvent(OnUnequippedHand); + } + + /// + /// When used user inserts hand into dummy and the dummy can speak, when used again the user removes hand + /// from dummy and the dummy cannot speak. + /// + /// + /// + /// + private void OnUseInHand(EntityUid uid, PuppetDummyComponent component, UseInHandEvent args) + { + if (args.Handled) + return; + + var userHands = Comp(args.User); + + if (userHands.ActiveHandEntity == uid && HasComp(uid)) + { + RemComp(uid); + _popupSystem.PopupEntity(Loc.GetString("dummy-insert-hand"), uid, args.User); + _popupSystem.PopupEntity(Loc.GetString("dummy-inserted-hand"), uid, uid); + AddComp(uid); + + if (!HasComp(uid)) + { + EnsureComp(uid); + var ghostRole = AddComp(uid); + ghostRole.RoleName = Loc.GetString("dummy-role-name"); + ghostRole.RoleDescription = Loc.GetString("dummy-role-description"); + } + + } + + else if (userHands.ActiveHandEntity == uid && !HasComp(uid)) + { + _popupSystem.PopupEntity(Loc.GetString("dummy-remove-hand"), uid, args.User); + MuteDummy(uid, component); + } + + args.Handled = true; + } + + /// + /// When dropped the dummy is muted again. + /// + private void OnDropped(EntityUid uid, PuppetDummyComponent component, DroppedEvent args) + { + if (HasComp(uid)) + return; + + _popupSystem.PopupEntity(Loc.GetString("dummy-remove-hand"), uid, args.User); + MuteDummy(uid, component); + } + + /// + /// When unequipped from a hand slot the dummy is muted again. + /// + private void OnUnequippedHand(EntityUid uid, PuppetDummyComponent component, GotUnequippedHandEvent args) + { + if (HasComp(uid)) + return; + + _popupSystem.PopupEntity(Loc.GetString("dummy-remove-hand"), uid, args.User); + MuteDummy(uid, component); + } + + /// + /// Mutes the dummy. + /// + private void MuteDummy(EntityUid uid, PuppetDummyComponent component) + { + _popupSystem.PopupEntity(Loc.GetString("dummy-removed-hand"), uid, uid); + AddComp(uid); + RemComp(uid); + } + } +} + diff --git a/Content.Server/Speech/Muting/MutingSystem.cs b/Content.Server/Speech/Muting/MutingSystem.cs index bad6312445..5023957c4b 100644 --- a/Content.Server/Speech/Muting/MutingSystem.cs +++ b/Content.Server/Speech/Muting/MutingSystem.cs @@ -4,6 +4,7 @@ using Content.Server.Popups; using Content.Server.Speech.Components; using Content.Server.Speech.EntitySystems; using Content.Shared.Chat.Prototypes; +using Content.Shared.Puppet; using Content.Shared.Speech; namespace Content.Server.Speech.Muting @@ -36,6 +37,7 @@ namespace Content.Server.Speech.Muting if (HasComp(uid)) _popupSystem.PopupEntity(Loc.GetString("mime-cant-speak"), uid, uid); + else _popupSystem.PopupEntity(Loc.GetString("speech-muted"), uid, uid); args.Handled = true; @@ -46,8 +48,13 @@ namespace Content.Server.Speech.Muting { if (HasComp(uid)) _popupSystem.PopupEntity(Loc.GetString("mime-cant-speak"), uid, uid); + + if (HasComp(uid)) + _popupSystem.PopupEntity(Loc.GetString("dummy-cant-speak"), uid, uid); + else _popupSystem.PopupEntity(Loc.GetString("speech-muted"), uid, uid); + args.Cancel(); } } diff --git a/Content.Server/Weapons/Melee/WeaponRandom/WeaponRandomComponent.cs b/Content.Server/Weapons/Melee/WeaponRandom/WeaponRandomComponent.cs new file mode 100644 index 0000000000..66ca5135ff --- /dev/null +++ b/Content.Server/Weapons/Melee/WeaponRandom/WeaponRandomComponent.cs @@ -0,0 +1,40 @@ +using Content.Shared.Damage; +using Robust.Shared.Audio; + +namespace Content.Server.Weapons.Melee.WeaponRandom; + +[RegisterComponent] +internal sealed class WeaponRandomComponent : Component +{ + + /// + /// Amount of damage that will be caused. This is specified in the yaml. + /// + [DataField("damageBonus")] + public DamageSpecifier DamageBonus = new(); + + /// + /// Chance for the damage bonus to occur. + /// + [ViewVariables(VVAccess.ReadWrite)] + public float RandomDamageChance = 0.00001f; + + /// + /// If this is true then the random damage will occur. + /// + [DataField("randomDamage")] + public bool RandomDamage = true; + + /// + /// If this is true then the weapon will have a unique interaction with cluwnes. + /// + [DataField("antiCluwne")] + public bool AntiCluwne = true; + + /// + /// Noise to play when the damage bonus occurs. + /// + [DataField("damageSound")] + public SoundSpecifier DamageSound = new SoundPathSpecifier("/Audio/Items/bikehorn.ogg"); + +} diff --git a/Content.Server/Weapons/Melee/WeaponRandom/WeaponRandomSystem.cs b/Content.Server/Weapons/Melee/WeaponRandom/WeaponRandomSystem.cs new file mode 100644 index 0000000000..6236040a83 --- /dev/null +++ b/Content.Server/Weapons/Melee/WeaponRandom/WeaponRandomSystem.cs @@ -0,0 +1,36 @@ +using Content.Shared.Weapons.Melee.Events; +using Robust.Shared.Random; +using Content.Shared.Cluwne; + +namespace Content.Server.Weapons.Melee.WeaponRandom; + +public sealed class WeaponRandomSystem : EntitySystem +{ + [Dependency] private readonly IRobustRandom _random = default!; + [Dependency] private readonly SharedAudioSystem _audio = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnMeleeHit); + } + + private void OnMeleeHit(EntityUid uid, WeaponRandomComponent component, MeleeHitEvent args) + { + foreach (var entity in args.HitEntities) + { + if (HasComp(entity) && component.AntiCluwne) + { + _audio.PlayPvs(component.DamageSound, uid); + args.BonusDamage = component.DamageBonus; + } + + else if (_random.Prob(component.RandomDamageChance) && component.RandomDamage) + { + _audio.PlayPvs(component.DamageSound, uid); + args.BonusDamage = component.DamageBonus; + } + } + } +} diff --git a/Content.Shared/Glue/GlueComponent.cs b/Content.Shared/Glue/GlueComponent.cs new file mode 100644 index 0000000000..89a2c39789 --- /dev/null +++ b/Content.Shared/Glue/GlueComponent.cs @@ -0,0 +1,15 @@ +using Robust.Shared.Audio; +using Robust.Shared.GameStates; + +namespace Content.Shared.Glue +{ + [RegisterComponent, NetworkedComponent] + public sealed class GlueComponent : Component + { + /// + /// Noise made when glue applied. + /// + [DataField("squeeze")] + public SoundSpecifier Squeeze = new SoundPathSpecifier("/Audio/Items/squeezebottle.ogg"); + } +} diff --git a/Content.Shared/Glue/GluedComponent.cs b/Content.Shared/Glue/GluedComponent.cs new file mode 100644 index 0000000000..e9fcead70f --- /dev/null +++ b/Content.Shared/Glue/GluedComponent.cs @@ -0,0 +1,42 @@ +using Robust.Shared.Audio; +using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom; + +namespace Content.Shared.Glue; + +[RegisterComponent] +public sealed class GluedComponent : Component +{ + /// + /// Reverts name to before prefix event (essentially removes prefix). + /// + [DataField("beforeGluedEntityName"), ViewVariables(VVAccess.ReadOnly)] + public string BeforeGluedEntityName = String.Empty; + + /// + /// Sound made when glue applied. + /// + [DataField("squeeze")] + public SoundSpecifier Squeeze = new SoundPathSpecifier("/Audio/Items/squeezebottle.ogg"); + + /// + /// Timings for glue duration and removal. + /// + [DataField("nextGlueTime", customTypeSerializer: typeof(TimeOffsetSerializer)), ViewVariables(VVAccess.ReadWrite)] + public TimeSpan? NextGlueTime; + + [DataField("glueTime", customTypeSerializer: typeof(TimeOffsetSerializer))] + public TimeSpan GlueTime = TimeSpan.Zero; + + [DataField("glueCooldown")] + public TimeSpan GlueCooldown = TimeSpan.FromSeconds(20); + + + /// + /// Bools which control timings and when to apply the glue effect. + /// + public bool GlueBroken = false; + + [DataField("glued")] + [ViewVariables(VVAccess.ReadWrite)] + public bool Glued = false; +} diff --git a/Content.Shared/Puppet/PuppetDummyComponent.cs b/Content.Shared/Puppet/PuppetDummyComponent.cs new file mode 100644 index 0000000000..203c1dfd2f --- /dev/null +++ b/Content.Shared/Puppet/PuppetDummyComponent.cs @@ -0,0 +1,11 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared.Puppet +{ + [RegisterComponent, NetworkedComponent] + public sealed class PuppetDummyComponent : Component + { + [DataField("enabled")] + public bool Enabled = false; + } +} diff --git a/Content.Shared/Puppet/SharedPuppetDummySystem.cs b/Content.Shared/Puppet/SharedPuppetDummySystem.cs new file mode 100644 index 0000000000..ededcbcd5a --- /dev/null +++ b/Content.Shared/Puppet/SharedPuppetDummySystem.cs @@ -0,0 +1,71 @@ +using Content.Shared.ActionBlocker; +using Content.Shared.Hands; +using Content.Shared.Interaction.Events; +using Content.Shared.Item; +using Content.Shared.Emoting; +using Content.Shared.Movement.Events; + +namespace Content.Shared.Puppet +{ + public abstract class SharedPuppetDummySystem : EntitySystem + { + [Dependency] private readonly ActionBlockerSystem _blocker = default!; + + public override void Initialize() + { + base.Initialize(); + SubscribeLocalEvent(OnUseAttempt); + SubscribeLocalEvent(OnInteractAttempt); + SubscribeLocalEvent(OnDropAttempt); + SubscribeLocalEvent(OnPickupAttempt); + SubscribeLocalEvent(OnMoveAttempt); + SubscribeLocalEvent(OnEmoteAttempt); + SubscribeLocalEvent(OnChangeDirectionAttempt); + SubscribeLocalEvent(OnStartup); + } + + private void OnStartup(EntityUid uid, PuppetDummyComponent component, ComponentStartup args) + { + _blocker.UpdateCanMove(uid); + } + + private void OnMoveAttempt(EntityUid uid, PuppetDummyComponent component, UpdateCanMoveEvent args) + { + if (component.LifeStage > ComponentLifeStage.Running) + return; + + args.Cancel(); + } + + private void OnChangeDirectionAttempt(EntityUid uid, PuppetDummyComponent component, ChangeDirectionAttemptEvent args) + { + args.Cancel(); + } + + private void OnUseAttempt(EntityUid uid, PuppetDummyComponent component, UseAttemptEvent args) + { + args.Cancel(); + } + + private void OnEmoteAttempt(EntityUid uid, PuppetDummyComponent component, EmoteAttemptEvent args) + { + args.Cancel(); + } + + private void OnInteractAttempt(EntityUid uid, PuppetDummyComponent component, InteractionAttemptEvent args) + { + args.Cancel(); + } + + private void OnDropAttempt(EntityUid uid, PuppetDummyComponent component, DropAttemptEvent args) + { + args.Cancel(); + } + + private void OnPickupAttempt(EntityUid uid, PuppetDummyComponent component, PickupAttemptEvent args) + { + args.Cancel(); + } + } +} + diff --git a/Content.Shared/Vehicle/Components/VehicleComponent.cs b/Content.Shared/Vehicle/Components/VehicleComponent.cs index 01053f6c65..101dca6024 100644 --- a/Content.Shared/Vehicle/Components/VehicleComponent.cs +++ b/Content.Shared/Vehicle/Components/VehicleComponent.cs @@ -107,6 +107,10 @@ public sealed partial class VehicleComponent : Component [ViewVariables(VVAccess.ReadWrite)] public bool AutoAnimate = true; + [DataField("useHand")] + [ViewVariables(VVAccess.ReadWrite)] + public bool UseHand = true; + [DataField("hideRider")] [ViewVariables(VVAccess.ReadWrite)] public bool HideRider; diff --git a/Content.Shared/Vehicle/SharedVehicleSystem.cs b/Content.Shared/Vehicle/SharedVehicleSystem.cs index 7193cdd613..c854febad3 100644 --- a/Content.Shared/Vehicle/SharedVehicleSystem.cs +++ b/Content.Shared/Vehicle/SharedVehicleSystem.cs @@ -106,13 +106,15 @@ public abstract partial class SharedVehicleSystem : EntitySystem // Add Rider if (args.Buckling) { - // Add a virtual item to rider's hand, unbuckle if we can't. - if (!_virtualItemSystem.TrySpawnVirtualItemInHand(uid, args.BuckledEntity)) + if (component.UseHand == true) { - _buckle.TryUnbuckle(uid, uid, true); - return; + // Add a virtual item to rider's hand, unbuckle if we can't. + if (!_virtualItemSystem.TrySpawnVirtualItemInHand(uid, args.BuckledEntity)) + { + _buckle.TryUnbuckle(uid, uid, true); + return; + } } - // Set up the rider and vehicle with each other EnsureComp(uid); var rider = EnsureComp(args.BuckledEntity); @@ -148,7 +150,9 @@ public abstract partial class SharedVehicleSystem : EntitySystem // Clean up actions and virtual items _actionsSystem.RemoveProvidedActions(args.BuckledEntity, uid); - _virtualItemSystem.DeleteInHandsMatching(args.BuckledEntity, uid); + + if (component.UseHand == true) + _virtualItemSystem.DeleteInHandsMatching(args.BuckledEntity, uid); // Entity is no longer riding diff --git a/Resources/Audio/Effects/Vehicle/bicyclebell.ogg b/Resources/Audio/Effects/Vehicle/bicyclebell.ogg new file mode 100644 index 0000000000..589ffb6c5c Binary files /dev/null and b/Resources/Audio/Effects/Vehicle/bicyclebell.ogg differ diff --git a/Resources/Audio/Effects/Vehicle/license.txt b/Resources/Audio/Effects/Vehicle/license.txt index 9db54a21f6..8c00db6aa0 100644 --- a/Resources/Audio/Effects/Vehicle/license.txt +++ b/Resources/Audio/Effects/Vehicle/license.txt @@ -3,3 +3,5 @@ vehiclestartup.ogg and vehicleengineidle.ogg taken from user InspectorJ at https carhorn.ogg taken from /tg/station at commit https://github.com/tgstation/tgstation/commit/40d89d11ea4a5cb81d61dc1018b46f4e7d32c62a policesiren.ogg taken from freesound user blukotek at https://freesound.org/people/blukotek/sounds/431651/ + +bicyclebell.ogg taken from freesound user 12gkopeckak at https://freesound.org/people/13gkopeckak/sounds/378911/ diff --git a/Resources/Audio/Items/attributions.yml b/Resources/Audio/Items/attributions.yml index 695cb183fa..fbb6d751e8 100644 --- a/Resources/Audio/Items/attributions.yml +++ b/Resources/Audio/Items/attributions.yml @@ -38,7 +38,12 @@ copyright: "Created by SamKolber, shortened and converted to OGG and mono" source: "https://freesound.org/people/SamKolber/sounds/210022/" +- files: ["squeezebottle.ogg"] + license: "CC0-1.0" + copyright: "Created by Breviceps, shortened and converted to OGG and mono" + source: "https://freesound.org/people/Breviceps/sounds/445118/" + - files: ["Toys/toyfall1.ogg, Toys/toyfall2.ogg"] license: "CC0-1.0" copyright: "Created by HighTechPuddle" - source: "https://github.com/HighTechPuddle/space-station-14" \ No newline at end of file + source: "https://github.com/HighTechPuddle/space-station-14" diff --git a/Resources/Audio/Items/squeezebottle.ogg b/Resources/Audio/Items/squeezebottle.ogg new file mode 100644 index 0000000000..4f6f1235bf Binary files /dev/null and b/Resources/Audio/Items/squeezebottle.ogg differ diff --git a/Resources/Audio/Weapons/licenses.txt b/Resources/Audio/Weapons/licenses.txt index 4dbd19401a..2485a85565 100644 --- a/Resources/Audio/Weapons/licenses.txt +++ b/Resources/Audio/Weapons/licenses.txt @@ -14,10 +14,12 @@ block_metal1.ogg taken from https://github.com/Citadel-Station-13/Citadel-Statio pierce.ogg taken from: https://github.com/tgstation/tgstation/commit/106cd26fc00851a51dd362f3131120318d848a53 +rubberhammer.ogg taken from https://freesound.org/people/ScreamStudio/sounds/392617/ under CC0 1.0 + - files: ["weoweo.ogg"] license: "SONNISS #GAMEAUDIOGDC BUNDLE LICENSING" copyright: "Taken from Sonniss.com - GDC 2023 - Systematic Sound - TonalElements Obscurum - Dark Drones" - files: ["soup.ogg"] license: "SONNISS #GAMEAUDIOGDC BUNDLE LICENSING" - copyright: "Taken from Sonniss.com - GDC 2023 - 344 AUdio - Epic Impacts Vol. 1" \ No newline at end of file + copyright: "Taken from Sonniss.com - GDC 2023 - 344 AUdio - Epic Impacts Vol. 1" diff --git a/Resources/Audio/Weapons/rubberhammer.ogg b/Resources/Audio/Weapons/rubberhammer.ogg new file mode 100644 index 0000000000..bf4d063469 Binary files /dev/null and b/Resources/Audio/Weapons/rubberhammer.ogg differ diff --git a/Resources/Locale/en-US/dummy/dummy.ftl b/Resources/Locale/en-US/dummy/dummy.ftl new file mode 100644 index 0000000000..9c77d362c1 --- /dev/null +++ b/Resources/Locale/en-US/dummy/dummy.ftl @@ -0,0 +1,7 @@ +dummy-cant-speak = You cannot speak without a helping hand. +dummy-insert-hand = You insert your hand. +dummy-remove-hand = You remove your hand. +dummy-inserted-hand = You have a helping hand. +dummy-removed-hand = you have lost your helping hand. +dummy-role-name = A dummy +dummy-role-description = Become a dummy, dummy! diff --git a/Resources/Locale/en-US/flavors/flavor-profiles.ftl b/Resources/Locale/en-US/flavors/flavor-profiles.ftl index 1025cc310f..47cf9717d3 100644 --- a/Resources/Locale/en-US/flavors/flavor-profiles.ftl +++ b/Resources/Locale/en-US/flavors/flavor-profiles.ftl @@ -143,6 +143,8 @@ flavor-complex-chaos = like chaos flavor-complex-squirming = like squirming flavor-complex-electrons = like electrons flavor-complex-parents = like someone's parents +flavor-complex-plastic = like plastic +flavor-complex-glue = like glue # Drink-specific flavors. diff --git a/Resources/Locale/en-US/glue/glue.ftl b/Resources/Locale/en-US/glue/glue.ftl new file mode 100644 index 0000000000..2f12083a14 --- /dev/null +++ b/Resources/Locale/en-US/glue/glue.ftl @@ -0,0 +1,3 @@ +glue-success = {THE($target)} has been covered in glue. +glued-name-prefix = Glued {$target} +glue-failure = {THE($target)} is already covered in glue. diff --git a/Resources/Prototypes/Catalog/Cargo/cargo_fun.yml b/Resources/Prototypes/Catalog/Cargo/cargo_fun.yml index 7d414334e8..f2ad0d8e9d 100644 --- a/Resources/Prototypes/Catalog/Cargo/cargo_fun.yml +++ b/Resources/Prototypes/Catalog/Cargo/cargo_fun.yml @@ -157,3 +157,13 @@ cost: 400 category: Fun group: market + +- type: cargoProduct + id: FunToyBox + icon: + sprite: Structures/Storage/Crates/toybox.rsi + state: crate_icon + product: CrateFunToyBox + cost: 900 + category: Fun + group: market diff --git a/Resources/Prototypes/Catalog/Fills/Crates/fun.yml b/Resources/Prototypes/Catalog/Fills/Crates/fun.yml index 9f9605951c..a08200add8 100644 --- a/Resources/Prototypes/Catalog/Fills/Crates/fun.yml +++ b/Resources/Prototypes/Catalog/Fills/Crates/fun.yml @@ -239,3 +239,24 @@ - id: HatBandRed - id: FoamCutlass amount: 2 + +- type: entity + id: CrateFunToyBox + parent: CrateToyBox + suffix: Filled + components: + - type: StorageFill + contents: + - id: CrazyGlue + amount: 2 + - id: PlasticBanana + - id: WhoopieCushion + - id: ToyHammer + - id: MrChips + orGroup: GiftPool + - id: MrDips + orGroup: Giftpool + - id: RevolverCapGun + - id: VehicleUnicycleFolded + - id: ClothingShoesClownLarge + - id: ClothingHeadHatMagician diff --git a/Resources/Prototypes/Entities/Clothing/Back/backpacks.yml b/Resources/Prototypes/Entities/Clothing/Back/backpacks.yml index c0360c80ca..87ac566447 100644 --- a/Resources/Prototypes/Entities/Clothing/Back/backpacks.yml +++ b/Resources/Prototypes/Entities/Clothing/Back/backpacks.yml @@ -247,9 +247,9 @@ - type: entity parent: ClothingBackpackClown id: ClothingBackpackCluwne - name: cursed giggles von honkerton + name: jiggles von jonkerton suffix: Unremoveable - description: Cursed giggles von honkerton backpack. + description: It's a backpack made by Jonk! Co. components: - type: Sprite sprite: Clothing/Back/Backpacks/cluwne.rsi diff --git a/Resources/Prototypes/Entities/Clothing/Head/hats.yml b/Resources/Prototypes/Entities/Clothing/Head/hats.yml index d4d488e8cc..c45c287a2e 100644 --- a/Resources/Prototypes/Entities/Clothing/Head/hats.yml +++ b/Resources/Prototypes/Entities/Clothing/Head/hats.yml @@ -586,3 +586,34 @@ sprite: Clothing/Head/Hats/hetman_hat.rsi - type: Clothing sprite: Clothing/Head/Hats/hetman_hat.rsi + +- type: entity + parent: ClothingHeadBase + id: ClothingHeadHatMagician + name: magician's top hat. + description: "A magician's top hat." + components: + - type: Icon + sprite: Clothing/Head/Hats/magician.rsi + state: "icon" + - type: Sprite + state: "icon" + sprite: Clothing/Head/Hats/magician.rsi + - type: Clothing + clothingVisuals: + head: + - state: equipped-HELMET + offset: "0, 0.12" + sprite: Clothing/Head/Hats/magician.rsi + - type: Item + size: 10 + sprite: Clothing/Head/Hats/magician.rsi + - type: Storage + capacity: 10 + - type: UserInterface + interfaces: + - key: enum.StorageUiKey.Key + type: StorageBoundUserInterface + - type: ContainerContainer + containers: + storagebase: !type:Container diff --git a/Resources/Prototypes/Entities/Clothing/Shoes/specific.yml b/Resources/Prototypes/Entities/Clothing/Shoes/specific.yml index 2129207047..dae8bf2f19 100644 --- a/Resources/Prototypes/Entities/Clothing/Shoes/specific.yml +++ b/Resources/Prototypes/Entities/Clothing/Shoes/specific.yml @@ -161,3 +161,25 @@ - type: Clothing sprite: Clothing/Shoes/Specific/cluwne.rsi - type: Unremoveable + +- type: entity + parent: ClothingShoesClown + id: ClothingShoesClownLarge + name: large clown shoes + description: "When you need to stand out in a room full of clowns!" + components: + - type: Sprite + state: "icon" + sprite: Clothing/Shoes/Specific/large_clown.rsi + - type: Clothing + sprite: Clothing/Shoes/Specific/large_clown.rsi + clothingVisuals: + shoes: + - state: equipped-FEET + offset: "0, -0.02" + - type: Item + size: 10 + sprite: Clothing/Shoes/Specific/large_clown.rsi + - type: ClothingSpeedModifier + walkModifier: 0.85 + sprintModifier: 0.8 diff --git a/Resources/Prototypes/Entities/Objects/Fun/puppet.yml b/Resources/Prototypes/Entities/Objects/Fun/puppet.yml new file mode 100644 index 0000000000..e7dbf94ba9 --- /dev/null +++ b/Resources/Prototypes/Entities/Objects/Fun/puppet.yml @@ -0,0 +1,45 @@ +- type: entity + parent: BaseItem + id: MrChips + name: mr chips + suffix: Dummy + description: It's a dummy, dummy! + components: + - type: Sprite + netsync: false + sprite: Objects/Fun/mrchips.rsi + layers: + - state: icon + - type: Input + context: "human" + - type: DoAfter + - type: PuppetDummy + - type: Item + size: 30 + - type: Muted + - type: TypingIndicator + proto: robot + - type: Actions + - type: MobState + allowedStates: + - Alive + - type: MeleeWeapon + hidden: true + soundHit: + path: /Audio/Weapons/boxingpunch1.ogg + angle: 30 + animation: WeaponArcPunch + damage: + types: + Blunt: 2 + +- type: entity + parent: MrChips + id: MrDips + name: mr dips + components: + - type: Sprite + netsync: false + sprite: Objects/Fun/mrdips.rsi + layers: + - state: icon diff --git a/Resources/Prototypes/Entities/Objects/Fun/toys.yml b/Resources/Prototypes/Entities/Objects/Fun/toys.yml index 93fe221985..1684da371b 100644 --- a/Resources/Prototypes/Entities/Objects/Fun/toys.yml +++ b/Resources/Prototypes/Entities/Objects/Fun/toys.yml @@ -987,3 +987,160 @@ tags: - ClownRecorder +- type: entity + parent: BaseItem + id: ToyHammer + name: rubber hammer + description: A brightly colored hammer made of rubber. + components: + - type: Sprite + sprite: Objects/Fun/rubber_hammer.rsi + layers: + - state: icon + shader: unshaded + - type: WeaponRandom + damageBonus: + types: + Blunt: 1000 + - type: StaminaDamageOnHit + damage: 8 + - type: Item + size: 5 + sprite: Objects/Fun/rubber_hammer.rsi + - type: Appearance + - type: DisarmMalus + malus: 0 + - type: MeleeWeapon + soundHit: + collection: RubberHammer + params: + variation: 0.03 + volume: 3 + soundNoDamage: + collection: RubberHammer + params: + variation: 0.03 + volume: 3 + damage: + types: + Blunt: 0 + +- type: entity + parent: BaseItem + id: WhoopieCushion + name: whoopie cushion + description: A practical joke device involving flatulence humour. + components: + - type: Sprite + sprite: Objects/Fun/whoopie.rsi + state: icon + quickEquip: false + - type: ItemCooldown + - type: EmitSoundOnUse + sound: + collection: Parp + params: + variation: 0.125 + - type: UseDelay + delay: 0.8 + - type: Slippery + paralyzeTime: 0 + slipSound: + collection: Parp + params: + variation: 0.125 + - type: MeleeWeapon + soundHit: + collection: Parp + params: + variation: 0.125 + damage: + types: + Blunt: 0 + - type: StepTrigger + intersectRatio: 0.2 + requiredTriggeredSpeed: 1 + - type: TriggerOnStepTrigger + - type: Appearance + - type: CollisionWake + enabled: false + - type: Physics + bodyType: Dynamic + - type: Fixtures + fixtures: + slips: + shape: + !type:PhysShapeAabb + bounds: "-0.2,-0.2,0.2,0.2" + hard: false + layer: + - SlipLayer + fix1: + shape: + !type:PhysShapeAabb + bounds: "-0.2,-0.2,0.2,0.2" + density: 30 + mask: + - ItemMask + +- type: entity + name: banana + parent: FoodProduceBase + id: PlasticBanana + description: A plastic banana. + suffix: Plastic + components: + - type: FlavorProfile + flavors: + - plastic + - type: Food + - type: Sprite + sprite: Objects/Specific/Hydroponics/banana.rsi + - type: SolutionContainerManager + solutions: + food: + reagents: + - ReagentId: Nothing + Quantity: 100 + +- type: entity + parent: FoodProduceBase + id: CrazyGlue + name: crazy glue + description: A bottle of crazy glue manufactured by Honk! Co. + components: + - type: FlavorProfile + flavors: + - glue + - type: Food + trash: CrazyGlueEmpty + - type: Sprite + sprite: Objects/Fun/glue.rsi + state: icon-0 + - type: Appearance + - type: Glue + - type: Item + sprite: Objects/Fun/glue.rsi + - type: SolutionContainerManager + solutions: + food: + maxVol: 15 + reagents: + - ReagentId: SpaceGlue + Quantity: 6 + +- type: entity + name: empty crazy glue + parent: BaseItem + id: CrazyGlueEmpty + components: + - type: Sprite + sprite: Objects/Fun/glue.rsi + state: icon-1 + - type: Item + sprite: Objects/Fun/glue.rsi + - type: Tag + tags: + - Recyclable + - Trash + - type: SpaceGarbage diff --git a/Resources/Prototypes/Entities/Objects/Vehicles/buckleable.yml b/Resources/Prototypes/Entities/Objects/Vehicles/buckleable.yml index 220bba8c4d..a2b9f067b0 100644 --- a/Resources/Prototypes/Entities/Objects/Vehicles/buckleable.yml +++ b/Resources/Prototypes/Entities/Objects/Vehicles/buckleable.yml @@ -372,3 +372,65 @@ path: /Audio/Effects/Vehicle/vehiclestartup.ogg params: volume: -3 + +- type: entity + id: VehicleUnicycle + parent: [BaseVehicle, BaseFoldable, BaseItem] + name: unicycle + description: It only has one wheel! + components: + - type: Vehicle + useHand: false + northOver: true + southOver: true + northOverride: -0.15 + southOverride: 0.15 + hasKey: true + hornSound: + path: /Audio/Effects/Vehicle/bicyclebell.ogg + - type: Sprite + sprite: Objects/Vehicles/unicycle.rsi + layers: + - state: vehicle + map: ["enum.VehicleVisualLayers.AutoAnimate", "unfoldedLayer"] + - state: vehicle_folded + map: ["foldedLayer"] + visible: false + netsync: false + noRot: true + - type: Strap + buckleOffset: "0.1, -0.05" + maxBuckleDistance: 1 + - type: MovementSpeedModifier + acceleration: 1 + friction: 0.8 + baseWalkSpeed: 3.5 + baseSprintSpeed: 4.3 + - type: Tag + tags: + - DoorBumpOpener + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 200 + behaviors: + - !type:DoActsBehavior + acts: [ "Destruction" ] + - trigger: + !type:DamageTrigger + damage: 240 + behaviors: + - !type:DoActsBehavior + acts: ["Destruction"] + - !type:PlaySoundBehavior + sound: + path: /Audio/Effects/metalbreak.ogg + +- type: entity + parent: VehicleUnicycle + id: VehicleUnicycleFolded + suffix: folded + components: + - type: Foldable + folded: true diff --git a/Resources/Prototypes/Entities/Structures/Storage/Crates/crates.yml b/Resources/Prototypes/Entities/Structures/Storage/Crates/crates.yml index e2065ee23f..be4b23f982 100644 --- a/Resources/Prototypes/Entities/Structures/Storage/Crates/crates.yml +++ b/Resources/Prototypes/Entities/Structures/Storage/Crates/crates.yml @@ -372,3 +372,24 @@ - type: EntityStorageVisuals stateDoorOpen: crate_open stateDoorClosed: crate_door + +- type: entity + parent: CratePirate + id: CrateToyBox + name: toy box + suffix: Empty + description: A box overflowing with fun. + components: + - type: Sprite + sprite: Structures/Storage/Crates/toybox.rsi + layers: + - state: crate + map: ["enum.StorageVisualLayers.Base"] + - state: crate_door + map: ["enum.StorageVisualLayers.Door"] + - state: welded + visible: false + map: ["enum.WeldableLayers.BaseWelded"] + - type: Icon + sprite: Structures/Storage/Crates/toybox.rsi + state: crate_icon diff --git a/Resources/Prototypes/Flavors/flavors.yml b/Resources/Prototypes/Flavors/flavors.yml index 81bfa683fa..e2b03bb749 100644 --- a/Resources/Prototypes/Flavors/flavors.yml +++ b/Resources/Prototypes/Flavors/flavors.yml @@ -799,6 +799,16 @@ flavorType: Complex description: flavor-complex-themartinez +- type: flavor + id: plastic + flavorType: Complex + description: flavor-complex-plastic + +- type: flavor + id: glue + flavorType: Complex + description: flavor-complex-glue + - type: flavor id: rocksandstones flavorType: Complex diff --git a/Resources/Prototypes/Reagents/cleaning.yml b/Resources/Prototypes/Reagents/cleaning.yml index 3d94aaa5a4..56b3680daa 100644 --- a/Resources/Prototypes/Reagents/cleaning.yml +++ b/Resources/Prototypes/Reagents/cleaning.yml @@ -56,7 +56,7 @@ name: reagent-name-space-glue desc: reagent-desc-space-glue physicalDesc: reagent-physical-desc-sticky - flavor: funny + flavor: glue color: "#ffffff" boilingPoint: 250.0 meltingPoint: 380.0 diff --git a/Resources/Prototypes/SoundCollections/bike_horn.yml b/Resources/Prototypes/SoundCollections/bike_horn.yml index 02c2b13678..aeb3ec18f5 100644 --- a/Resources/Prototypes/SoundCollections/bike_horn.yml +++ b/Resources/Prototypes/SoundCollections/bike_horn.yml @@ -22,3 +22,13 @@ id: BoxingBell files: - /Audio/Weapons/boxingbell.ogg + +- type: soundCollection + id: RubberHammer + files: + - /Audio/Weapons/rubberhammer.ogg + +- type: soundCollection + id: Parp + files: + - /Audio/Effects/Emotes/parp1.ogg diff --git a/Resources/Textures/Clothing/Head/Hats/magician.rsi/equipped-HELMET.png b/Resources/Textures/Clothing/Head/Hats/magician.rsi/equipped-HELMET.png new file mode 100644 index 0000000000..037ae386a6 Binary files /dev/null and b/Resources/Textures/Clothing/Head/Hats/magician.rsi/equipped-HELMET.png differ diff --git a/Resources/Textures/Clothing/Head/Hats/magician.rsi/icon.png b/Resources/Textures/Clothing/Head/Hats/magician.rsi/icon.png new file mode 100644 index 0000000000..38bd127919 Binary files /dev/null and b/Resources/Textures/Clothing/Head/Hats/magician.rsi/icon.png differ diff --git a/Resources/Textures/Clothing/Head/Hats/magician.rsi/inhand-left.png b/Resources/Textures/Clothing/Head/Hats/magician.rsi/inhand-left.png new file mode 100644 index 0000000000..ac7d245aec Binary files /dev/null and b/Resources/Textures/Clothing/Head/Hats/magician.rsi/inhand-left.png differ diff --git a/Resources/Textures/Clothing/Head/Hats/magician.rsi/inhand-right.png b/Resources/Textures/Clothing/Head/Hats/magician.rsi/inhand-right.png new file mode 100644 index 0000000000..c14c928705 Binary files /dev/null and b/Resources/Textures/Clothing/Head/Hats/magician.rsi/inhand-right.png differ diff --git a/Resources/Textures/Clothing/Head/Hats/magician.rsi/meta.json b/Resources/Textures/Clothing/Head/Hats/magician.rsi/meta.json new file mode 100644 index 0000000000..2b308bf6ca --- /dev/null +++ b/Resources/Textures/Clothing/Head/Hats/magician.rsi/meta.json @@ -0,0 +1,26 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Made by brainfood1183 (github)", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-HELMET", + "directions": 4 + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/Clothing/Shoes/Specific/large_clown.rsi/equipped-FEET.png b/Resources/Textures/Clothing/Shoes/Specific/large_clown.rsi/equipped-FEET.png new file mode 100644 index 0000000000..3287cf4ea3 Binary files /dev/null and b/Resources/Textures/Clothing/Shoes/Specific/large_clown.rsi/equipped-FEET.png differ diff --git a/Resources/Textures/Clothing/Shoes/Specific/large_clown.rsi/icon.png b/Resources/Textures/Clothing/Shoes/Specific/large_clown.rsi/icon.png new file mode 100644 index 0000000000..53d8da0d72 Binary files /dev/null and b/Resources/Textures/Clothing/Shoes/Specific/large_clown.rsi/icon.png differ diff --git a/Resources/Textures/Clothing/Shoes/Specific/large_clown.rsi/inhand-left.png b/Resources/Textures/Clothing/Shoes/Specific/large_clown.rsi/inhand-left.png new file mode 100644 index 0000000000..4eaae15df2 Binary files /dev/null and b/Resources/Textures/Clothing/Shoes/Specific/large_clown.rsi/inhand-left.png differ diff --git a/Resources/Textures/Clothing/Shoes/Specific/large_clown.rsi/inhand-right.png b/Resources/Textures/Clothing/Shoes/Specific/large_clown.rsi/inhand-right.png new file mode 100644 index 0000000000..47856cd166 Binary files /dev/null and b/Resources/Textures/Clothing/Shoes/Specific/large_clown.rsi/inhand-right.png differ diff --git a/Resources/Textures/Clothing/Shoes/Specific/large_clown.rsi/meta.json b/Resources/Textures/Clothing/Shoes/Specific/large_clown.rsi/meta.json new file mode 100644 index 0000000000..3c606364d8 --- /dev/null +++ b/Resources/Textures/Clothing/Shoes/Specific/large_clown.rsi/meta.json @@ -0,0 +1,26 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Made by brainfood1183 (github)", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-FEET", + "directions": 4 + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/Effects/speech.rsi/meta.json b/Resources/Textures/Effects/speech.rsi/meta.json index c027615618..7d2699707c 100644 --- a/Resources/Textures/Effects/speech.rsi/meta.json +++ b/Resources/Textures/Effects/speech.rsi/meta.json @@ -5,7 +5,7 @@ "y": 64 }, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/c6e3401f2e7e1e55c57060cdf956a98ef1fefc24 | Moth sprites made by PuroSlavKing (Github)", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/c6e3401f2e7e1e55c57060cdf956a98ef1fefc24 | Moth sprites made by PuroSlavKing (Github), dummy made by brainfood1183 (github)", "states": [ { "name": "alien0", diff --git a/Resources/Textures/Objects/Fun/glue.rsi/icon-0.png b/Resources/Textures/Objects/Fun/glue.rsi/icon-0.png new file mode 100644 index 0000000000..8e02238119 Binary files /dev/null and b/Resources/Textures/Objects/Fun/glue.rsi/icon-0.png differ diff --git a/Resources/Textures/Objects/Fun/glue.rsi/icon-1.png b/Resources/Textures/Objects/Fun/glue.rsi/icon-1.png new file mode 100644 index 0000000000..b648e9eb40 Binary files /dev/null and b/Resources/Textures/Objects/Fun/glue.rsi/icon-1.png differ diff --git a/Resources/Textures/Objects/Fun/glue.rsi/inhand-left.png b/Resources/Textures/Objects/Fun/glue.rsi/inhand-left.png new file mode 100644 index 0000000000..6678c2db8d Binary files /dev/null and b/Resources/Textures/Objects/Fun/glue.rsi/inhand-left.png differ diff --git a/Resources/Textures/Objects/Fun/glue.rsi/inhand-right.png b/Resources/Textures/Objects/Fun/glue.rsi/inhand-right.png new file mode 100644 index 0000000000..1388227cbd Binary files /dev/null and b/Resources/Textures/Objects/Fun/glue.rsi/inhand-right.png differ diff --git a/Resources/Textures/Objects/Fun/glue.rsi/meta.json b/Resources/Textures/Objects/Fun/glue.rsi/meta.json new file mode 100644 index 0000000000..be4241324e --- /dev/null +++ b/Resources/Textures/Objects/Fun/glue.rsi/meta.json @@ -0,0 +1,25 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Made by brainfood1183 (github) for ss14", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon-0" + }, + { + "name": "icon-1" + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/Objects/Fun/mrchips.rsi/icon.png b/Resources/Textures/Objects/Fun/mrchips.rsi/icon.png new file mode 100644 index 0000000000..b4ce58ba56 Binary files /dev/null and b/Resources/Textures/Objects/Fun/mrchips.rsi/icon.png differ diff --git a/Resources/Textures/Objects/Fun/mrchips.rsi/inhand-left.png b/Resources/Textures/Objects/Fun/mrchips.rsi/inhand-left.png new file mode 100644 index 0000000000..0c54fdff63 Binary files /dev/null and b/Resources/Textures/Objects/Fun/mrchips.rsi/inhand-left.png differ diff --git a/Resources/Textures/Objects/Fun/mrchips.rsi/inhand-right.png b/Resources/Textures/Objects/Fun/mrchips.rsi/inhand-right.png new file mode 100644 index 0000000000..b06d0473af Binary files /dev/null and b/Resources/Textures/Objects/Fun/mrchips.rsi/inhand-right.png differ diff --git a/Resources/Textures/Objects/Fun/mrchips.rsi/meta.json b/Resources/Textures/Objects/Fun/mrchips.rsi/meta.json new file mode 100644 index 0000000000..f7dffb9cb5 --- /dev/null +++ b/Resources/Textures/Objects/Fun/mrchips.rsi/meta.json @@ -0,0 +1,22 @@ +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "Made by brainfoo1183 (github) for ss14", + "states": [ + { + "name": "icon" + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + ] + } diff --git a/Resources/Textures/Objects/Fun/mrdips.rsi/icon.png b/Resources/Textures/Objects/Fun/mrdips.rsi/icon.png new file mode 100644 index 0000000000..5f1102f79f Binary files /dev/null and b/Resources/Textures/Objects/Fun/mrdips.rsi/icon.png differ diff --git a/Resources/Textures/Objects/Fun/mrdips.rsi/inhand-left.png b/Resources/Textures/Objects/Fun/mrdips.rsi/inhand-left.png new file mode 100644 index 0000000000..d401a6575d Binary files /dev/null and b/Resources/Textures/Objects/Fun/mrdips.rsi/inhand-left.png differ diff --git a/Resources/Textures/Objects/Fun/mrdips.rsi/inhand-right.png b/Resources/Textures/Objects/Fun/mrdips.rsi/inhand-right.png new file mode 100644 index 0000000000..1af0f02d35 Binary files /dev/null and b/Resources/Textures/Objects/Fun/mrdips.rsi/inhand-right.png differ diff --git a/Resources/Textures/Objects/Fun/mrdips.rsi/meta.json b/Resources/Textures/Objects/Fun/mrdips.rsi/meta.json new file mode 100644 index 0000000000..f7dffb9cb5 --- /dev/null +++ b/Resources/Textures/Objects/Fun/mrdips.rsi/meta.json @@ -0,0 +1,22 @@ +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "Made by brainfoo1183 (github) for ss14", + "states": [ + { + "name": "icon" + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + ] + } diff --git a/Resources/Textures/Objects/Fun/rubber_hammer.rsi/icon.png b/Resources/Textures/Objects/Fun/rubber_hammer.rsi/icon.png new file mode 100644 index 0000000000..584eb558bd Binary files /dev/null and b/Resources/Textures/Objects/Fun/rubber_hammer.rsi/icon.png differ diff --git a/Resources/Textures/Objects/Fun/rubber_hammer.rsi/inhand-left.png b/Resources/Textures/Objects/Fun/rubber_hammer.rsi/inhand-left.png new file mode 100644 index 0000000000..f38c49c26d Binary files /dev/null and b/Resources/Textures/Objects/Fun/rubber_hammer.rsi/inhand-left.png differ diff --git a/Resources/Textures/Objects/Fun/rubber_hammer.rsi/inhand-right.png b/Resources/Textures/Objects/Fun/rubber_hammer.rsi/inhand-right.png new file mode 100644 index 0000000000..8ab5724d47 Binary files /dev/null and b/Resources/Textures/Objects/Fun/rubber_hammer.rsi/inhand-right.png differ diff --git a/Resources/Textures/Objects/Fun/rubber_hammer.rsi/meta.json b/Resources/Textures/Objects/Fun/rubber_hammer.rsi/meta.json new file mode 100644 index 0000000000..46efa2ee5b --- /dev/null +++ b/Resources/Textures/Objects/Fun/rubber_hammer.rsi/meta.json @@ -0,0 +1,22 @@ +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "https://github.com/goonstation/goonstation/commit/be4f220b65aa315165b5f3c2c24eeb5674caf03b#diff-a67180777ae47f2c84f3ebf93c61442bbe34aebcad5b7cbd76feb78f177bcee1", + "states": [ + { + "name": "icon" + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + ] + } diff --git a/Resources/Textures/Objects/Fun/whoopie.rsi/icon.png b/Resources/Textures/Objects/Fun/whoopie.rsi/icon.png new file mode 100644 index 0000000000..dc0d9b37eb Binary files /dev/null and b/Resources/Textures/Objects/Fun/whoopie.rsi/icon.png differ diff --git a/Resources/Textures/Objects/Fun/whoopie.rsi/meta.json b/Resources/Textures/Objects/Fun/whoopie.rsi/meta.json new file mode 100644 index 0000000000..8cb5a2fb19 --- /dev/null +++ b/Resources/Textures/Objects/Fun/whoopie.rsi/meta.json @@ -0,0 +1,14 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Made by brainfood1183 (github) for ss14", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + } + ] +} diff --git a/Resources/Textures/Objects/Vehicles/unicycle.rsi/meta.json b/Resources/Textures/Objects/Vehicles/unicycle.rsi/meta.json new file mode 100644 index 0000000000..dc2e545ede --- /dev/null +++ b/Resources/Textures/Objects/Vehicles/unicycle.rsi/meta.json @@ -0,0 +1,43 @@ +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "Made by brainfood1183 (github) for ss14", + "states": [ + { + "name": "vehicle", + "directions": 4, + "delays": [ + [ + 0.2, + 0.2, + 0.2 + ], + [ + 0.2, + 0.2, + 0.2 + ], + [ + 0.2, + 0.2, + 0.2 + ], + [ + 0.2, + 0.2, + 0.2 + ] + ] + }, + { + "name": "vehicle_folded" + }, + { + "name": "vehicle_unfolded" + } + ] +} diff --git a/Resources/Textures/Objects/Vehicles/unicycle.rsi/vehicle.png b/Resources/Textures/Objects/Vehicles/unicycle.rsi/vehicle.png new file mode 100644 index 0000000000..ef795c73b4 Binary files /dev/null and b/Resources/Textures/Objects/Vehicles/unicycle.rsi/vehicle.png differ diff --git a/Resources/Textures/Objects/Vehicles/unicycle.rsi/vehicle_folded.png b/Resources/Textures/Objects/Vehicles/unicycle.rsi/vehicle_folded.png new file mode 100644 index 0000000000..13476b7870 Binary files /dev/null and b/Resources/Textures/Objects/Vehicles/unicycle.rsi/vehicle_folded.png differ diff --git a/Resources/Textures/Objects/Vehicles/unicycle.rsi/vehicle_unfolded.png b/Resources/Textures/Objects/Vehicles/unicycle.rsi/vehicle_unfolded.png new file mode 100644 index 0000000000..c23e9676fe Binary files /dev/null and b/Resources/Textures/Objects/Vehicles/unicycle.rsi/vehicle_unfolded.png differ diff --git a/Resources/Textures/Structures/Storage/Crates/toybox.rsi/crate.png b/Resources/Textures/Structures/Storage/Crates/toybox.rsi/crate.png new file mode 100644 index 0000000000..c3af37ea56 Binary files /dev/null and b/Resources/Textures/Structures/Storage/Crates/toybox.rsi/crate.png differ diff --git a/Resources/Textures/Structures/Storage/Crates/toybox.rsi/crate_door.png b/Resources/Textures/Structures/Storage/Crates/toybox.rsi/crate_door.png new file mode 100644 index 0000000000..d3164e803a Binary files /dev/null and b/Resources/Textures/Structures/Storage/Crates/toybox.rsi/crate_door.png differ diff --git a/Resources/Textures/Structures/Storage/Crates/toybox.rsi/crate_icon.png b/Resources/Textures/Structures/Storage/Crates/toybox.rsi/crate_icon.png new file mode 100644 index 0000000000..d20d86a640 Binary files /dev/null and b/Resources/Textures/Structures/Storage/Crates/toybox.rsi/crate_icon.png differ diff --git a/Resources/Textures/Structures/Storage/Crates/toybox.rsi/crate_open.png b/Resources/Textures/Structures/Storage/Crates/toybox.rsi/crate_open.png new file mode 100644 index 0000000000..24baeb3621 Binary files /dev/null and b/Resources/Textures/Structures/Storage/Crates/toybox.rsi/crate_open.png differ diff --git a/Resources/Textures/Structures/Storage/Crates/toybox.rsi/meta.json b/Resources/Textures/Structures/Storage/Crates/toybox.rsi/meta.json new file mode 100644 index 0000000000..082564ccfb --- /dev/null +++ b/Resources/Textures/Structures/Storage/Crates/toybox.rsi/meta.json @@ -0,0 +1,40 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Made by brainfood118 (github) for ss14", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "crate" + }, + { + "name": "crate_door" + }, + { + "name": "welded" + }, + { + "name": "crate_icon" + }, + { + "name": "sparking", + "directions": 1, + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "crate_open" + } + ] +} diff --git a/Resources/Textures/Structures/Storage/Crates/toybox.rsi/sparking.png b/Resources/Textures/Structures/Storage/Crates/toybox.rsi/sparking.png new file mode 100644 index 0000000000..87b78b9b46 Binary files /dev/null and b/Resources/Textures/Structures/Storage/Crates/toybox.rsi/sparking.png differ diff --git a/Resources/Textures/Structures/Storage/Crates/toybox.rsi/welded.png b/Resources/Textures/Structures/Storage/Crates/toybox.rsi/welded.png new file mode 100644 index 0000000000..c7b469bb46 Binary files /dev/null and b/Resources/Textures/Structures/Storage/Crates/toybox.rsi/welded.png differ