]> git.smokeofanarchy.ru Git - space-station-14.git/commitdiff
H.O.N.K. mech (#14670)
authordeltanedas <39013340+deltanedas@users.noreply.github.com>
Fri, 5 May 2023 13:21:13 +0000 (13:21 +0000)
committerGitHub <noreply@github.com>
Fri, 5 May 2023 13:21:13 +0000 (23:21 +1000)
Co-authored-by: deltanedas <@deltanedas:kde.org>
49 files changed:
Content.Client/Mech/Ui/Equipment/MechSoundboardUi.cs [new file with mode: 0644]
Content.Client/Mech/Ui/Equipment/MechSoundboardUiFragment.xaml [new file with mode: 0644]
Content.Client/Mech/Ui/Equipment/MechSoundboardUiFragment.xaml.cs [new file with mode: 0644]
Content.Server/Mech/Systems/MechSystem.cs
Content.Shared/Mech/Equipment/Components/MechSoundboardComponent.cs [new file with mode: 0644]
Content.Shared/Mech/Equipment/Systems/MechSoundboardSystem.cs [new file with mode: 0644]
Content.Shared/Mech/MechUI.cs
Resources/Locale/en-US/mech/soundboard.ftl [new file with mode: 0644]
Resources/Locale/en-US/prototypes/catalog/research/technologies.ftl
Resources/Locale/en-US/tools/tool-qualities.ftl
Resources/Prototypes/Catalog/Research/technologies.yml
Resources/Prototypes/Entities/Clothing/Masks/masks.yml
Resources/Prototypes/Entities/Clothing/Shoes/specific.yml
Resources/Prototypes/Entities/Objects/Devices/Electronics/mech.yml
Resources/Prototypes/Entities/Objects/Fun/bike_horn.yml
Resources/Prototypes/Entities/Objects/Specific/Mech/mech_construction.yml
Resources/Prototypes/Entities/Objects/Specific/Mech/mecha_equipment.yml
Resources/Prototypes/Entities/Objects/Specific/Mech/mechs.yml
Resources/Prototypes/Entities/Structures/Machines/lathe.yml
Resources/Prototypes/Recipes/Construction/Graphs/mechs/honker_construction.yml [new file with mode: 0644]
Resources/Prototypes/Recipes/Lathes/electronics.yml
Resources/Prototypes/Recipes/Lathes/mech_parts.yml
Resources/Prototypes/SoundCollections/troll.yml [new file with mode: 0644]
Resources/Prototypes/tags.yml
Resources/Prototypes/tool_qualities.yml
Resources/Textures/Objects/Specific/Mech/honker_construction.rsi/honker0.png [new file with mode: 0644]
Resources/Textures/Objects/Specific/Mech/honker_construction.rsi/honker1.png [new file with mode: 0644]
Resources/Textures/Objects/Specific/Mech/honker_construction.rsi/honker10.png [new file with mode: 0644]
Resources/Textures/Objects/Specific/Mech/honker_construction.rsi/honker11.png [new file with mode: 0644]
Resources/Textures/Objects/Specific/Mech/honker_construction.rsi/honker2.png [new file with mode: 0644]
Resources/Textures/Objects/Specific/Mech/honker_construction.rsi/honker3.png [new file with mode: 0644]
Resources/Textures/Objects/Specific/Mech/honker_construction.rsi/honker4.png [new file with mode: 0644]
Resources/Textures/Objects/Specific/Mech/honker_construction.rsi/honker5.png [new file with mode: 0644]
Resources/Textures/Objects/Specific/Mech/honker_construction.rsi/honker6.png [new file with mode: 0644]
Resources/Textures/Objects/Specific/Mech/honker_construction.rsi/honker7.png [new file with mode: 0644]
Resources/Textures/Objects/Specific/Mech/honker_construction.rsi/honker8.png [new file with mode: 0644]
Resources/Textures/Objects/Specific/Mech/honker_construction.rsi/honker9.png [new file with mode: 0644]
Resources/Textures/Objects/Specific/Mech/honker_construction.rsi/honker_chassis.png [new file with mode: 0644]
Resources/Textures/Objects/Specific/Mech/honker_construction.rsi/honker_harness+o.png [new file with mode: 0644]
Resources/Textures/Objects/Specific/Mech/honker_construction.rsi/honker_harness.png [new file with mode: 0644]
Resources/Textures/Objects/Specific/Mech/honker_construction.rsi/honker_l_arm+o.png [new file with mode: 0644]
Resources/Textures/Objects/Specific/Mech/honker_construction.rsi/honker_l_arm.png [new file with mode: 0644]
Resources/Textures/Objects/Specific/Mech/honker_construction.rsi/honker_l_leg+o.png [new file with mode: 0644]
Resources/Textures/Objects/Specific/Mech/honker_construction.rsi/honker_l_leg.png [new file with mode: 0644]
Resources/Textures/Objects/Specific/Mech/honker_construction.rsi/honker_r_arm+o.png [new file with mode: 0644]
Resources/Textures/Objects/Specific/Mech/honker_construction.rsi/honker_r_arm.png [new file with mode: 0644]
Resources/Textures/Objects/Specific/Mech/honker_construction.rsi/honker_r_leg+o.png [new file with mode: 0644]
Resources/Textures/Objects/Specific/Mech/honker_construction.rsi/honker_r_leg.png [new file with mode: 0644]
Resources/Textures/Objects/Specific/Mech/honker_construction.rsi/meta.json [new file with mode: 0644]

diff --git a/Content.Client/Mech/Ui/Equipment/MechSoundboardUi.cs b/Content.Client/Mech/Ui/Equipment/MechSoundboardUi.cs
new file mode 100644 (file)
index 0000000..6782531
--- /dev/null
@@ -0,0 +1,36 @@
+using Content.Client.UserInterface.Fragments;
+using Content.Shared.Mech;
+using Robust.Client.GameObjects;
+using Robust.Client.UserInterface;
+
+namespace Content.Client.Mech.Ui.Equipment;
+
+public sealed class MechSoundboardUi : UIFragment
+{
+    private MechSoundboardUiFragment? _fragment;
+
+    public override Control GetUIFragmentRoot()
+    {
+        return _fragment!;
+    }
+
+    public override void Setup(BoundUserInterface userInterface, EntityUid? fragmentOwner)
+    {
+        if (fragmentOwner == null)
+            return;
+
+        _fragment = new MechSoundboardUiFragment();
+        _fragment.OnPlayAction += sound =>
+        {
+            userInterface.SendMessage(new MechSoundboardPlayMessage(fragmentOwner.Value, sound));
+        };
+    }
+
+    public override void UpdateState(BoundUserInterfaceState state)
+    {
+        if (state is not MechSoundboardUiState soundboardState)
+            return;
+
+        _fragment?.UpdateContents(soundboardState);
+    }
+}
diff --git a/Content.Client/Mech/Ui/Equipment/MechSoundboardUiFragment.xaml b/Content.Client/Mech/Ui/Equipment/MechSoundboardUiFragment.xaml
new file mode 100644 (file)
index 0000000..341eb0a
--- /dev/null
@@ -0,0 +1,13 @@
+<equipment:MechSoundboardUiFragment
+    xmlns:equipment="clr-namespace:Content.Client.Mech.Ui.Equipment"
+    xmlns="https://spacestation14.io" Margin="1 0 2 0" HorizontalExpand="True" VerticalExpand="True">
+    <BoxContainer Orientation="Vertical"
+                  HorizontalExpand="True"
+                  VerticalExpand="True">
+        <ItemList Name="Sounds"
+                  VerticalExpand="True"
+                  MinHeight="160"
+                  HorizontalExpand="True"
+                  SelectMode="Button"/>
+    </BoxContainer>
+</equipment:MechSoundboardUiFragment>
diff --git a/Content.Client/Mech/Ui/Equipment/MechSoundboardUiFragment.xaml.cs b/Content.Client/Mech/Ui/Equipment/MechSoundboardUiFragment.xaml.cs
new file mode 100644 (file)
index 0000000..ce00e65
--- /dev/null
@@ -0,0 +1,28 @@
+using Content.Shared.Mech;
+using Robust.Client.AutoGenerated;
+using Robust.Client.UserInterface.Controls;
+using Robust.Client.UserInterface.XAML;
+
+namespace Content.Client.Mech.Ui.Equipment;
+
+[GenerateTypedNameReferences]
+public sealed partial class MechSoundboardUiFragment : BoxContainer
+{
+    public event Action<int>? OnPlayAction;
+
+    public MechSoundboardUiFragment()
+    {
+        RobustXamlLoader.Load(this);
+        IoCManager.InjectDependencies(this);
+    }
+
+    public void UpdateContents(MechSoundboardUiState state)
+    {
+        foreach (var sound in state.Sounds)
+        {
+            Sounds.AddItem(Loc.GetString($"mech-soundboard-{sound}")).OnSelected += item => {
+                OnPlayAction?.Invoke(Sounds.IndexOf(item));
+            };
+        }
+    }
+}
index 60eee7f881c4d8d0129da15e0c58e588399d76b0..9eec5fa34c9c828911903caa94243c61a108f92e 100644 (file)
@@ -62,7 +62,8 @@ public sealed class MechSystem : SharedMechSystem
         SubscribeLocalEvent<MechPilotComponent, AtmosExposedGetAirEvent>(OnExpose);
 
         #region Equipment UI message relays
-        SubscribeLocalEvent<MechComponent, MechGrabberEjectMessage>(RecieveEquipmentUiMesssages);
+        SubscribeLocalEvent<MechComponent, MechGrabberEjectMessage>(ReceiveEquipmentUiMesssages);
+        SubscribeLocalEvent<MechComponent, MechSoundboardPlayMessage>(ReceiveEquipmentUiMesssages);
         #endregion
     }
 
