diff --git a/Content.Client/Mech/Ui/Equipment/MechSoundboardUi.cs b/Content.Client/Mech/Ui/Equipment/MechSoundboardUi.cs new file mode 100644 index 0000000000..67825318a4 --- /dev/null +++ b/Content.Client/Mech/Ui/Equipment/MechSoundboardUi.cs @@ -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 index 0000000000..341eb0ab74 --- /dev/null +++ b/Content.Client/Mech/Ui/Equipment/MechSoundboardUiFragment.xaml @@ -0,0 +1,13 @@ + + + + + diff --git a/Content.Client/Mech/Ui/Equipment/MechSoundboardUiFragment.xaml.cs b/Content.Client/Mech/Ui/Equipment/MechSoundboardUiFragment.xaml.cs new file mode 100644 index 0000000000..ce00e65299 --- /dev/null +++ b/Content.Client/Mech/Ui/Equipment/MechSoundboardUiFragment.xaml.cs @@ -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? 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)); + }; + } + } +} diff --git a/Content.Server/Mech/Systems/MechSystem.cs b/Content.Server/Mech/Systems/MechSystem.cs index 60eee7f881..9eec5fa34c 100644 --- a/Content.Server/Mech/Systems/MechSystem.cs +++ b/Content.Server/Mech/Systems/MechSystem.cs @@ -62,7 +62,8 @@ public sealed class MechSystem : SharedMechSystem SubscribeLocalEvent(OnExpose); #region Equipment UI message relays - SubscribeLocalEvent(RecieveEquipmentUiMesssages); + SubscribeLocalEvent(ReceiveEquipmentUiMesssages); + SubscribeLocalEvent(ReceiveEquipmentUiMesssages); #endregion } @@ -262,7 +263,7 @@ public sealed class MechSystem : SharedMechSystem UpdateUserInterface(uid, component); } - private void RecieveEquipmentUiMesssages(EntityUid uid, MechComponent component, T args) where T : MechEquipmentUiMessage + private void ReceiveEquipmentUiMesssages(EntityUid uid, MechComponent component, T args) where T : MechEquipmentUiMessage { var ev = new MechEquipmentUiMessageRelayEvent(args); var allEquipment = new List(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 index 0000000000..cce5c99563 --- /dev/null +++ b/Content.Shared/Mech/Equipment/Components/MechSoundboardComponent.cs @@ -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 +{ + /// + /// List of sounds that can be played + /// + [DataField("sounds"), ViewVariables(VVAccess.ReadWrite), AutoNetworkedField] + public List Sounds = new(); +} diff --git a/Content.Shared/Mech/Equipment/Systems/MechSoundboardSystem.cs b/Content.Shared/Mech/Equipment/Systems/MechSoundboardSystem.cs new file mode 100644 index 0000000000..5431c659c3 --- /dev/null +++ b/Content.Shared/Mech/Equipment/Systems/MechSoundboardSystem.cs @@ -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; + +/// +/// Handles everything for mech soundboard. +/// +public sealed class MechSoundboardSystem : EntitySystem +{ + [Dependency] private readonly SharedAudioSystem _audio = default!; + [Dependency] private readonly UseDelaySystem _useDelay = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnUiStateReady); + SubscribeLocalEvent(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(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); + } +} diff --git a/Content.Shared/Mech/MechUI.cs b/Content.Shared/Mech/MechUI.cs index 381760166b..f555fe69bd 100644 --- a/Content.Shared/Mech/MechUI.cs +++ b/Content.Shared/Mech/MechUI.cs @@ -67,6 +67,21 @@ public sealed class MechGrabberEjectMessage : MechEquipmentUiMessage } } +/// +/// Event raised for the soundboard equipment to play a sound from its component +/// +[Serializable, NetSerializable] +public sealed class MechSoundboardPlayMessage : MechEquipmentUiMessage +{ + public int Sound; + + public MechSoundboardPlayMessage(EntityUid equipment, int sound) + { + Equipment = equipment; + Sound = sound; + } +} + /// /// BUI state for mechs that also contains all equipment ui states. /// @@ -100,3 +115,12 @@ public sealed class MechGrabberUiState : BoundUserInterfaceState public List Contents = new(); public int MaxContents; } + +/// +/// List of sound collection ids to be localized and displayed. +/// +[Serializable, NetSerializable] +public sealed class MechSoundboardUiState : BoundUserInterfaceState +{ + public List Sounds = new(); +} diff --git a/Resources/Locale/en-US/mech/soundboard.ftl b/Resources/Locale/en-US/mech/soundboard.ftl new file mode 100644 index 0000000000..d9c0dc5b8e --- /dev/null +++ b/Resources/Locale/en-US/mech/soundboard.ftl @@ -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!!!!! diff --git a/Resources/Locale/en-US/prototypes/catalog/research/technologies.ftl b/Resources/Locale/en-US/prototypes/catalog/research/technologies.ftl index f98366b17e..4f1f1af5c6 100644 --- a/Resources/Locale/en-US/prototypes/catalog/research/technologies.ftl +++ b/Resources/Locale/en-US/prototypes/catalog/research/technologies.ftl @@ -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 diff --git a/Resources/Locale/en-US/tools/tool-qualities.ftl b/Resources/Locale/en-US/tools/tool-qualities.ftl index 921b61bc59..3036de0219 100644 --- a/Resources/Locale/en-US/tools/tool-qualities.ftl +++ b/Resources/Locale/en-US/tools/tool-qualities.ftl @@ -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 diff --git a/Resources/Prototypes/Catalog/Research/technologies.yml b/Resources/Prototypes/Catalog/Research/technologies.yml index afd7521fc0..dba06d996f 100644 --- a/Resources/Prototypes/Catalog/Research/technologies.yml +++ b/Resources/Prototypes/Catalog/Research/technologies.yml @@ -312,6 +312,27 @@ - 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 diff --git a/Resources/Prototypes/Entities/Clothing/Masks/masks.yml b/Resources/Prototypes/Entities/Clothing/Masks/masks.yml index 80d70c95f8..04bc867249 100644 --- a/Resources/Prototypes/Entities/Clothing/Masks/masks.yml +++ b/Resources/Prototypes/Entities/Clothing/Masks/masks.yml @@ -172,6 +172,10 @@ sprite: Clothing/Mask/clown.rsi - type: BreathMask - type: IdentityBlocker + # for H.O.N.K. construction + - type: Tag + tags: + - ClownMask - type: entity parent: ClothingMaskBase diff --git a/Resources/Prototypes/Entities/Clothing/Shoes/specific.yml b/Resources/Prototypes/Entities/Clothing/Shoes/specific.yml index e690d890d6..2129207047 100644 --- a/Resources/Prototypes/Entities/Clothing/Shoes/specific.yml +++ b/Resources/Prototypes/Entities/Clothing/Shoes/specific.yml @@ -22,6 +22,10 @@ - type: FootstepModifier footstepSoundCollection: collection: FootstepClown + # for H.O.N.K. construction + - type: Tag + tags: + - ClownShoes - type: entity parent: ClothingShoesBaseButcherable diff --git a/Resources/Prototypes/Entities/Objects/Devices/Electronics/mech.yml b/Resources/Prototypes/Entities/Objects/Devices/Electronics/mech.yml index 0ea4629adb..c718093eb5 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/Electronics/mech.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/Electronics/mech.yml @@ -1,3 +1,5 @@ +# Ripley + - type: entity id: RipleyCentralElectronics parent: BaseElectronics @@ -22,4 +24,45 @@ 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 diff --git a/Resources/Prototypes/Entities/Objects/Fun/bike_horn.yml b/Resources/Prototypes/Entities/Objects/Fun/bike_horn.yml index ae12b37d03..1a95cdd996 100644 --- a/Resources/Prototypes/Entities/Objects/Fun/bike_horn.yml +++ b/Resources/Prototypes/Entities/Objects/Fun/bike_horn.yml @@ -39,6 +39,11 @@ damage: types: Blunt: 0 + - type: Tool + qualities: + - Honking + useSound: + collection: BikeHorn - type: entity parent: BaseItem diff --git a/Resources/Prototypes/Entities/Objects/Specific/Mech/mech_construction.yml b/Resources/Prototypes/Entities/Objects/Specific/Mech/mech_construction.yml index 16f273ff44..aad2c52dce 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Mech/mech_construction.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Mech/mech_construction.yml @@ -150,3 +150,132 @@ 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 diff --git a/Resources/Prototypes/Entities/Objects/Specific/Mech/mecha_equipment.yml b/Resources/Prototypes/Entities/Objects/Specific/Mech/mecha_equipment.yml index fbbc13ddfb..2a24173c3a 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Mech/mecha_equipment.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Mech/mecha_equipment.yml @@ -23,4 +23,27 @@ 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!!! diff --git a/Resources/Prototypes/Entities/Objects/Specific/Mech/mechs.yml b/Resources/Prototypes/Entities/Objects/Specific/Mech/mechs.yml index d752a28f86..446ad650dc 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Mech/mechs.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Mech/mechs.yml @@ -103,3 +103,37 @@ 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 diff --git a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml index c183b8f28d..8b0ba1ba52 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml @@ -313,6 +313,9 @@ - OreProcessorMachineCircuitboard - RipleyCentralElectronics - RipleyPeripheralsElectronics + - HonkerCentralElectronics + - HonkerPeripheralsElectronics + - HonkerTargetingElectronics - GeneratorPlasmaMachineCircuitboard - GeneratorUraniumMachineCircuitboard - WallmountGeneratorElectronics @@ -373,6 +376,12 @@ - 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 index 0000000000..830b6bcb6f --- /dev/null +++ b/Resources/Prototypes/Recipes/Construction/Graphs/mechs/honker_construction.yml @@ -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 diff --git a/Resources/Prototypes/Recipes/Lathes/electronics.yml b/Resources/Prototypes/Recipes/Lathes/electronics.yml index 5cb7cf7c5d..033804b6fa 100644 --- a/Resources/Prototypes/Recipes/Lathes/electronics.yml +++ b/Resources/Prototypes/Recipes/Lathes/electronics.yml @@ -327,6 +327,33 @@ 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 diff --git a/Resources/Prototypes/Recipes/Lathes/mech_parts.yml b/Resources/Prototypes/Recipes/Lathes/mech_parts.yml index f9e47cdcad..c6accfa925 100644 --- a/Resources/Prototypes/Recipes/Lathes/mech_parts.yml +++ b/Resources/Prototypes/Recipes/Lathes/mech_parts.yml @@ -1,3 +1,4 @@ +# Ripley - type: latheRecipe id: RipleyHarness result: RipleyHarness @@ -45,3 +46,57 @@ 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 index 0000000000..9983f11078 --- /dev/null +++ b/Resources/Prototypes/SoundCollections/troll.yml @@ -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 diff --git a/Resources/Prototypes/tags.yml b/Resources/Prototypes/tags.yml index 5c2fac4564..9c65f89831 100644 --- a/Resources/Prototypes/tags.yml +++ b/Resources/Prototypes/tags.yml @@ -141,10 +141,7 @@ id: CigPack - type: Tag - id: HardsuitEVA - -- type: Tag - id: HelmetEVA + id: ClownMask - type: Tag id: ClownRecorder @@ -152,6 +149,9 @@ - type: Tag id: ClownRubberStamp +- type: Tag + id: ClownShoes + - type: Tag id: CluwneHorn @@ -327,9 +327,15 @@ - 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 @@ -348,6 +354,27 @@ - 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 diff --git a/Resources/Prototypes/tool_qualities.yml b/Resources/Prototypes/tool_qualities.yml index 94fee02462..08e00f17ce 100644 --- a/Resources/Prototypes/tool_qualities.yml +++ b/Resources/Prototypes/tool_qualities.yml @@ -53,3 +53,10 @@ 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 index 0000000000..01601a288d 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 index 0000000000..2a7ab1d762 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 index 0000000000..6260449569 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 index 0000000000..76f6cfd264 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 index 0000000000..ea4e806eb5 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 index 0000000000..8507c83cbf 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 index 0000000000..089e330fbf 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 index 0000000000..3dd89c377b 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 index 0000000000..857db6f803 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 index 0000000000..ff13a670af 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 index 0000000000..3dbd188439 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 index 0000000000..0dfe4e1fc9 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 index 0000000000..531ae1d850 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 index 0000000000..9c2eb36cda 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 index 0000000000..de4a5f8a77 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 index 0000000000..a511f8f542 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 index 0000000000..41d2c83327 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 index 0000000000..c27a1ff245 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 index 0000000000..b030880c47 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 index 0000000000..0733c1cd5c 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 index 0000000000..b3897f0985 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 index 0000000000..0c75e70f83 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 index 0000000000..0b0c3ff8e5 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 index 0000000000..1011b46a07 --- /dev/null +++ b/Resources/Textures/Objects/Specific/Mech/honker_construction.rsi/meta.json @@ -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" + } + ] +}