- add: genitals
50
Content.Client/_Amour/Hole/HoleSystem.cs
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
using Content.Shared._Amour.Hole;
|
||||||
|
using Content.Shared.Humanoid;
|
||||||
|
using Robust.Client.GameObjects;
|
||||||
|
using Robust.Shared.Containers;
|
||||||
|
|
||||||
|
namespace Content.Client._Amour.Hole;
|
||||||
|
|
||||||
|
public sealed class HoleSystem : SharedHoleSystem
|
||||||
|
{
|
||||||
|
public override void Initialize()
|
||||||
|
{
|
||||||
|
SubscribeLocalEvent<HoleContainerComponent,EntInsertedIntoContainerMessage>(OnInsert);
|
||||||
|
SubscribeLocalEvent<HoleContainerComponent,EntRemovedFromContainerMessage>(OnRemoved);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnRemoved(EntityUid uid, HoleContainerComponent component, EntRemovedFromContainerMessage args)
|
||||||
|
{
|
||||||
|
Log.Debug("A VSE");
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnInsert(EntityUid uid, HoleContainerComponent component, EntInsertedIntoContainerMessage args)
|
||||||
|
{
|
||||||
|
if(!TryComp<SpriteComponent>(uid, out var sprite) || !TryComp<HoleComponent>(args.Entity,out var hole))
|
||||||
|
return;
|
||||||
|
Log.Debug("DRAW PISYA");
|
||||||
|
|
||||||
|
DrawShit(uid,args.Entity);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void DrawShit(Entity<SpriteComponent?,HumanoidAppearanceComponent?> owner, Entity<HoleComponent?> entity)
|
||||||
|
{
|
||||||
|
if(!Resolve(owner.Owner,ref owner.Comp1, ref owner.Comp2) || !Resolve(entity.Owner,ref entity.Comp))
|
||||||
|
return;
|
||||||
|
|
||||||
|
var spriteComp = owner.Comp1;
|
||||||
|
var holeComp = entity.Comp;
|
||||||
|
|
||||||
|
foreach (var layer in holeComp.BehindLayer)
|
||||||
|
{
|
||||||
|
var l = spriteComp.AddLayer(layer, 0);
|
||||||
|
spriteComp[l].Color = layer.Color ?? owner.Comp2.SkinColor;
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach (var layer in holeComp.FrontLayer)
|
||||||
|
{
|
||||||
|
var l = spriteComp.AddLayer(layer);
|
||||||
|
spriteComp[l].Color = layer.Color ?? owner.Comp2.SkinColor;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
24
Content.Server/_Amour/Hole/HoleSystem.Container.cs
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
using Content.Shared._Amour.Hole;
|
||||||
|
using Robust.Server.Containers;
|
||||||
|
using Robust.Shared.Containers;
|
||||||
|
|
||||||
|
namespace Content.Server._Amour.Hole;
|
||||||
|
|
||||||
|
public sealed partial class HoleSystem
|
||||||
|
{
|
||||||
|
[Dependency] private readonly ContainerSystem _containerSystem = default!;
|
||||||
|
private void InitializeContainer()
|
||||||
|
{
|
||||||
|
SubscribeLocalEvent<HoleContainerComponent,ComponentInit>(OnContainerInit);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnContainerInit(EntityUid uid, HoleContainerComponent component, ComponentInit args)
|
||||||
|
{
|
||||||
|
component.Slot = _containerSystem.EnsureContainer<Container>(uid, HoleContainerComponent.SlotName);
|
||||||
|
foreach (var holePrototype in component.HolePrototypes)
|
||||||
|
{
|
||||||
|
Log.Debug("ADDED " + holePrototype);
|
||||||
|
_containerSystem.Insert(Spawn(holePrototype), component.Slot);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
19
Content.Server/_Amour/Hole/HoleSystem.Inventory.cs
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
using Content.Shared._Amour.Hole;
|
||||||
|
using Robust.Server.Containers;
|
||||||
|
using Robust.Shared.Containers;
|
||||||
|
|
||||||
|
namespace Content.Server._Amour.Hole;
|
||||||
|
|
||||||
|
public sealed partial class HoleSystem
|
||||||
|
{
|
||||||
|
[Dependency] private readonly ContainerSystem _container = default!;
|
||||||
|
public void InitializeInventory()
|
||||||
|
{
|
||||||
|
SubscribeLocalEvent<HoleInventoryComponent,ComponentInit>(OnInventoryInit);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnInventoryInit(EntityUid uid, HoleInventoryComponent component, ComponentInit args)
|
||||||
|
{
|
||||||
|
component.Slot = _container.EnsureContainer<ContainerSlot>(uid,HoleInventoryComponent.SlotName);
|
||||||
|
}
|
||||||
|
}
|
||||||
45
Content.Server/_Amour/Hole/HoleSystem.Solution.cs
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
using Content.Server.Chemistry.Containers.EntitySystems;
|
||||||
|
using Content.Shared._Amour.Hole;
|
||||||
|
|
||||||
|
namespace Content.Server._Amour.Hole;
|
||||||
|
|
||||||
|
public sealed partial class HoleSystem
|
||||||
|
{
|
||||||
|
[Dependency] private readonly SolutionContainerSystem _solutionContainer = default!;
|
||||||
|
|
||||||
|
public void InitializeSolution()
|
||||||
|
{
|
||||||
|
SubscribeLocalEvent<HoleSolutionComponent,ComponentInit>(OnSolutionInit);
|
||||||
|
SubscribeLocalEvent<HoleSolutionComponent,EntityUnpausedEvent>(OnUnpaused);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnSolutionInit(EntityUid uid, HoleSolutionComponent component, ComponentInit args)
|
||||||
|
{
|
||||||
|
component.NextGenerationTime = _gameTiming.CurTime;
|
||||||
|
component.Solution = _solutionContainer.EnsureSolution(uid, HoleSolutionComponent.SlotName);
|
||||||
|
component.Solution.MaxVolume = component.SubstanceHoldCount;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnUnpaused(EntityUid uid, HoleSolutionComponent component, EntityUnpausedEvent args)
|
||||||
|
{
|
||||||
|
component.NextGenerationTime += args.PausedTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void UpdateSolution(float frameTime)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
var query = EntityQueryEnumerator<HoleSolutionComponent>();
|
||||||
|
while (query.MoveNext(out var uid, out var component))
|
||||||
|
{
|
||||||
|
if(_gameTiming.CurTime < component.NextGenerationTime)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
component.NextGenerationTime = _gameTiming.CurTime;
|
||||||
|
|
||||||
|
if(component.Solution.Volume >= component.SubstanceHoldCount)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
component.Solution.AddReagent(component.SubstanceName,component.SubstanceGenerationCount);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
29
Content.Server/_Amour/Hole/HoleSystem.cs
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
using Content.Server.Chemistry.Containers.EntitySystems;
|
||||||
|
using Content.Shared._Amour.Hole;
|
||||||
|
using Robust.Server.Containers;
|
||||||
|
using Robust.Shared.Containers;
|
||||||
|
using Robust.Shared.Timing;
|
||||||
|
|
||||||
|
namespace Content.Server._Amour.Hole;
|
||||||
|
|
||||||
|
public sealed partial class HoleSystem : SharedHoleSystem
|
||||||
|
{
|
||||||
|
[Dependency] private readonly IGameTiming _gameTiming = default!;
|
||||||
|
|
||||||
|
public override void Initialize()
|
||||||
|
{
|
||||||
|
InitializeContainer();
|
||||||
|
InitializeInventory();
|
||||||
|
SubscribeLocalEvent<HoleComponent,EntGotInsertedIntoContainerMessage>(OnInsert);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnInsert(EntityUid uid, HoleComponent component, EntGotInsertedIntoContainerMessage args)
|
||||||
|
{
|
||||||
|
component.Parent = GetNetEntity(args.Container.Owner);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void Update(float frameTime)
|
||||||
|
{
|
||||||
|
UpdateSolution(frameTime);
|
||||||
|
}
|
||||||
|
}
|
||||||
29
Content.Shared/_Amour/Hole/HoleComponent.cs
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
using Content.Shared.Chemistry.Components;
|
||||||
|
using Content.Shared.Chemistry.Reagent;
|
||||||
|
using Content.Shared.Item;
|
||||||
|
using Robust.Shared.Containers;
|
||||||
|
using Robust.Shared.Prototypes;
|
||||||
|
using Robust.Shared.Serialization;
|
||||||
|
using Robust.Shared.Utility;
|
||||||
|
|
||||||
|
namespace Content.Shared._Amour.Hole;
|
||||||
|
|
||||||
|
[RegisterComponent]
|
||||||
|
public sealed partial class HoleComponent : Component
|
||||||
|
{
|
||||||
|
[ViewVariables] public NetEntity Parent;
|
||||||
|
|
||||||
|
// Father can be in mother, its like in audiofil shit
|
||||||
|
[DataField] public HoleType HoleType = HoleType.Flat;
|
||||||
|
|
||||||
|
[DataField("sprite")] public string? RsiPath;
|
||||||
|
[DataField] public List<PrototypeLayerData> FrontLayer = new();
|
||||||
|
[DataField] public List<PrototypeLayerData> BehindLayer = new();
|
||||||
|
}
|
||||||
|
|
||||||
|
public enum HoleType : byte
|
||||||
|
{
|
||||||
|
Father,
|
||||||
|
Flat,
|
||||||
|
Mother
|
||||||
|
}
|
||||||
12
Content.Shared/_Amour/Hole/HoleContainerComponent.cs
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
using Robust.Shared.Containers;
|
||||||
|
using Robust.Shared.Prototypes;
|
||||||
|
|
||||||
|
namespace Content.Shared._Amour.Hole;
|
||||||
|
|
||||||
|
[RegisterComponent]
|
||||||
|
public sealed partial class HoleContainerComponent : Component
|
||||||
|
{
|
||||||
|
public const string SlotName = "Funny";
|
||||||
|
[ViewVariables] public Container Slot = default!;
|
||||||
|
[DataField] public List<EntProtoId> HolePrototypes = new();
|
||||||
|
}
|
||||||
17
Content.Shared/_Amour/Hole/HoleInventoryComponent.cs
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
using Content.Shared.Item;
|
||||||
|
using Robust.Shared.Containers;
|
||||||
|
using Robust.Shared.Prototypes;
|
||||||
|
|
||||||
|
namespace Content.Shared._Amour.Hole;
|
||||||
|
|
||||||
|
[RegisterComponent]
|
||||||
|
public sealed partial class HoleInventoryComponent : Component
|
||||||
|
{
|
||||||
|
public const string SlotName = "Funny";
|
||||||
|
|
||||||
|
// Funny slot
|
||||||
|
[DataField] public ProtoId<ItemSizePrototype> Size = "Small";
|
||||||
|
[DataField] public ProtoId<ItemSizePrototype> MaxSize = "Normal";
|
||||||
|
|
||||||
|
[ViewVariables] public ContainerSlot Slot = default!;
|
||||||
|
}
|
||||||
27
Content.Shared/_Amour/Hole/HoleSolutionComponent.cs
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
using Content.Shared.Chemistry.Components;
|
||||||
|
using Content.Shared.Chemistry.Reagent;
|
||||||
|
using Robust.Shared.Prototypes;
|
||||||
|
|
||||||
|
namespace Content.Shared._Amour.Hole;
|
||||||
|
|
||||||
|
[RegisterComponent]
|
||||||
|
public sealed partial class HoleSolutionComponent : Component
|
||||||
|
{
|
||||||
|
// Funny cunt
|
||||||
|
[DataField] public ProtoId<ReagentPrototype> SubstanceName = "JuiceOrange";
|
||||||
|
|
||||||
|
[ViewVariables] public Solution Solution = default!;
|
||||||
|
[ViewVariables]
|
||||||
|
public TimeSpan NextGenerationTime = TimeSpan.Zero;
|
||||||
|
|
||||||
|
[DataField]
|
||||||
|
public TimeSpan Duration = TimeSpan.FromSeconds(1);
|
||||||
|
|
||||||
|
[DataField]
|
||||||
|
public float SubstanceHoldCount = 5;
|
||||||
|
|
||||||
|
[DataField]
|
||||||
|
public float SubstanceGenerationCount = 0.25f;
|
||||||
|
|
||||||
|
public static string SlotName = "Funny";
|
||||||
|
}
|
||||||
9
Content.Shared/_Amour/Hole/HoleSystem.cs
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
using Robust.Shared.Containers;
|
||||||
|
using Robust.Shared.Timing;
|
||||||
|
|
||||||
|
namespace Content.Shared._Amour.Hole;
|
||||||
|
|
||||||
|
public abstract class SharedHoleSystem : EntitySystem
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
@@ -43,6 +43,11 @@
|
|||||||
- type: MovementSpeedModifier
|
- type: MovementSpeedModifier
|
||||||
- type: Polymorphable
|
- type: Polymorphable
|
||||||
- type: StatusIcon
|
- type: StatusIcon
|
||||||
|
- type: HoleContainer
|
||||||
|
holePrototypes:
|
||||||
|
- BaseDick
|
||||||
|
- BaseBreast
|
||||||
|
- BaseButt
|
||||||
|
|
||||||
# Used for mobs that have health and can take damage.
|
# Used for mobs that have health and can take damage.
|
||||||
- type: entity
|
- type: entity
|
||||||
|
|||||||
58
Resources/Prototypes/_Amour/Entities/Holes/genitals.yml
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
- type: entity
|
||||||
|
id: BaseDick
|
||||||
|
name: Чилен
|
||||||
|
components:
|
||||||
|
- type: Hole
|
||||||
|
holeType: Father
|
||||||
|
frontLayer:
|
||||||
|
- state: penis_thick_4_1_FRONT
|
||||||
|
sprite: _Amour/Genitals/penis.rsi
|
||||||
|
behindLayer:
|
||||||
|
- state: penis_thick_4_1_BEHIND
|
||||||
|
sprite: _Amour/Genitals/penis.rsi
|
||||||
|
- type: HoleSolution
|
||||||
|
- type: HoleInventory
|
||||||
|
size: Tiny
|
||||||
|
maxSize: Small
|
||||||
|
|
||||||
|
- type: entity
|
||||||
|
id: BaseVagina
|
||||||
|
name: Пизда
|
||||||
|
components:
|
||||||
|
- type: Hole
|
||||||
|
holeType: Mother
|
||||||
|
- type: HoleSolution
|
||||||
|
- type: HoleInventory
|
||||||
|
|
||||||
|
- type: entity
|
||||||
|
id: BaseButt
|
||||||
|
name: Очко
|
||||||
|
components:
|
||||||
|
- type: Hole
|
||||||
|
holeType: Mother
|
||||||
|
frontLayer:
|
||||||
|
- state: butt_pair_3_s_0_FRONT
|
||||||
|
sprite: _Amour/Genitals/butt.rsi
|
||||||
|
- type: HoleInventory
|
||||||
|
|
||||||
|
- type: entity
|
||||||
|
id: BaseBreast
|
||||||
|
name: Сиськи
|
||||||
|
components:
|
||||||
|
- type: Hole
|
||||||
|
frontLayer:
|
||||||
|
- state: breasts_pair_i_s_0_FRONT
|
||||||
|
sprite: _Amour/Genitals/breasts.rsi
|
||||||
|
behindLayer:
|
||||||
|
- state: breasts_pair_i_s_0_BEHIND
|
||||||
|
sprite: _Amour/Genitals/breasts.rsi
|
||||||
|
- type: HoleInventory
|
||||||
|
|
||||||
|
- type: entity
|
||||||
|
id: BaseTesticles
|
||||||
|
name: Яички
|
||||||
|
components:
|
||||||
|
- type: Hole
|
||||||
|
frontLayer:
|
||||||
|
- state: testicles_single_5_s_1_FRONT
|
||||||
|
sprite: _Amour/Genitals/testicles.rsi
|
||||||
BIN
Resources/Textures/_Amour/Alarm/arousal.rsi/arousal.png
Normal file
|
After Width: | Height: | Size: 383 B |
BIN
Resources/Textures/_Amour/Alarm/arousal.rsi/arousal0.png
Normal file
|
After Width: | Height: | Size: 417 B |
BIN
Resources/Textures/_Amour/Alarm/arousal.rsi/arousal10.png
Normal file
|
After Width: | Height: | Size: 417 B |
BIN
Resources/Textures/_Amour/Alarm/arousal.rsi/arousal100.png
Normal file
|
After Width: | Height: | Size: 383 B |
BIN
Resources/Textures/_Amour/Alarm/arousal.rsi/arousal20.png
Normal file
|
After Width: | Height: | Size: 417 B |
BIN
Resources/Textures/_Amour/Alarm/arousal.rsi/arousal30.png
Normal file
|
After Width: | Height: | Size: 417 B |
BIN
Resources/Textures/_Amour/Alarm/arousal.rsi/arousal40.png
Normal file
|
After Width: | Height: | Size: 422 B |
BIN
Resources/Textures/_Amour/Alarm/arousal.rsi/arousal50.png
Normal file
|
After Width: | Height: | Size: 422 B |
BIN
Resources/Textures/_Amour/Alarm/arousal.rsi/arousal60.png
Normal file
|
After Width: | Height: | Size: 422 B |
BIN
Resources/Textures/_Amour/Alarm/arousal.rsi/arousal70.png
Normal file
|
After Width: | Height: | Size: 445 B |
BIN
Resources/Textures/_Amour/Alarm/arousal.rsi/arousal80.png
Normal file
|
After Width: | Height: | Size: 445 B |
BIN
Resources/Textures/_Amour/Alarm/arousal.rsi/arousal90.png
Normal file
|
After Width: | Height: | Size: 383 B |
47
Resources/Textures/_Amour/Alarm/arousal.rsi/meta.json
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
{
|
||||||
|
"version": 1,
|
||||||
|
"license": "CC-BY-SA-4.0",
|
||||||
|
"copyright": "fuck",
|
||||||
|
"size": {
|
||||||
|
"x": 32,
|
||||||
|
"y": 32
|
||||||
|
},
|
||||||
|
"states": [
|
||||||
|
{
|
||||||
|
"name": "arousal0"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "arousal10"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "arousal20"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "arousal30"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "arousal40"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "arousal50"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "arousal60"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "arousal70"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "arousal80"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "arousal90"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "arousal100"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "arousal"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
After Width: | Height: | Size: 370 B |
|
After Width: | Height: | Size: 370 B |
|
After Width: | Height: | Size: 378 B |
|
After Width: | Height: | Size: 384 B |
|
After Width: | Height: | Size: 403 B |
|
After Width: | Height: | Size: 403 B |
|
After Width: | Height: | Size: 399 B |
|
After Width: | Height: | Size: 418 B |
|
After Width: | Height: | Size: 461 B |
|
After Width: | Height: | Size: 461 B |
|
After Width: | Height: | Size: 482 B |
|
After Width: | Height: | Size: 505 B |
|
After Width: | Height: | Size: 216 B |
|
After Width: | Height: | Size: 464 B |
|
After Width: | Height: | Size: 216 B |
|
After Width: | Height: | Size: 464 B |
|
After Width: | Height: | Size: 224 B |
|
After Width: | Height: | Size: 512 B |
|
After Width: | Height: | Size: 224 B |
|
After Width: | Height: | Size: 512 B |
|
After Width: | Height: | Size: 228 B |
|
After Width: | Height: | Size: 511 B |
|
After Width: | Height: | Size: 228 B |
|
After Width: | Height: | Size: 511 B |
|
After Width: | Height: | Size: 233 B |
|
After Width: | Height: | Size: 560 B |
|
After Width: | Height: | Size: 233 B |
|
After Width: | Height: | Size: 560 B |
|
After Width: | Height: | Size: 228 B |
|
After Width: | Height: | Size: 526 B |
|
After Width: | Height: | Size: 526 B |
|
After Width: | Height: | Size: 233 B |
|
After Width: | Height: | Size: 552 B |
|
After Width: | Height: | Size: 552 B |
|
After Width: | Height: | Size: 228 B |
|
After Width: | Height: | Size: 523 B |
|
After Width: | Height: | Size: 523 B |
|
After Width: | Height: | Size: 233 B |
|
After Width: | Height: | Size: 556 B |
|
After Width: | Height: | Size: 556 B |
|
After Width: | Height: | Size: 415 B |
|
After Width: | Height: | Size: 851 B |
|
After Width: | Height: | Size: 415 B |
|
After Width: | Height: | Size: 851 B |
|
After Width: | Height: | Size: 449 B |
|
After Width: | Height: | Size: 870 B |
|
After Width: | Height: | Size: 449 B |
|
After Width: | Height: | Size: 870 B |
|
After Width: | Height: | Size: 228 B |
|
After Width: | Height: | Size: 565 B |
|
After Width: | Height: | Size: 565 B |
|
After Width: | Height: | Size: 233 B |
|
After Width: | Height: | Size: 596 B |
|
After Width: | Height: | Size: 596 B |
|
After Width: | Height: | Size: 228 B |
|
After Width: | Height: | Size: 694 B |
|
After Width: | Height: | Size: 694 B |
|
After Width: | Height: | Size: 233 B |
|
After Width: | Height: | Size: 635 B |
|
After Width: | Height: | Size: 635 B |
|
After Width: | Height: | Size: 228 B |
|
After Width: | Height: | Size: 543 B |
|
After Width: | Height: | Size: 543 B |
|
After Width: | Height: | Size: 233 B |
|
After Width: | Height: | Size: 654 B |
|
After Width: | Height: | Size: 654 B |
|
After Width: | Height: | Size: 487 B |
|
After Width: | Height: | Size: 845 B |
|
After Width: | Height: | Size: 487 B |
|
After Width: | Height: | Size: 845 B |
|
After Width: | Height: | Size: 507 B |
|
After Width: | Height: | Size: 884 B |
|
After Width: | Height: | Size: 507 B |
|
After Width: | Height: | Size: 884 B |
|
After Width: | Height: | Size: 228 B |