@@ -262,7 +263,7 @@ public sealed class MechSystem : SharedMechSystem
         UpdateUserInterface(uid, component);
     }
 
-    private void RecieveEquipmentUiMesssages<T>(EntityUid uid, MechComponent component, T args) where T : MechEquipmentUiMessage
+    private void ReceiveEquipmentUiMesssages<T>(EntityUid uid, MechComponent component, T args) where T : MechEquipmentUiMessage
     {
         var ev = new MechEquipmentUiMessageRelayEvent(args);
         var allEquipment = new List<EntityUid>(component.EquipmentContainer.ContainedEntities);
diff --git a/Content.Shared/Mech/Equipment/Components/MechSoundboardComponent.cs b/Content.Shared/Mech/Equipment/Components/MechSoundboardComponent.cs
new file mode 100644 (file)
index 0000000..cce5c99
--- /dev/null
@@ -0,0 +1,16 @@
+using Content.Shared.Mech.Equipment.Systems;
+using Robust.Shared.Audio;
+using Robust.Shared.GameStates;
+
+namespace Content.Shared.Mech.Equipment.Components;
+
+[RegisterComponent, NetworkedComponent, AutoGenerateComponentState]
+[Access(typeof(MechSoundboardSystem))]
+public sealed partial class MechSoundboardComponent : Component
+{
+    /// <summary>
+    /// List of sounds that can be played
+    /// </summary>
+    [DataField("sounds"), ViewVariables(VVAccess.ReadWrite), AutoNetworkedField]
+    public List<SoundCollectionSpecifier> Sounds = new();
+}
diff --git a/Content.Shared/Mech/Equipment/Systems/MechSoundboardSystem.cs b/Content.Shared/Mech/Equipment/Systems/MechSoundboardSystem.cs
new file mode 100644 (file)
index 0000000..5431c65
--- /dev/null
@@ -0,0 +1,57 @@
+using Content.Shared.Mech;
+using Content.Shared.Mech.Equipment.Components;
+using Content.Shared.Mech.Equipment.Systems;
+using Content.Shared.Timing;
+using Robust.Shared.Audio;
+using System.Linq;
+
+namespace Content.Shared.Mech.Equipment.Systems;
+
+/// <summary>
+/// Handles everything for mech soundboard.
+/// </summary>
+public sealed class MechSoundboardSystem : EntitySystem
+{
+    [Dependency] private readonly SharedAudioSystem _audio = default!;
+    [Dependency] private readonly UseDelaySystem _useDelay = default!;
+
+    public override void Initialize()
+    {
+        base.Initialize();
+
+        SubscribeLocalEvent<MechSoundboardComponent, MechEquipmentUiStateReadyEvent>(OnUiStateReady);
+        SubscribeLocalEvent<MechSoundboardComponent, MechEquipmentUiMessageRelayEvent>(OnSoundboardMessage);
+    }
+
+    private void OnUiStateReady(EntityUid uid, MechSoundboardComponent comp, MechEquipmentUiStateReadyEvent args)
+    {
+        // you have to specify a collection so it must exist probably
+        var sounds = comp.Sounds.Select(sound => sound.Collection!);
+        var state = new MechSoundboardUiState
+        {
+            Sounds = sounds.ToList()
+        };
+        args.States.Add(uid, state);
+    }
+
+    private void OnSoundboardMessage(EntityUid uid, MechSoundboardComponent comp, MechEquipmentUiMessageRelayEvent args)
+    {
+        if (args.Message is not MechSoundboardPlayMessage msg)
+            return;
+
+        if (!TryComp<MechEquipmentComponent>(uid, out var equipment) ||
+            equipment.EquipmentOwner == null)
+            return;
+
+        if (msg.Sound >= comp.Sounds.Count)
+            return;
+
+        if (_useDelay.ActiveDelay(uid))
+            return;
+
+        // honk!!!!!
+        var mech = equipment.EquipmentOwner.Value;
+        _useDelay.BeginDelay(uid);
+        _audio.PlayPvs(comp.Sounds[msg.Sound], uid);
+    }
+}
index 381760166b36e6abf4bf55ee3237c3f76290509a..f555fe69bd80cddf6e52b2988f2cb376a4a1f854 100644 (file)
@@ -67,6 +67,21 @@ public sealed class MechGrabberEjectMessage : MechEquipmentUiMessage
     }
 }
 
