diff --git a/Content.Server/Stray/AudioLoop/AudioLoopSystem.cs b/Content.Server/Stray/AudioLoop/AudioLoopSystem.cs
new file mode 100644
index 00000000000..954b18425c6
--- /dev/null
+++ b/Content.Server/Stray/AudioLoop/AudioLoopSystem.cs
@@ -0,0 +1,55 @@
+//AudioParams auSt = new AudioParams();
+//auSt.Loop = true;
+//AudioComponent audi = _audio.SetupAudio(uid, audiCom.fileName, auSt);
+//audi.StartPlaying();
+using Robust.Shared.Audio.Systems;
+using Robust.Shared.Audio;
+using Robust.Shared.Audio.Components;
+using Content.Shared.Interaction;
+using Robust.Shared.Audio.Effects;
+using Content.Shared.Stray.AudioLoop;
+using JetBrains.Annotations;
+using Content.Shared.Interaction;
+using Content.Shared.Interaction.Events;
+
+
+
+namespace Content.Server.Stray.AudioLoop;
+
+[UsedImplicitly]
+public sealed class DiceSystem : SharedAudioLoopSystem
+{
+ [Dependency] private readonly SharedAudioSystem _audio = default!;
+
+
+ public override void ActToggle(EntityUid uid, AudioLoopComponent audiCom, UseInHandEvent args){
+ audiCom.act = !audiCom.act;
+
+ if(audiCom.act==false){
+ _audio.Stop(audiCom.ent, audiCom.auC);
+ }else{
+ (EntityUid Entity, AudioComponent Component)? res = _audio.PlayPvs(audiCom.sound, uid, new AudioParams(0, 1, SharedAudioSystem.DefaultSoundRange, 3, 1, true, 0f));
+ if(res!=null){
+ audiCom.ent = res.Value.Entity;
+ audiCom.auC = res.Value.Component;
+ }
+ }
+ }
+
+ //public override void OnSpawn(EntityUid uid, AudioLoopComponent audiCom, MapInitEvent args){
+ // //AudioParams auSt = new(0, 1, SharedAudioSystem.DefaultSoundRange, 1, 1, true, 0f);//new AudioParams();
+ // //auSt.Loop = true;
+ // //auSt.RolloffFactor = 1;
+ // ////source.RolloffFactor = audioParams.RolloffFactor;
+ // //auSt.MaxDistance = 15;
+ // //auSt.ReferenceDistance = 1;
+ // //AudioComponent audi = _audio.SetupAudio(uid, audiCom.fileName, auSt);
+ // //audi.StartPlaying();
+ // (EntityUid Entity, AudioComponent Component)? res = _audio.PlayPvs(audiCom.sound, uid, new AudioParams(0, 1, SharedAudioSystem.DefaultSoundRange, 1, 1, true, 0f));
+ // if(res!=null){
+ // audiCom.ent = res.Value.Entity;
+ // audiCom.auC = res.Value.Component;
+ // }
+ //}
+
+}
diff --git a/Content.Shared/Stray/AudioLoop/AudioLoopComponent.cs b/Content.Shared/Stray/AudioLoop/AudioLoopComponent.cs
new file mode 100644
index 00000000000..1007eb58322
--- /dev/null
+++ b/Content.Shared/Stray/AudioLoop/AudioLoopComponent.cs
@@ -0,0 +1,32 @@
+//Audio/Items/drill_use.ogg
+using System;
+using System.Collections.Generic;
+using System.Numerics;
+using Robust.Shared.Audio.Effects;
+using Robust.Shared.Audio.Sources;
+using Robust.Shared.Audio.Systems;
+using Robust.Shared.GameObjects;
+using Content.Shared.Stray.AudioLoop;
+using Robust.Shared.GameStates;
+using Robust.Shared.Audio;
+using Robust.Shared.Audio.Components;
+using Robust.Shared.Serialization;
+using Robust.Shared.Serialization.Manager.Attributes;
+using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom;
+using Robust.Shared.ViewVariables;
+
+namespace Content.Shared.Stray.AudioLoop;
+
+///
+/// Stores the audio data for an audio entity.
+///
+[RegisterComponent, NetworkedComponent, AutoGenerateComponentState(true), Access(typeof(SharedAudioLoopSystem))]
+public sealed partial class AudioLoopComponent : Component
+{
+ [DataField("sound",required: true)]
+ public SoundSpecifier sound { get; private set; }
+ public EntityUid ent;
+ public AudioComponent auC;
+ [AutoNetworkedField]
+ public bool act = false;
+}
diff --git a/Content.Shared/Stray/AudioLoop/SharedAudioLoopSystem.cs b/Content.Shared/Stray/AudioLoop/SharedAudioLoopSystem.cs
new file mode 100644
index 00000000000..685466e70bf
--- /dev/null
+++ b/Content.Shared/Stray/AudioLoop/SharedAudioLoopSystem.cs
@@ -0,0 +1,34 @@
+using Robust.Shared.Audio.Components;
+using Robust.Shared.Audio;
+using Robust.Shared.Audio.Systems;
+using Content.Shared.Interaction;
+using Robust.Shared.Audio.Effects;
+using Robust.Shared.GameObjects;
+using Content.Shared.Interaction;
+using Content.Shared.Interaction.Events;
+
+namespace Content.Shared.Stray.AudioLoop;
+
+public abstract partial class SharedAudioLoopSystem : EntitySystem
+{
+
+ public override void Initialize()
+ {
+ base.Initialize();
+ //_audio.
+ //InitializeEffect();
+ //ZOffset = CfgManager.GetCVar(CVars.AudioZOffset);
+ //Subs.CVar(CfgManager, CVars.AudioZOffset, SetZOffset);
+ //SubscribeLocalEvent(OnAudioGetStateAttempt);
+ //SubscribeLocalEvent(OnSpawn);
+ SubscribeLocalEvent(ActToggle);
+ }
+ //(EntityUid uid, string? fileName, AudioParams? audioParams, TimeSpan? length = null)
+ //public virtual void OnSpawn(EntityUid uid, AudioLoopComponent audiCom, MapInitEvent args){
+//
+ //}
+
+ public virtual void ActToggle(EntityUid uid, AudioLoopComponent audiCom, UseInHandEvent args){
+
+ }
+}
diff --git a/Resources/Audio/Stray/Fun/maxwell-the-cat-theme.ogg b/Resources/Audio/Stray/Fun/maxwell-the-cat-theme.ogg
new file mode 100644
index 00000000000..d9fd0051c76
Binary files /dev/null and b/Resources/Audio/Stray/Fun/maxwell-the-cat-theme.ogg differ
diff --git a/Resources/Prototypes/Catalog/Fills/Crates/fun.yml b/Resources/Prototypes/Catalog/Fills/Crates/fun.yml
index ea1e05359ac..ac15e5d9312 100644
--- a/Resources/Prototypes/Catalog/Fills/Crates/fun.yml
+++ b/Resources/Prototypes/Catalog/Fills/Crates/fun.yml
@@ -28,6 +28,7 @@
- id: PlushieMoth
- id: PlushieMothRandom # Nyanotrasen - Random Moth Plushies
amount: 2
+ - id: ToyMaxwell
- id: PlushieArachind
- id: PlushiePenguin
@@ -308,6 +309,7 @@
- id: ClothingHeadHatMagician
- id: BeachBall
- id: ClothingShoesSkates
+ - id: ToyMaxwell
- type: entity
id: CrateFunBikeHornImplants
diff --git a/Resources/Prototypes/Entities/Markers/Spawners/Random/toy.yml b/Resources/Prototypes/Entities/Markers/Spawners/Random/toy.yml
index eba1e300edf..a70fe61b133 100644
--- a/Resources/Prototypes/Entities/Markers/Spawners/Random/toy.yml
+++ b/Resources/Prototypes/Entities/Markers/Spawners/Random/toy.yml
@@ -32,6 +32,7 @@
- PlushieSharkGrey
- ToyAmongPequeno
- ToyMouse
+ - ToyMaxwell # Stray Toy
- PlushieDiona
- PlushieMoth
- PlushieMothRandom # Nyanotrasen Random Moth Plushies
diff --git a/Resources/Prototypes/Entities/Mobs/Player/admin_ghost.yml b/Resources/Prototypes/Entities/Mobs/Player/admin_ghost.yml
index 1156352e608..52105c75182 100644
--- a/Resources/Prototypes/Entities/Mobs/Player/admin_ghost.yml
+++ b/Resources/Prototypes/Entities/Mobs/Player/admin_ghost.yml
@@ -39,7 +39,7 @@
bodyType: Kinematic
- type: CustomGhosts
maxRandomIndex: 5
- ckeys: ""
+ ckeys: Kotovasu
- type: Body
prototype: Aghost
- type: Access
diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Food/Containers/box.yml b/Resources/Prototypes/Entities/Objects/Consumable/Food/Containers/box.yml
index aa9e70f3fa4..4ab3fc24ff1 100644
--- a/Resources/Prototypes/Entities/Objects/Consumable/Food/Containers/box.yml
+++ b/Resources/Prototypes/Entities/Objects/Consumable/Food/Containers/box.yml
@@ -755,6 +755,8 @@
- id: GoldenBikeHorn
prob: 0.1
orGroup: GiftPool
+ #- id: ToyMaxwell # Stray Toy
+ # onGroup: GiftPool
- id: ToyRenault # DeltaV Toy, see Resources/Prototypes/DeltaV/Entities/Objects/Fun/toys.yml
orGroup: GiftPool
- id: ToySiobhan # DeltaV Toy, see Resources/Prototypes/DeltaV/Entities/Objects/Fun/toys.yml
diff --git a/Resources/Prototypes/Entities/Objects/Decoration/present.yml b/Resources/Prototypes/Entities/Objects/Decoration/present.yml
index 06836df342c..8327b6c0d41 100644
--- a/Resources/Prototypes/Entities/Objects/Decoration/present.yml
+++ b/Resources/Prototypes/Entities/Objects/Decoration/present.yml
@@ -104,6 +104,8 @@
orGroup: GiftPool
- id: PlushieArachind
orGroup: GiftPool
+ #- id: ToyMaxwell # Stray Toy
+ # onGroup: GiftPool
- id: ClothingNeckCloakMoth
orGroup: GiftPool
- id: ToyMouse
diff --git a/Resources/Prototypes/Entities/Structures/Machines/Computers/arcades.yml b/Resources/Prototypes/Entities/Structures/Machines/Computers/arcades.yml
index e8bfcfac804..998647307c3 100644
--- a/Resources/Prototypes/Entities/Structures/Machines/Computers/arcades.yml
+++ b/Resources/Prototypes/Entities/Structures/Machines/Computers/arcades.yml
@@ -126,6 +126,7 @@
- BeachBall
- PlushieMoth
- PlushieHampter
+ - ToyMaxwell # Stray Toy
- ToyRenault # DeltaV Toy, see Resources/Prototypes/DeltaV/Entities/Objects/Fun/toys.yml
- ToySiobhan # DeltaV Toy, see Resources/Prototypes/DeltaV/Entities/Objects/Fun/toys.yml
- PlushiePenguin
diff --git a/Resources/Prototypes/Stray/Entities/Objects/Fun/toys.yml b/Resources/Prototypes/Stray/Entities/Objects/Fun/toys.yml
new file mode 100644
index 00000000000..ddec0a06cfe
--- /dev/null
+++ b/Resources/Prototypes/Stray/Entities/Objects/Fun/toys.yml
@@ -0,0 +1,15 @@
+- type: entity
+ parent: BasePlushie
+ id: ToyMaxwell
+ name: Максвелл
+ description: "Игрушка Максвелла. По неизвестной причине постоянно крутится и издаёт музыку"
+ components:
+ - type: Sprite
+ sprite: Stray/Objects/Fun/toys.rsi
+ state: maxwell
+ - type: AudioLoop
+ sound:
+ path: /Audio/Stray/Fun/maxwell-the-cat-theme.ogg
+ #- type: EmitSoundOnSpawn
+ # sound:
+ # path: /Audio/Weapons/Guns/Gunshots/rocket_launcher.ogg
diff --git a/Resources/Textures/SimpleStation14/Mobs/Ghosts/ghost.rsi/BioMass.png b/Resources/Textures/SimpleStation14/Mobs/Ghosts/ghost.rsi/BioMass.png
index c324b299d09..653f58b2ec1 100644
Binary files a/Resources/Textures/SimpleStation14/Mobs/Ghosts/ghost.rsi/BioMass.png and b/Resources/Textures/SimpleStation14/Mobs/Ghosts/ghost.rsi/BioMass.png differ
diff --git a/Resources/Textures/SimpleStation14/Mobs/Ghosts/ghost_admin.rsi/Kotovasu.png b/Resources/Textures/SimpleStation14/Mobs/Ghosts/ghost_admin.rsi/Kotovasu.png
new file mode 100644
index 00000000000..4d6a068f2c4
Binary files /dev/null and b/Resources/Textures/SimpleStation14/Mobs/Ghosts/ghost_admin.rsi/Kotovasu.png differ
diff --git a/Resources/Textures/SimpleStation14/Mobs/Ghosts/ghost_admin.rsi/meta.json b/Resources/Textures/SimpleStation14/Mobs/Ghosts/ghost_admin.rsi/meta.json
index dcb201e132f..006f830d72c 100644
--- a/Resources/Textures/SimpleStation14/Mobs/Ghosts/ghost_admin.rsi/meta.json
+++ b/Resources/Textures/SimpleStation14/Mobs/Ghosts/ghost_admin.rsi/meta.json
@@ -19,6 +19,7 @@
"name": "2",
"directions": 4
},
+
{
"name": "3",
"directions": 4
@@ -47,6 +48,9 @@
0.1
]
]
+ },
+ {
+ "name": "Kotovasu"
}
]
}
diff --git a/Resources/Textures/Stray/Objects/Fun/toys.rsi/maxwell.png b/Resources/Textures/Stray/Objects/Fun/toys.rsi/maxwell.png
new file mode 100644
index 00000000000..cf022acbefa
Binary files /dev/null and b/Resources/Textures/Stray/Objects/Fun/toys.rsi/maxwell.png differ
diff --git a/Resources/Textures/Stray/Objects/Fun/toys.rsi/meta.json b/Resources/Textures/Stray/Objects/Fun/toys.rsi/meta.json
new file mode 100644
index 00000000000..d74ac9e894b
--- /dev/null
+++ b/Resources/Textures/Stray/Objects/Fun/toys.rsi/meta.json
@@ -0,0 +1,26 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Made for DeltaV-Stray by boctonskuitea",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "maxwell",
+ "delays": [
+ [
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1
+ ]
+ ]
+ }
+ ]
+}