diff --git a/Content.Client/GameObjects/Components/Instruments/InstrumentComponent.cs b/Content.Client/GameObjects/Components/Instruments/InstrumentComponent.cs index e4c9e6c0fe..dbb5d7e536 100644 --- a/Content.Client/GameObjects/Components/Instruments/InstrumentComponent.cs +++ b/Content.Client/GameObjects/Components/Instruments/InstrumentComponent.cs @@ -37,6 +37,7 @@ namespace Content.Client.GameObjects.Components.Instruments [CanBeNull] private IMidiRenderer _renderer; private byte _instrumentProgram = 1; + private byte _instrumentBank = 0; private uint _syncSequencerTick; /// @@ -81,6 +82,23 @@ namespace Content.Client.GameObjects.Components.Instruments } } + /// + /// Changes the instrument bank the midi renderer will use. + /// + [ViewVariables(VVAccess.ReadWrite)] + public byte InstrumentBank + { + get => _instrumentBank; + set + { + _instrumentBank = value; + if (_renderer != null) + { + _renderer.MidiBank = _instrumentBank; + } + } + } + /// /// Whether there's a midi song being played or not. /// @@ -115,6 +133,7 @@ namespace Content.Client.GameObjects.Components.Instruments if (_renderer != null) { + _renderer.MidiBank = _instrumentBank; _renderer.MidiProgram = _instrumentProgram; _renderer.TrackingEntity = Owner; _renderer.OnMidiPlayerFinished += () => { OnMidiPlaybackEnded?.Invoke(); EndRenderer(); SendNetworkMessage(new InstrumentStopMidiMessage()); }; @@ -149,6 +168,7 @@ namespace Content.Client.GameObjects.Components.Instruments { base.ExposeData(serializer); serializer.DataField(ref _instrumentProgram, "program", (byte)1); + serializer.DataField(ref _instrumentBank, "bank", (byte)0); } public override void HandleNetworkMessage(ComponentMessage message, INetChannel channel, ICommonSession session = null) diff --git a/Resources/MidiCustom/space-station-14.sf2 b/Resources/MidiCustom/space-station-14.sf2 new file mode 100644 index 0000000000..a4411188e3 Binary files /dev/null and b/Resources/MidiCustom/space-station-14.sf2 differ diff --git a/Resources/Prototypes/Entities/Items/Instruments.yml b/Resources/Prototypes/Entities/Items/Instruments.yml index f8517e3496..08eac70231 100644 --- a/Resources/Prototypes/Entities/Items/Instruments.yml +++ b/Resources/Prototypes/Entities/Items/Instruments.yml @@ -210,3 +210,22 @@ - type: Item Size: 24 sprite: Objects/Instruments/banjo.rsi + +- type: entity + name: gilded bike horn + description: An exquisitely decorated bike horn, capable of honking in a variety of notes. + parent: BaseHandheldInstrument + id: BikeHornInstrument + components: + - type: Instrument + program: 1 + bank: 1 + - type: Sprite + sprite: Objects/Instruments/bike_horn.rsi + state: icon + - type: Icon + sprite: Objects/Instruments/bike_horn.rsi + state: icon + - type: Item + Size: 24 + sprite: Objects/Instruments/bike_horn.rsi diff --git a/Resources/Textures/Objects/Instruments/bike_horn.rsi/icon.png b/Resources/Textures/Objects/Instruments/bike_horn.rsi/icon.png new file mode 100644 index 0000000000..ea9fa956f2 Binary files /dev/null and b/Resources/Textures/Objects/Instruments/bike_horn.rsi/icon.png differ diff --git a/Resources/Textures/Objects/Instruments/bike_horn.rsi/inhand-left.png b/Resources/Textures/Objects/Instruments/bike_horn.rsi/inhand-left.png new file mode 100644 index 0000000000..0987105109 Binary files /dev/null and b/Resources/Textures/Objects/Instruments/bike_horn.rsi/inhand-left.png differ diff --git a/Resources/Textures/Objects/Instruments/bike_horn.rsi/inhand-right.png b/Resources/Textures/Objects/Instruments/bike_horn.rsi/inhand-right.png new file mode 100644 index 0000000000..252bb6565a Binary files /dev/null and b/Resources/Textures/Objects/Instruments/bike_horn.rsi/inhand-right.png differ diff --git a/Resources/Textures/Objects/Instruments/bike_horn.rsi/meta.json b/Resources/Textures/Objects/Instruments/bike_horn.rsi/meta.json new file mode 100644 index 0000000000..b4eb2638bb --- /dev/null +++ b/Resources/Textures/Objects/Instruments/bike_horn.rsi/meta.json @@ -0,0 +1,56 @@ +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "https://github.com/vgstation-coders/vgstation13 at 8d9c91e19cb52713c7f7f1804c2b6f7203f8d331", + "states": [ + { + "name": "icon", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "inhand-left", + "directions": 4, + "delays": [ + [ + 1 + ], + [ + 1 + ], + [ + 1 + ], + [ + 1 + ] + ] + }, + { + "name": "inhand-right", + "directions": 4, + "delays": [ + [ + 1 + ], + [ + 1 + ], + [ + 1 + ], + [ + 1 + ] + ] + } + ] +}