+/// <summary>
+/// Event raised for the soundboard equipment to play a sound from its component
+/// </summary>
+[Serializable, NetSerializable]
+public sealed class MechSoundboardPlayMessage : MechEquipmentUiMessage
+{
+    public int Sound;
+
+    public MechSoundboardPlayMessage(EntityUid equipment, int sound)
+    {
+        Equipment = equipment;
+        Sound = sound;
+    }
+}
+
 /// <summary>
 /// BUI state for mechs that also contains all equipment ui states.
 /// </summary>
@@ -100,3 +115,12 @@ public sealed class MechGrabberUiState : BoundUserInterfaceState
     public List<EntityUid> Contents = new();
     public int MaxContents;
 }
+
+/// <summary>
+/// List of sound collection ids to be localized and displayed.
+/// </summary>
+[Serializable, NetSerializable]
+public sealed class MechSoundboardUiState : BoundUserInterfaceState
+{
+    public List<string> Sounds = new();
+}
diff --git a/Resources/Locale/en-US/mech/soundboard.ftl b/Resources/Locale/en-US/mech/soundboard.ftl
new file mode 100644 (file)
index 0000000..d9c0dc5
--- /dev/null
@@ -0,0 +1,6 @@
+mech-soundboard-BikeHorn = Honk!
+mech-soundboard-CluwneHorn = !knoH
+mech-soundboard-TrollAnimals = animal noises
+mech-soundboard-TrollEsword = e-sword
+mech-soundboard-TrollBeeping = Beep beep beep
+mech-soundboard-TrollMeeting = red vented!!!!!
index f98366b17e3cfdc90d0735571643d670ed8ac0bc..4f1f1af5c697e0c0b6dd0c8e638eb48e3e8d1c0c 100644 (file)
@@ -88,6 +88,9 @@ technologies-archaeology-description = Advanced equipment for uncovering the sec
 technologies-ripley-technology = Exosuit: Ripley
 technologies-ripley-technology-description = The latest and greatest in mechanized cargo construction.
 
+technologies-clown-technology = Exosuit: H.O.N.K.
+technologies-clown-technology-description = Honk?!
+
 technologies-adv-parts-technology-description = Like the previous ones, but better!
 technologies-adv-parts-technology = Advanced parts technology
 
index 921b61bc5992aa42ae2b7f4e70a20d7b1c381abc..3036de0219fc1e88ae9f35620c1ff6b8afdcd604 100644 (file)
@@ -21,3 +21,6 @@ tool-quality-slicing-tool-name = Knife
 
 tool-quality-sawing-name = Sawing
 tool-quality-sawing-tool-name = Saw
+
+tool-quality-honking-name = Honking
+tool-quality-honking-tool-name = Bike Horn
index afd7521fc02a338e9d2c5fd4d1335019e2025055..dba06d996fe748aa9a11a273bd8819c928d8279a 100644 (file)
   - RipleyLLeg
   - RipleyRLeg
 
+- type: technology
+  name: technologies-clown-technology
+  id: ClownTechnology
+  description: technologies-clown-technology-description
+  icon:
+    sprite: Objects/Specific/Mech/mecha.rsi
+    state: honker
+  requiredPoints: 15000
+  requiredTechnologies:
+  - RipleyTechnology
+  unlockedRecipes:
+  - HonkerCentralElectronics
+  - HonkerPeripheralsElectronics
+  - HonkerTargetingElectronics
+  - MechEquipmentHorn
+  - HonkerHarness
+  - HonkerLArm
+  - HonkerRArm
+  - HonkerLLeg
+  - HonkerRLeg
+
 # Industrial Engineering Technology Tree
 
 - type: technology
index 80d70c95f8d772029e51b6202fe9d8a23a26a113..04bc86724911d1036c439410dab06368de4db7e9 100644 (file)
     sprite: Clothing/Mask/clown.rsi
   - type: BreathMask
   - type: IdentityBlocker
+  # for H.O.N.K. construction
+  - type: Tag
+    tags:
+    - ClownMask
 
 - type: entity
   parent: ClothingMaskBase
index e690d890d60eafecb2e3ed2b1a7cc9cb33af0a4c..212920704716f65e9027cc3e5cbe0f885be11de0 100644 (file)
   - type: FootstepModifier
     footstepSoundCollection:
       collection: FootstepClown
