- 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: Polymorphable
|
||||
- type: StatusIcon
|
||||
- type: HoleContainer
|
||||
holePrototypes:
|
||||
- BaseDick
|
||||
- BaseBreast
|
||||
- BaseButt
|
||||
|
||||
# Used for mobs that have health and can take damage.
|
||||
- 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 |