H.O.N.K. mech (#14670)
Co-authored-by: deltanedas <@deltanedas:kde.org>
36
Content.Client/Mech/Ui/Equipment/MechSoundboardUi.cs
Normal file
@@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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>
|
||||||
@@ -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));
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -62,7 +62,8 @@ public sealed class MechSystem : SharedMechSystem
|
|||||||
SubscribeLocalEvent<MechPilotComponent, AtmosExposedGetAirEvent>(OnExpose);
|
SubscribeLocalEvent<MechPilotComponent, AtmosExposedGetAirEvent>(OnExpose);
|
||||||
|
|
||||||
#region Equipment UI message relays
|
#region Equipment UI message relays
|
||||||
SubscribeLocalEvent<MechComponent, MechGrabberEjectMessage>(RecieveEquipmentUiMesssages);
|
SubscribeLocalEvent<MechComponent, MechGrabberEjectMessage>(ReceiveEquipmentUiMesssages);
|
||||||
|
SubscribeLocalEvent<MechComponent, MechSoundboardPlayMessage>(ReceiveEquipmentUiMesssages);
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -262,7 +263,7 @@ public sealed class MechSystem : SharedMechSystem
|
|||||||
UpdateUserInterface(uid, component);
|
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 ev = new MechEquipmentUiMessageRelayEvent(args);
|
||||||
var allEquipment = new List<EntityUid>(component.EquipmentContainer.ContainedEntities);
|
var allEquipment = new List<EntityUid>(component.EquipmentContainer.ContainedEntities);
|
||||||
|
|||||||
@@ -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();
|
||||||
|
}
|
||||||
@@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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>
|
/// <summary>
|
||||||
/// BUI state for mechs that also contains all equipment ui states.
|
/// BUI state for mechs that also contains all equipment ui states.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -100,3 +115,12 @@ public sealed class MechGrabberUiState : BoundUserInterfaceState
|
|||||||
public List<EntityUid> Contents = new();
|
public List<EntityUid> Contents = new();
|
||||||
public int MaxContents;
|
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();
|
||||||
|
}
|
||||||
|
|||||||
6
Resources/Locale/en-US/mech/soundboard.ftl
Normal file
@@ -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!!!!!
|
||||||
@@ -88,6 +88,9 @@ technologies-archaeology-description = Advanced equipment for uncovering the sec
|
|||||||
technologies-ripley-technology = Exosuit: Ripley
|
technologies-ripley-technology = Exosuit: Ripley
|
||||||
technologies-ripley-technology-description = The latest and greatest in mechanized cargo construction.
|
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-description = Like the previous ones, but better!
|
||||||
technologies-adv-parts-technology = Advanced parts technology
|
technologies-adv-parts-technology = Advanced parts technology
|
||||||
|
|
||||||
|
|||||||
@@ -21,3 +21,6 @@ tool-quality-slicing-tool-name = Knife
|
|||||||
|
|
||||||
tool-quality-sawing-name = Sawing
|
tool-quality-sawing-name = Sawing
|
||||||
tool-quality-sawing-tool-name = Saw
|
tool-quality-sawing-tool-name = Saw
|
||||||
|
|
||||||
|
tool-quality-honking-name = Honking
|
||||||
|
tool-quality-honking-tool-name = Bike Horn
|
||||||
|
|||||||
@@ -312,6 +312,27 @@
|
|||||||
- RipleyLLeg
|
- RipleyLLeg
|
||||||
- RipleyRLeg
|
- 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
|
# Industrial Engineering Technology Tree
|
||||||
|
|
||||||
- type: technology
|
- type: technology
|
||||||
|
|||||||
@@ -172,6 +172,10 @@
|
|||||||
sprite: Clothing/Mask/clown.rsi
|
sprite: Clothing/Mask/clown.rsi
|
||||||
- type: BreathMask
|
- type: BreathMask
|
||||||
- type: IdentityBlocker
|
- type: IdentityBlocker
|
||||||
|
# for H.O.N.K. construction
|
||||||
|
- type: Tag
|
||||||
|
tags:
|
||||||
|
- ClownMask
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
parent: ClothingMaskBase
|
parent: ClothingMaskBase
|
||||||
|
|||||||
@@ -22,6 +22,10 @@
|
|||||||
- type: FootstepModifier
|
- type: FootstepModifier
|
||||||
footstepSoundCollection:
|
footstepSoundCollection:
|
||||||
collection: FootstepClown
|
collection: FootstepClown
|
||||||
|
# for H.O.N.K. construction
|
||||||
|
- type: Tag
|
||||||
|
tags:
|
||||||
|
- ClownShoes
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
parent: ClothingShoesBaseButcherable
|
parent: ClothingShoesBaseButcherable
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
# Ripley
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
id: RipleyCentralElectronics
|
id: RipleyCentralElectronics
|
||||||
parent: BaseElectronics
|
parent: BaseElectronics
|
||||||
@@ -22,4 +24,45 @@
|
|||||||
state: id_mod
|
state: id_mod
|
||||||
- type: Tag
|
- type: Tag
|
||||||
tags:
|
tags:
|
||||||
- RipleyPeripheralsControlModule
|
- 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
|
||||||
|
|||||||
@@ -39,6 +39,11 @@
|
|||||||
damage:
|
damage:
|
||||||
types:
|
types:
|
||||||
Blunt: 0
|
Blunt: 0
|
||||||
|
- type: Tool
|
||||||
|
qualities:
|
||||||
|
- Honking
|
||||||
|
useSound:
|
||||||
|
collection: BikeHorn
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
parent: BaseItem
|
parent: BaseItem
|
||||||
|
|||||||
@@ -150,3 +150,132 @@
|
|||||||
graph: Ripley
|
graph: Ripley
|
||||||
node: start
|
node: start
|
||||||
defaultTarget: ripley
|
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
|
||||||
|
|||||||
@@ -23,4 +23,27 @@
|
|||||||
ui: !type:MechGrabberUi
|
ui: !type:MechGrabberUi
|
||||||
- type: ContainerContainer
|
- type: ContainerContainer
|
||||||
containers:
|
containers:
|
||||||
item-container: !type:Container
|
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!!!
|
||||||
|
|||||||
@@ -103,3 +103,37 @@
|
|||||||
containers:
|
containers:
|
||||||
mech-battery-slot:
|
mech-battery-slot:
|
||||||
- PowerCellHigh
|
- 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
|
||||||
|
|||||||
@@ -313,6 +313,9 @@
|
|||||||
- OreProcessorMachineCircuitboard
|
- OreProcessorMachineCircuitboard
|
||||||
- RipleyCentralElectronics
|
- RipleyCentralElectronics
|
||||||
- RipleyPeripheralsElectronics
|
- RipleyPeripheralsElectronics
|
||||||
|
- HonkerCentralElectronics
|
||||||
|
- HonkerPeripheralsElectronics
|
||||||
|
- HonkerTargetingElectronics
|
||||||
- GeneratorPlasmaMachineCircuitboard
|
- GeneratorPlasmaMachineCircuitboard
|
||||||
- GeneratorUraniumMachineCircuitboard
|
- GeneratorUraniumMachineCircuitboard
|
||||||
- WallmountGeneratorElectronics
|
- WallmountGeneratorElectronics
|
||||||
@@ -373,6 +376,12 @@
|
|||||||
- RipleyLLeg
|
- RipleyLLeg
|
||||||
- RipleyRLeg
|
- RipleyRLeg
|
||||||
- MechEquipmentGrabber
|
- MechEquipmentGrabber
|
||||||
|
- HonkerHarness
|
||||||
|
- HonkerLArm
|
||||||
|
- HonkerRArm
|
||||||
|
- HonkerLLeg
|
||||||
|
- HonkerRLeg
|
||||||
|
- MechEquipmentHorn
|
||||||
- type: MaterialStorage
|
- type: MaterialStorage
|
||||||
whitelist:
|
whitelist:
|
||||||
tags:
|
tags:
|
||||||
|
|||||||
@@ -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
|
||||||
@@ -327,6 +327,33 @@
|
|||||||
Glass: 900
|
Glass: 900
|
||||||
Gold: 100
|
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
|
# Power
|
||||||
- type: latheRecipe
|
- type: latheRecipe
|
||||||
id: APCElectronics
|
id: APCElectronics
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
# Ripley
|
||||||
- type: latheRecipe
|
- type: latheRecipe
|
||||||
id: RipleyHarness
|
id: RipleyHarness
|
||||||
result: RipleyHarness
|
result: RipleyHarness
|
||||||
@@ -45,3 +46,57 @@
|
|||||||
materials:
|
materials:
|
||||||
Steel: 500
|
Steel: 500
|
||||||
Plastic: 200
|
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
|
||||||
|
|||||||
43
Resources/Prototypes/SoundCollections/troll.yml
Normal file
@@ -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
|
||||||
@@ -141,10 +141,7 @@
|
|||||||
id: CigPack
|
id: CigPack
|
||||||
|
|
||||||
- type: Tag
|
- type: Tag
|
||||||
id: HardsuitEVA
|
id: ClownMask
|
||||||
|
|
||||||
- type: Tag
|
|
||||||
id: HelmetEVA
|
|
||||||
|
|
||||||
- type: Tag
|
- type: Tag
|
||||||
id: ClownRecorder
|
id: ClownRecorder
|
||||||
@@ -152,6 +149,9 @@
|
|||||||
- type: Tag
|
- type: Tag
|
||||||
id: ClownRubberStamp
|
id: ClownRubberStamp
|
||||||
|
|
||||||
|
- type: Tag
|
||||||
|
id: ClownShoes
|
||||||
|
|
||||||
- type: Tag
|
- type: Tag
|
||||||
id: CluwneHorn
|
id: CluwneHorn
|
||||||
|
|
||||||
@@ -327,9 +327,15 @@
|
|||||||
- type: Tag
|
- type: Tag
|
||||||
id: Hardsuit # Prevent melee injectors that can't penetrate hardsuits from injecting the wearer (nettles)
|
id: Hardsuit # Prevent melee injectors that can't penetrate hardsuits from injecting the wearer (nettles)
|
||||||
|
|
||||||
|
- type: Tag
|
||||||
|
id: HardsuitEVA
|
||||||
|
|
||||||
- type: Tag
|
- type: Tag
|
||||||
id: Head
|
id: Head
|
||||||
|
|
||||||
|
- type: Tag
|
||||||
|
id: HelmetEVA
|
||||||
|
|
||||||
- type: Tag
|
- type: Tag
|
||||||
id: HideContextMenu
|
id: HideContextMenu
|
||||||
|
|
||||||
@@ -348,6 +354,27 @@
|
|||||||
- type: Tag
|
- type: Tag
|
||||||
id: HolosignProjector
|
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.
|
- type: Tag #Drop this innate tool instead of deleting it.
|
||||||
id: InnateDontDelete
|
id: InnateDontDelete
|
||||||
|
|
||||||
|
|||||||
@@ -53,3 +53,10 @@
|
|||||||
toolName: tool-quality-sawing-tool-name
|
toolName: tool-quality-sawing-tool-name
|
||||||
spawn: Saw
|
spawn: Saw
|
||||||
icon: { sprite: Objects/Specific/Medical/Surgery/saw.rsi, state: 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 }
|
||||||
|
|||||||
|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 1.3 KiB |
|
After Width: | Height: | Size: 1.4 KiB |
|
After Width: | Height: | Size: 1.4 KiB |
|
After Width: | Height: | Size: 1.3 KiB |
|
After Width: | Height: | Size: 1.4 KiB |
|
After Width: | Height: | Size: 1.4 KiB |
|
After Width: | Height: | Size: 1.4 KiB |
|
After Width: | Height: | Size: 1.4 KiB |
|
After Width: | Height: | Size: 1.4 KiB |
|
After Width: | Height: | Size: 1.4 KiB |
|
After Width: | Height: | Size: 1.4 KiB |
|
After Width: | Height: | Size: 1.3 KiB |
|
After Width: | Height: | Size: 719 B |
|
After Width: | Height: | Size: 718 B |
|
After Width: | Height: | Size: 352 B |
|
After Width: | Height: | Size: 357 B |
|
After Width: | Height: | Size: 359 B |
|
After Width: | Height: | Size: 369 B |
|
After Width: | Height: | Size: 367 B |
|
After Width: | Height: | Size: 380 B |
|
After Width: | Height: | Size: 382 B |
|
After Width: | Height: | Size: 387 B |
@@ -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"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||