+  # for H.O.N.K. construction
+  - type: Tag
+    tags:
+    - ClownShoes
 
 - type: entity
   parent: ClothingShoesBaseButcherable
index 0ea4629adbfe845f0903c993889a6b6ebc9f4395..c718093eb5e496a6187422423ff5b92b3c68491b 100644 (file)
@@ -1,3 +1,5 @@
+# Ripley
+
 - type: entity
   id: RipleyCentralElectronics
   parent: BaseElectronics
       state: id_mod
     - type: Tag
       tags:
-      - RipleyPeripheralsControlModule
\ No newline at end of file
+      - RipleyPeripheralsControlModule
+
+# H.O.N.K.
+
+- type: entity
+  id: HonkerCentralElectronics
+  parent: BaseElectronics
+  name: H.O.N.K. central control module
+  description: The electrical control center for the H.O.N.K. mech.
+  components:
+    - type: Sprite
+      sprite: Objects/Misc/module.rsi
+      state: mainboard
+    - type: Tag
+      tags:
+      - HonkerCentralControlModule
+
+- type: entity
+  id: HonkerPeripheralsElectronics
+  parent: BaseElectronics
+  name: H.O.N.K. peripherals control module
+  description: The electrical peripherals control for the H.O.N.K. mech.
+  components:
+    - type: Sprite
+      sprite: Objects/Misc/module.rsi
+      state: id_mod
+    - type: Tag
+      tags:
+      - HonkerPeripheralsControlModule
+
+- type: entity
+  id: HonkerTargetingElectronics
+  parent: BaseElectronics
+  name: H.O.N.K. weapon control and targeting module
+  description: The electrical targeting control for the H.O.N.K. mech.
+  components:
+    - type: Sprite
+      sprite: Objects/Misc/module.rsi
+      state: id_mod
+    - type: Tag
+      tags:
+      - HonkerTargetingControlModule
index ae12b37d0337d0f4d41a5b81d1e953cb3e0d101d..1a95cdd996298113ef366c9bb73d783fc84cf338 100644 (file)
     damage:
       types:
         Blunt: 0
+  - type: Tool
+    qualities:
+    - Honking
+    useSound:
+      collection: BikeHorn
 
 - type: entity
   parent: BaseItem
index 16f273ff446bb36e2d0a256b40d5278dca41dc91..aad2c52dce163a9aab8693b27b427a62b26738e7 100644 (file)
     graph: Ripley
     node: start
     defaultTarget: ripley
+
+# H.O.N.K.
+
+- type: entity
+  id: BaseHonkerPart
+  parent: BaseMechPart
+  abstract: true
+  components:
+  - type: Sprite
+    drawdepth: Items
+    noRot: false
+    netsync: false
+    sprite: Objects/Specific/Mech/honker_construction.rsi
+
+- type: entity
+  id: BaseHonkerPartItem
+  parent: BaseHonkerPart
+  abstract: true
+  components:
+  - type: Item
+    size: 50
+
+- type: entity
+  parent: BaseHonkerPart
+  id: HonkerHarness
+  name: H.O.N.K. harness
+  description: The core of the H.O.N.K. mech
+  components:
+  - type: Appearance
+  - type: ItemMapper
+    mapLayers:
+      honker_l_arm+o:
+        whitelist:
+          tags:
+          - HonkerLArm
+      honker_r_arm+o:
+        whitelist:
+          tags:
+          - HonkerRArm
+      honker_l_leg+o:
+        whitelist:
+          tags:
+          - HonkerLLeg
+      honker_r_leg+o:
+        whitelist:
+          tags:
+          - HonkerRLeg
+    sprite: Objects/Specific/Mech/honker_construction.rsi
+  - type: ContainerContainer
+    containers:
+      mech-assembly-container: !type:Container
+  - type: MechAssembly
+    finishedPrototype: HonkerChassis
+    requiredParts:
+      HonkerLArm: false
+      HonkerRArm: false
+      HonkerLLeg: false
+      HonkerRLeg: false
+  - type: Sprite
+    state: honker_harness+o
+    noRot: true
+
+- type: entity
+  parent: BaseHonkerPartItem
+  id: HonkerLArm
+  name: H.O.N.K. left arm
+  description: A H.O.N.K. left arm, with unique sockets that accept odd weaponry designed by clown scientists.
+  components:
+  - type: Sprite
+    state: honker_l_arm
+  - type: Tag
+    tags:
+    - HonkerLArm
+
+- type: entity
+  parent: BaseHonkerPartItem
+  id: HonkerLLeg
+  name: H.O.N.K. left leg
+  description: A H.O.N.K. left leg. The foot appears just large enough to fully accommodate a clown shoe.
+  components:
+  - type: Sprite
+    state: honker_l_leg
+  - type: Tag
+    tags:
+    - HonkerLLeg
+
+- type: entity
+  parent: BaseHonkerPartItem
+  id: HonkerRLeg
+  name: H.O.N.K. right leg
+  description: A H.O.N.K. right leg. The foot appears just large enough to fully accommodate a clown shoe.
+  components:
+  - type: Sprite
+    state: honker_r_leg
+  - type: Tag
+    tags:
+    - HonkerRLeg
+
+- type: entity
+  parent: BaseHonkerPartItem
+  id: HonkerRArm
+  name: H.O.N.K. right arm
+  description: A H.O.N.K. right arm, with unique sockets that accept odd weaponry designed by clown scientists.
+  components:
+  - type: Sprite
+    state: honker_r_arm
+  - type: Tag
+    tags:
+    - HonkerRArm
+
+- type: entity
+  id: HonkerChassis
+  parent: BaseHonkerPart
+  name: H.O.N.K. chassis
+  description: An in-progress construction of a H.O.N.K. mech. Contains chuckle unit, bananium core and honk support systems.
+  components:
+  - type: Appearance
+  - type: ContainerContainer
+    containers:
+      battery-container: !type:Container
+  - type: MechAssemblyVisuals
+    statePrefix: honker
+  - type: Sprite
+    noRot: true
+    state: honker0
+  - type: Construction
+    graph: Honker
+    node: start
+    defaultTarget: honker
index fbbc13ddfbd9a4f2e008b7a1ad848c28460f271f..2a24173c3a948763798d21eb1942bab89d2cd4eb 100644 (file)
     ui: !type:MechGrabberUi
   - type: ContainerContainer
     containers:
-      item-container: !type:Container
\ No newline at end of file
+      item-container: !type:Container
+
+- type: entity
+  id: MechEquipmentHorn
+  parent: BaseMechEquipment
+  name: mech horn
+  description: An enhanced bike horn that plays a hilarious array of sounds for the enjoyment of the crew. HONK!
+  components:
+  - type: Sprite
+    # TODO: use own sprite
+    state: mecha_honker
+  - type: MechSoundboard
+    sounds:
+    - collection: BikeHorn
+    - collection: CluwneHorn
+    - collection: TrollAnimals
+    - collection: TrollBeeping
+    - collection: TrollEsword
+    - collection: TrollMeeting
+  - type: UIFragment
+    ui: !type:MechSoundboardUi
+  - type: UseDelay
+    delay: 0.5
+  # TODO: tag as being for H.O.N.K. only!!!
index d752a28f8643e969e7033b4a65a10d4ff7442ce3..446ad650dc82ec693310ab7f286e38d58da3d006 100644 (file)
     containers:
       mech-battery-slot:
       - PowerCellHigh
+
+# TODO: have a whitelist for honker equipment
+- type: entity
+  id: MechHonker
+  parent: BaseMech
+  name: H.O.N.K.
+  description: "Produced by \"Tyranny of Honk, INC\", this exosuit is designed as heavy clown-support. Used to spread the fun and joy of life. HONK!"
+  components:
+  - type: Sprite
+    netsync: false
+    drawdepth: Mobs
+    noRot: true
+    sprite: Objects/Specific/Mech/mecha.rsi
+    layers:
+    - map: [ "enum.MechVisualLayers.Base" ]
+      state: honker
+  - type: FootstepModifier
+    footstepSoundCollection:
+      collection: FootstepClown
+  - type: Mech
+    baseState: honker
+    openState: honker-open
+    brokenState: honker-broken
+    mechToPilotDamageMultiplier: 0.5
+
+- type: entity
+  id: MechHonkerBattery
+  parent: MechHonker
+  suffix: Battery
+  components:
+  - type: ContainerFill
+    containers:
+      mech-battery-slot:
+      - PowerCellHigh
index c183b8f28db39dd6765d1475920ae0bd1171575c..8b0ba1ba526f05d6ec4cad2e17c3788b98b6a133 100644 (file)
       - OreProcessorMachineCircuitboard
       - RipleyCentralElectronics
       - RipleyPeripheralsElectronics
+      - HonkerCentralElectronics
+      - HonkerPeripheralsElectronics
+      - HonkerTargetingElectronics
       - GeneratorPlasmaMachineCircuitboard
       - GeneratorUraniumMachineCircuitboard
       - WallmountGeneratorElectronics
     - RipleyLLeg
     - RipleyRLeg
     - MechEquipmentGrabber
+    - HonkerHarness
+    - HonkerLArm
+    - HonkerRArm
+    - HonkerLLeg
+    - HonkerRLeg
+    - MechEquipmentHorn
   - type: MaterialStorage
     whitelist:
       tags:
diff --git a/Resources/Prototypes/Recipes/Construction/Graphs/mechs/honker_construction.yml b/Resources/Prototypes/Recipes/Construction/Graphs/mechs/honker_construction.yml
new file mode 100644 (file)
index 0000000..830b6bc
--- /dev/null
@@ -0,0 +1,116 @@
+- type: constructionGraph
+  id: Honker
+  start: start
+  graph:
+  - node: start
+    edges:
+    - to: honker
+      steps:
+      - tool: Honking
+        doAfter: 1
+        completed:
+        - !type:VisualizerDataInt
+          key: "enum.MechAssemblyVisuals.State"
+          data: 1
+
+      - tag: HonkerCentralControlModule
+        name: H.O.N.K. central control module
+        icon:
+          sprite: "Objects/Misc/module.rsi"
+          state: "mainboard"
+        completed:
+        - !type:VisualizerDataInt
+          key: "enum.MechAssemblyVisuals.State"
+          data: 2
+
+      - tool: Honking
+        doAfter: 1
+        completed:
+        - !type:VisualizerDataInt
+          key: "enum.MechAssemblyVisuals.State"
+          data: 3
+
+      - tag: HonkerPeripheralsControlModule
+        name: H.O.N.K. peripherals control module
+        icon:
+          sprite: "Objects/Misc/module.rsi"
+          state: id_mod
+        completed:
+        - !type:VisualizerDataInt
+          key: "enum.MechAssemblyVisuals.State"
+          data: 4
+
+      - tool: Honking
+        doAfter: 1
+        completed:
+        - !type:VisualizerDataInt
+          key: "enum.MechAssemblyVisuals.State"
+          data: 5
+
+      - tag: HonkerTargetingControlModule
+        name: H.O.N.K. weapon control and targeting module
+        icon:
+          sprite: "Objects/Misc/module.rsi"
+          state: id_mod
+        completed:
+        - !type:VisualizerDataInt
+          key: "enum.MechAssemblyVisuals.State"
+          data: 6
+
+      - tool: Honking
+        doAfter: 1
+        completed:
+        - !type:VisualizerDataInt
+          key: "enum.MechAssemblyVisuals.State"
+          data: 7
+
+#i omitted the steps involving inserting machine parts because
+#currently mechs don't support upgrading. add them back in once that's squared away.
+
+      - component: PowerCell
+        name: power cell
+        store: battery-container
+        icon:
+          sprite: Objects/Power/power_cells.rsi
+          state: small
+        completed:
+        - !type:VisualizerDataInt
+          key: "enum.MechAssemblyVisuals.State"
+          data: 8
+
+      - tool: Honking
+        doAfter: 1
+        completed:
+        - !type:VisualizerDataInt
+          key: "enum.MechAssemblyVisuals.State"
+          data: 9
+
+      - tag: ClownMask
+        icon:
+          sprite: "Clothing/Mask/clown.rsi"
+          state: "icon"
+        name: "a clown's mask"
+        doAfter: 1
+        completed:
+        - !type:VisualizerDataInt
+          key: "enum.MechAssemblyVisuals.State"
+          data: 10
+
+      - tag: ClownShoes
+        icon:
+          sprite: "Clothing/Shoes/Specific/clown.rsi"
+          state: "icon"
+        name: "a clown's shoes"
+        doAfter: 1
+        completed:
+        - !type:VisualizerDataInt
+          key: "enum.MechAssemblyVisuals.State"
+          data: 11
+
+      - tool: Honking
+        doAfter: 1
+
+  - node: honker
+    actions:
+    - !type:BuildMech
+      mechPrototype: MechHonker
index 5cb7cf7c5dddff7d07bfd81dec93dd48a6d74d6f..033804b6fa000be2a9a8dee56da905915a9b4c53 100644 (file)
     Glass: 900
     Gold: 100
 
+- type: latheRecipe
+  id: HonkerCentralElectronics
+  result: HonkerCentralElectronics
+  completetime: 4
+  materials:
+    Steel: 100
+    Glass: 900
+    Bananium: 100
+
+- type: latheRecipe
+  id: HonkerPeripheralsElectronics
+  result: HonkerPeripheralsElectronics
+  completetime: 4
+  materials:
+    Steel: 100
+    Glass: 900
+    Bananium: 100
+
+- type: latheRecipe
+  id: HonkerTargetingElectronics
+  result: HonkerTargetingElectronics
+  completetime: 4
+  materials:
+    Steel: 100
+    Glass: 900
+    Bananium: 100
+
 # Power
 - type: latheRecipe
   id: APCElectronics
index f9e47cdcade068595de418d4562dcfe8c4cc8fb4..c6accfa92529bc04400d695d075bf7644c56d21b 100644 (file)
@@ -1,3 +1,4 @@
+# Ripley
 - type: latheRecipe
   id: RipleyHarness
   result: RipleyHarness
   materials:
     Steel: 500
     Plastic: 200
+
+# H.O.N.K.
+- type: latheRecipe
+  id: HonkerHarness
+  result: HonkerHarness
+  completetime: 10
+  materials:
+    Steel: 3000
+    Glass: 1200
+    Bananium: 500
+
+- type: latheRecipe
+  id: HonkerLArm
+  result: HonkerLArm
+  completetime: 10
+  materials:
+    Steel: 3000
+    Glass: 1200
+    Bananium: 500
+
+- type: latheRecipe
+  id: HonkerLLeg
+  result: HonkerLLeg
+  completetime: 10
+  materials:
+    Steel: 3000
+    Glass: 1200
+    Bananium: 500
+
+- type: latheRecipe
+  id: HonkerRLeg
+  result: HonkerRLeg
+  completetime: 10
+  materials:
+    Steel: 3000
+    Glass: 1200
+    Bananium: 500
+
+- type: latheRecipe
+  id: HonkerRArm
+  result: HonkerRArm
+  completetime: 10
+  materials:
+    Steel: 3000
+    Glass: 1200
+    Bananium: 500
+
+- type: latheRecipe
+  id: MechEquipmentHorn
+  result: MechEquipmentHorn
+  completetime: 10
+  materials:
+    Steel: 500
+    Bananium: 200
diff --git a/Resources/Prototypes/SoundCollections/troll.yml b/Resources/Prototypes/SoundCollections/troll.yml
new file mode 100644 (file)
index 0000000..9983f11
--- /dev/null
@@ -0,0 +1,43 @@
+# various troll sounds for H.O.N.K.
+- type: soundCollection
+  id: TrollAnimals
+  files:
+  - /Audio/Animals/bear.ogg
+  - /Audio/Animals/cat_hiss.ogg
+  - /Audio/Animals/cat_meow.ogg
+  - /Audio/Animals/chicken_cluck_happy.ogg
+  - /Audio/Animals/cow_moo.ogg
+  - /Audio/Animals/duck_quack_happy.ogg
+  - /Audio/Animals/ferret_happy.ogg
+  - /Audio/Animals/fox_squeak.ogg
+  - /Audio/Animals/frog_ribbit.ogg
+  - /Audio/Animals/goat_bah.ogg
+  - /Audio/Animals/goose_honk.ogg
+  - /Audio/Animals/lizard_happy.ogg
+  - /Audio/Animals/monkey_scream.ogg
+  - /Audio/Animals/mouse_squeak.ogg
+  - /Audio/Animals/parrot_raught.ogg
+  - /Audio/Animals/penguin_squawk.ogg
+  - /Audio/Animals/pig_oink.ogg
+  - /Audio/Animals/raccoon_chatter.ogg
+  - /Audio/Animals/sloth_squeak.ogg
+  - /Audio/Animals/small_dog_bark_happy.ogg
+  - /Audio/Animals/snake_hiss.ogg
+  - /Audio/Animals/space_dragon_roar.ogg
+
+- type: soundCollection
+  id: TrollBeeping
+  files:
+  - /Audio/Effects/countdown.ogg
+
+- type: soundCollection
+  id: TrollEsword
+  files:
+  - /Audio/Weapons/ebladeoff.ogg
+  - /Audio/Weapons/ebladeon.ogg
+  - /Audio/Weapons/eblade1.ogg
+
+- type: soundCollection
+  id: TrollMeeting
+  files:
+  - /Audio/Misc/emergency_meeting.ogg
index 5c2fac456444bc689d0809ae6efd795b523b5ea9..9c65f89831dcc3c945c028c5adc07c58592c435c 100644 (file)
   id: CigPack
 
 - type: Tag
-  id: HardsuitEVA
-
-- type: Tag
-  id: HelmetEVA
+  id: ClownMask
 
 - type: Tag
   id: ClownRecorder
 - type: Tag
   id: ClownRubberStamp
 
+- type: Tag
+  id: ClownShoes
+
 - type: Tag
   id: CluwneHorn
 
 - type: Tag
   id: Hardsuit # Prevent melee injectors that can't penetrate hardsuits from injecting the wearer (nettles)
 
+- type: Tag
+  id: HardsuitEVA
+
 - type: Tag
   id: Head
 
+- type: Tag
+  id: HelmetEVA
+
 - type: Tag
   id: HideContextMenu
 
 - type: Tag
   id: HolosignProjector
 
+- type: Tag
+  id: HonkerCentralControlModule
+
+- type: Tag
+  id: HonkerPeripheralsControlModule
+
+- type: Tag
+  id: HonkerTargetingControlModule
+
+- type: Tag
+  id: HonkerLArm
+
+- type: Tag
+  id: HonkerLLeg
+
+- type: Tag
+  id: HonkerRLeg
+
+- type: Tag
+  id: HonkerRArm
+
 - type: Tag #Drop this innate tool instead of deleting it.
   id: InnateDontDelete
 
index 94fee0246246a4d8d931f93374becfcd27c95081..08e00f17ce755b92f4a10878daa957d30cf8a0db 100644 (file)
   toolName: tool-quality-sawing-tool-name
   spawn: Saw
   icon: { sprite: Objects/Specific/Medical/Surgery/saw.rsi, state: saw }
+
+- type: tool
+  id: Honking
+  name: tool-quality-honking-name
+  toolName: tool-quality-honking-tool-name
+  spawn: BikeHorn
+  icon: { sprite: Objects/Fun/bikehorn.rsi, state: icon }
diff --git a/Resources/Textures/Objects/Specific/Mech/honker_construction.rsi/honker0.png b/Resources/Textures/Objects/Specific/Mech/honker_construction.rsi/honker0.png
new file mode 100644 (file)
index 0000000..01601a2
Binary files /dev/null and b/Resources/Textures/Objects/Specific/Mech/honker_construction.rsi/honker0.png differ
diff --git a/Resources/Textures/Objects/Specific/Mech/honker_construction.rsi/honker1.png b/Resources/Textures/Objects/Specific/Mech/honker_construction.rsi/honker1.png
new file mode 100644 (file)
index 0000000..2a7ab1d
Binary files /dev/null and b/Resources/Textures/Objects/Specific/Mech/honker_construction.rsi/honker1.png differ
diff --git a/Resources/Textures/Objects/Specific/Mech/honker_construction.rsi/honker10.png b/Resources/Textures/Objects/Specific/Mech/honker_construction.rsi/honker10.png
new file mode 100644 (file)
index 0000000..6260449
Binary files /dev/null and b/Resources/Textures/Objects/Specific/Mech/honker_construction.rsi/honker10.png differ
diff --git a/Resources/Textures/Objects/Specific/Mech/honker_construction.rsi/honker11.png b/Resources/Textures/Objects/Specific/Mech/honker_construction.rsi/honker11.png
new file mode 100644 (file)
index 0000000..76f6cfd
Binary files /dev/null and b/Resources/Textures/Objects/Specific/Mech/honker_construction.rsi/honker11.png differ
diff --git a/Resources/Textures/Objects/Specific/Mech/honker_construction.rsi/honker2.png b/Resources/Textures/Objects/Specific/Mech/honker_construction.rsi/honker2.png
new file mode 100644 (file)
index 0000000..ea4e806
Binary files /dev/null and b/Resources/Textures/Objects/Specific/Mech/honker_construction.rsi/honker2.png differ
diff --git a/Resources/Textures/Objects/Specific/Mech/honker_construction.rsi/honker3.png b/Resources/Textures/Objects/Specific/Mech/honker_construction.rsi/honker3.png
new file mode 100644 (file)
index 0000000..8507c83
Binary files /dev/null and b/Resources/Textures/Objects/Specific/Mech/honker_construction.rsi/honker3.png differ
diff --git a/Resources/Textures/Objects/Specific/Mech/honker_construction.rsi/honker4.png b/Resources/Textures/Objects/Specific/Mech/honker_construction.rsi/honker4.png
new file mode 100644 (file)
index 0000000..089e330
Binary files /dev/null and b/Resources/Textures/Objects/Specific/Mech/honker_construction.rsi/honker4.png differ
diff --git a/Resources/Textures/Objects/Specific/Mech/honker_construction.rsi/honker5.png b/Resources/Textures/Objects/Specific/Mech/honker_construction.rsi/honker5.png
new file mode 100644 (file)
index 0000000..3dd89c3
Binary files /dev/null and b/Resources/Textures/Objects/Specific/Mech/honker_construction.rsi/honker5.png differ
diff --git a/Resources/Textures/Objects/Specific/Mech/honker_construction.rsi/honker6.png b/Resources/Textures/Objects/Specific/Mech/honker_construction.rsi/honker6.png
new file mode 100644 (file)
index 0000000..857db6f
Binary files /dev/null and b/Resources/Textures/Objects/Specific/Mech/honker_construction.rsi/honker6.png differ
diff --git a/Resources/Textures/Objects/Specific/Mech/honker_construction.rsi/honker7.png b/Resources/Textures/Objects/Specific/Mech/honker_construction.rsi/honker7.png
new file mode 100644 (file)
index 0000000..ff13a67
Binary files /dev/null and b/Resources/Textures/Objects/Specific/Mech/honker_construction.rsi/honker7.png differ
diff --git a/Resources/Textures/Objects/Specific/Mech/honker_construction.rsi/honker8.png b/Resources/Textures/Objects/Specific/Mech/honker_construction.rsi/honker8.png
new file mode 100644 (file)
index 0000000..3dbd188
Binary files /dev/null and b/Resources/Textures/Objects/Specific/Mech/honker_construction.rsi/honker8.png differ
diff --git a/Resources/Textures/Objects/Specific/Mech/honker_construction.rsi/honker9.png b/Resources/Textures/Objects/Specific/Mech/honker_construction.rsi/honker9.png
new file mode 100644 (file)
index 0000000..0dfe4e1
Binary files /dev/null and b/Resources/Textures/Objects/Specific/Mech/honker_construction.rsi/honker9.png differ
diff --git a/Resources/Textures/Objects/Specific/Mech/honker_construction.rsi/honker_chassis.png b/Resources/Textures/Objects/Specific/Mech/honker_construction.rsi/honker_chassis.png
new file mode 100644 (file)
index 0000000..531ae1d
Binary files /dev/null and b/Resources/Textures/Objects/Specific/Mech/honker_construction.rsi/honker_chassis.png differ
diff --git a/Resources/Textures/Objects/Specific/Mech/honker_construction.rsi/honker_harness+o.png b/Resources/Textures/Objects/Specific/Mech/honker_construction.rsi/honker_harness+o.png
new file mode 100644 (file)
index 0000000..9c2eb36
Binary files /dev/null and b/Resources/Textures/Objects/Specific/Mech/honker_construction.rsi/honker_harness+o.png differ
diff --git a/Resources/Textures/Objects/Specific/Mech/honker_construction.rsi/honker_harness.png b/Resources/Textures/Objects/Specific/Mech/honker_construction.rsi/honker_harness.png
new file mode 100644 (file)
index 0000000..de4a5f8
Binary files /dev/null and b/Resources/Textures/Objects/Specific/Mech/honker_construction.rsi/honker_harness.png differ
diff --git a/Resources/Textures/Objects/Specific/Mech/honker_construction.rsi/honker_l_arm+o.png b/Resources/Textures/Objects/Specific/Mech/honker_construction.rsi/honker_l_arm+o.png
new file mode 100644 (file)
index 0000000..a511f8f
Binary files /dev/null and b/Resources/Textures/Objects/Specific/Mech/honker_construction.rsi/honker_l_arm+o.png differ
diff --git a/Resources/Textures/Objects/Specific/Mech/honker_construction.rsi/honker_l_arm.png b/Resources/Textures/Objects/Specific/Mech/honker_construction.rsi/honker_l_arm.png
new file mode 100644 (file)
index 0000000..41d2c83
Binary files /dev/null and b/Resources/Textures/Objects/Specific/Mech/honker_construction.rsi/honker_l_arm.png differ
diff --git a/Resources/Textures/Objects/Specific/Mech/honker_construction.rsi/honker_l_leg+o.png b/Resources/Textures/Objects/Specific/Mech/honker_construction.rsi/honker_l_leg+o.png
new file mode 100644 (file)
index 0000000..c27a1ff
Binary files /dev/null and b/Resources/Textures/Objects/Specific/Mech/honker_construction.rsi/honker_l_leg+o.png differ
diff --git a/Resources/Textures/Objects/Specific/Mech/honker_construction.rsi/honker_l_leg.png b/Resources/Textures/Objects/Specific/Mech/honker_construction.rsi/honker_l_leg.png
new file mode 100644 (file)
index 0000000..b030880
Binary files /dev/null and b/Resources/Textures/Objects/Specific/Mech/honker_construction.rsi/honker_l_leg.png differ
diff --git a/Resources/Textures/Objects/Specific/Mech/honker_construction.rsi/honker_r_arm+o.png b/Resources/Textures/Objects/Specific/Mech/honker_construction.rsi/honker_r_arm+o.png
new file mode 100644 (file)
index 0000000..0733c1c
Binary files /dev/null and b/Resources/Textures/Objects/Specific/Mech/honker_construction.rsi/honker_r_arm+o.png differ
diff --git a/Resources/Textures/Objects/Specific/Mech/honker_construction.rsi/honker_r_arm.png b/Resources/Textures/Objects/Specific/Mech/honker_construction.rsi/honker_r_arm.png
new file mode 100644 (file)
index 0000000..b3897f0
Binary files /dev/null and b/Resources/Textures/Objects/Specific/Mech/honker_construction.rsi/honker_r_arm.png differ
diff --git a/Resources/Textures/Objects/Specific/Mech/honker_construction.rsi/honker_r_leg+o.png b/Resources/Textures/Objects/Specific/Mech/honker_construction.rsi/honker_r_leg+o.png
new file mode 100644 (file)
index 0000000..0c75e70
Binary files /dev/null and b/Resources/Textures/Objects/Specific/Mech/honker_construction.rsi/honker_r_leg+o.png differ
diff --git a/Resources/Textures/Objects/Specific/Mech/honker_construction.rsi/honker_r_leg.png b/Resources/Textures/Objects/Specific/Mech/honker_construction.rsi/honker_r_leg.png
new file mode 100644 (file)
index 0000000..0b0c3ff
Binary files /dev/null and b/Resources/Textures/Objects/Specific/Mech/honker_construction.rsi/honker_r_leg.png differ
diff --git a/Resources/Textures/Objects/Specific/Mech/honker_construction.rsi/meta.json b/Resources/Textures/Objects/Specific/Mech/honker_construction.rsi/meta.json
new file mode 100644 (file)
index 0000000..1011b46
--- /dev/null
@@ -0,0 +1,80 @@
+{
+  "copyright" : "Taken from https://github.com/tgstation/tgstation at at https://github.com/tgstation/tgstation/commit/40d89d11ea4a5cb81d61dc1018b46f4e7d32c62a",
+  "license" : "CC-BY-SA-3.0",
+  "version": 1,
+  "size": {
+    "x": 32,
+    "y": 32
+  },
+  "states": [
+    {
+      "name": "honker_chassis"
+    },
+    {
+      "name": "honker_harness"
+    },
+    {
+      "name": "honker_harness+o"
+    },
+    {
+      "name": "honker_r_arm"
+    },
+    {
+      "name": "honker_r_arm+o"
+    },
+    {
+      "name": "honker_l_arm"
+    },
+    {
+      "name": "honker_l_arm+o"
+    },
+    {
+      "name": "honker_r_leg"
+    },
+    {
+      "name": "honker_r_leg+o"
+    },
+    {
+      "name": "honker_l_leg"
+    },
+    {
+      "name": "honker_l_leg+o"
+    },
+    {
+      "name": "honker0"
+    },
+    {
+      "name": "honker1"
+    },
+    {
+      "name": "honker2"
+    },
+    {
+      "name": "honker3"
+    },
+    {
+      "name": "honker4"
+    },
+    {
+      "name": "honker5"
+    },
+    {
+      "name": "honker6"
+    },
+    {
+      "name": "honker7"
+    },
+    {
+      "name": "honker8"
+    },
+    {
+      "name": "honker9"
+    },
+    {
+      "name": "honker10"
+    },
+    {
+      "name": "honker11"
+    }
+  ]
+}