- add: change genitals on appearance

This commit is contained in:
2024-02-16 13:22:43 +03:00
parent c9396e7b5a
commit 52628d0393
26 changed files with 5060 additions and 133 deletions

View File

@@ -1,3 +1,4 @@
using Content.Client._Amour.Hole;
using Content.Shared.Humanoid;
using Content.Shared.Humanoid.Markings;
using Content.Shared.Humanoid.Prototypes;
@@ -12,6 +13,7 @@ public sealed class HumanoidAppearanceSystem : SharedHumanoidAppearanceSystem
{
[Dependency] private readonly IPrototypeManager _prototypeManager = default!;
[Dependency] private readonly MarkingManager _markingManager = default!;
[Dependency] private readonly HoleSystem _holeSystem = default!;
public override void Initialize()
{
@@ -195,6 +197,13 @@ public sealed class HumanoidAppearanceSystem : SharedHumanoidAppearanceSystem
humanoid.SkinColor = profile.Appearance.SkinColor;
humanoid.EyeColor = profile.Appearance.EyeColor;
//AMOUR
foreach (var genitals in profile.Appearance.Genitals)
{
Log.Debug("CHLEN! " + genitals.GenitalId);
_holeSystem.AddHole(uid,genitals.GenitalId,genitals.Color);
}
UpdateSprite(humanoid, Comp<SpriteComponent>(uid));
}

View File

@@ -2,7 +2,8 @@
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:prefUi="clr-namespace:Content.Client.Preferences.UI"
xmlns:humanoid="clr-namespace:Content.Client.Humanoid"
xmlns:cc="clr-namespace:Content.Client.Administration.UI.CustomControls">
xmlns:cc="clr-namespace:Content.Client.Administration.UI.CustomControls"
xmlns:humanoidProfileEditorExt="clr-namespace:Content.Client._Amour.HumanoidProfileEditorExt">
<BoxContainer Orientation="Horizontal">
<!-- Left side -->
<BoxContainer Orientation="Vertical" Margin="10 10 10 10">
@@ -141,6 +142,8 @@
<Label Text="{Loc 'humanoid-profile-editor-eyes-label'}" />
<humanoid:EyeColorPicker Name="CEyeColorPicker" />
</BoxContainer>
<!-- AMOUR -->
<humanoidProfileEditorExt:GenitalBoxView Name="GenitalBoxView"/>
</BoxContainer>
</ScrollContainer>
</BoxContainer>

View File

@@ -211,6 +211,12 @@ namespace Content.Client.Preferences.UI
#endregion
//TTS-End
//AMOUR START
#region Genitals
InitializeGenitals();
#endregion
//AMOUR END
#region Species
//WD EDIT
@@ -1239,6 +1245,10 @@ namespace Content.Client.Preferences.UI
UpdateTTSVoicesControls();
//WD-EDIT
//Amour edit
UpdateGenitalsControls();
//Amour edit
_preferenceUnavailableButton.SelectId((int) Profile.PreferenceUnavailable);
}

View File

@@ -3,7 +3,6 @@ using Content.Shared.Humanoid;
using Robust.Client.GameObjects;
using Robust.Shared.Containers;
using Robust.Shared.Reflection;
using Robust.Shared.Serialization.Manager;
namespace Content.Client._Amour.Hole;
@@ -35,10 +34,6 @@ public sealed class HoleSystem : SharedHoleSystem
return;
UpdateVisuals(uid);
if(args.Container != component.Slot)
return;
//UpdateVisual(uid,args.Entity);
}
private void UpdateVisuals(Entity<HoleContainerComponent?> entity)
@@ -78,8 +73,6 @@ public sealed class HoleSystem : SharedHoleSystem
spriteComp.LayerSetData(GenitalVisualLayers.DickFront, layer);
spriteComp.LayerSetVisible(GenitalVisualLayers.DickFront,true);
}
return;
}

View File

@@ -0,0 +1,8 @@
<humanoidProfileEditorExt:GenitalBoxView
xmlns="https://spacestation14.io"
xmlns:humanoidProfileEditorExt="clr-namespace:Content.Client._Amour.HumanoidProfileEditorExt">
<BoxContainer Orientation="Vertical">
<Label Text="{Loc 'genitals-group'}"/>
<BoxContainer Name="Container" Orientation="Vertical"></BoxContainer>
</BoxContainer>
</humanoidProfileEditorExt:GenitalBoxView>

View File

@@ -0,0 +1,25 @@
using Robust.Client.AutoGenerated;
using Robust.Client.UserInterface;
using Robust.Client.UserInterface.XAML;
namespace Content.Client._Amour.HumanoidProfileEditorExt;
[GenerateTypedNameReferences]
public sealed partial class GenitalBoxView : Control
{
public GenitalBoxView()
{
RobustXamlLoader.Load(this);
}
public void AddChild(Control control)
{
Container.AddChild(control);
}
public void ClearChilds()
{
Container.RemoveAllChildren();
}
}

View File

@@ -0,0 +1,18 @@
<controls:GenitalController
xmlns="https://spacestation14.io"
xmlns:controls="clr-namespace:Content.Client._Amour.HumanoidProfileEditorExt">
<BoxContainer Orientation="Vertical" Margin="15 15 15 15">
<Label Text="Meow" Name="Label"/>
<BoxContainer Margin="15 15 15 15">
<Button Text="Назад" Name="BackButton"/>
<LineEdit Name="Input" MinWidth="45" SetWidth="45"/>
<Label Text="/"/>
<Label Text="0" Name="Count"/>
<Button Text="Вперед" Name="GoButton"/>
<Label Name="GenitalName"/>
</BoxContainer>
<CheckBox Text="{Loc 'genitals-same-color'}" Name="CheckBox"/>
<ColorSelectorSliders Name="Color"/>
</BoxContainer>
</controls:GenitalController>

View File

@@ -0,0 +1,153 @@
using System.Linq;
using Content.Shared._Amour.Hole;
using Robust.Client.AutoGenerated;
using Robust.Client.GameObjects;
using Robust.Client.Graphics;
using Robust.Client.UserInterface;
using Robust.Client.UserInterface.Controls;
using Robust.Client.UserInterface.XAML;
using Robust.Shared.Prototypes;
namespace Content.Client._Amour.HumanoidProfileEditorExt;
[GenerateTypedNameReferences]
public sealed partial class GenitalController : Control
{
[Dependency] private readonly IPrototypeManager _prototypeManager = default!;
[Dependency] private readonly IEntityManager _entityManager = default!;
[Dependency] private readonly IComponentFactory _componentFactory = default!;
public List<GenitalOption> GenitalOptions = new List<GenitalOption>();
private int _selectedId = 0;
public int SelectedId
{
get => _selectedId;
set
{
if(value < 0 || value > GenitalOptions.Count)
return;
_selectedId = value;
Input.Text = _selectedId.ToString();
RequireChange();
}
}
private GenitalsGroupPrototype? _genitalsCollectionPrototype;
public GenitalsGroupPrototype? GenitalsCollectionPrototype
{
get => _genitalsCollectionPrototype;
set
{
_genitalsCollectionPrototype = value;
Update();
}
}
public event Action<GenitalChangedEventArgs>? InChange;
public GenitalController()
{
RobustXamlLoader.Load(this);
IoCManager.InjectDependencies(this);
CheckBox.OnPressed += CheckBoxOnOnPressed;
Color.OnColorChanged += OnColorChanged;
BackButton.OnPressed += _ => SelectedId -= 1;
GoButton.OnPressed += _ => SelectedId += 1;
Input.OnTextChanged += args =>
{
if (int.TryParse(args.Text, out var i))
SelectedId = i;
};
}
private void OnColorChanged(Color obj)
{
if(!CheckBox.Pressed)
RequireChange();
}
private void CheckBoxOnOnPressed(BaseButton.ButtonEventArgs obj)
{
RequireChange();
}
private void RequireChange()
{
if(_genitalsCollectionPrototype is null)
return;
string? selectedGenital = null;
if (SelectedId != 0)
{
selectedGenital = GenitalOptions[SelectedId - 1].Genital;
GenitalName.Text = selectedGenital;
}
else
{
GenitalName.Text = Loc.GetString("genitals-none");
}
Color? color = null;
if (!CheckBox.Pressed)
color = Color.Color;
InChange?.Invoke(new GenitalChangedEventArgs(selectedGenital,color,_genitalsCollectionPrototype.ID));
}
public void Update()
{
GenitalOptions.Clear();
SelectedId = 0;
if(_genitalsCollectionPrototype is null)
return;
Label.Text = Loc.GetString("genitals-group-" + _genitalsCollectionPrototype.ID.ToLower());
Count.Text = _genitalsCollectionPrototype.Prototypes.Count.ToString();
foreach (var entityProtoId in _genitalsCollectionPrototype.Prototypes)
{
if (!_prototypeManager.TryIndex(entityProtoId, out var entityPrototype))
{
Logger.Error("PIZDA NOT FOUND " + entityProtoId);
continue;
}
GenitalOptions.Add(new GenitalOption(entityPrototype.ID,null));
}
}
}
public sealed class GenitalChangedEventArgs
{
public string? GenitalId;
public Color? Color;
public string Group;
public GenitalChangedEventArgs(string? genitalId, Color? color, string group)
{
GenitalId = genitalId;
Color = color;
Group = group;
}
}
public sealed class GenitalOption
{
public string Genital;
public Texture? Texture;
public GenitalOption(string genital, Texture? texture)
{
Genital = genital;
Texture = texture;
}
}

View File

@@ -0,0 +1,68 @@
using System.Linq;
using Content.Client._Amour.HumanoidProfileEditorExt;
using Content.Shared._Amour.Hole;
namespace Content.Client.Preferences.UI;
public sealed partial class HumanoidProfileEditor
{
private Dictionary<string, Genital> _genitals = new();
private void InitializeGenitals()
{
}
private void UpdateGenitalsControls()
{
if (Profile is null)
return;
_genitals.Clear();
GenitalBoxView.ClearChilds();
Logger.Debug(Profile.Appearance.Genitals.Count + "<<");
foreach (var prototype in _prototypeManager.EnumeratePrototypes<GenitalsGroupPrototype>())
{
var selected = 0;
foreach (var genital in Profile.Appearance.Genitals.Where(genital => prototype.Prototypes.Contains(genital.GenitalId)))
{
selected = prototype.Prototypes.IndexOf(genital.GenitalId);
}
var controller = new GenitalController();
controller.GenitalsCollectionPrototype = prototype;
controller.InChange += ControllerOnInChange;
controller.SelectedId = selected;
GenitalBoxView.AddChild(controller);
}
}
private void ControllerOnInChange(GenitalChangedEventArgs obj)
{
SelectGenital(obj.GenitalId,obj.Group,obj.Color);
}
private void SelectGenital(string? id, string group,Color? color)
{
if(Profile is null)
return;
if (id is null)
{
_genitals.Remove(group);
}
else
{
_genitals[group] = new Genital(id, color);
}
Profile = Profile.WithCharacterAppearance(Profile.Appearance.WithGenitals(_genitals.Values.ToList()));
ShowClothes.Pressed = false;
IsDirty = true;
}
}

View File

@@ -56,7 +56,7 @@ namespace Content.IntegrationTests.Tests.Preferences
Color.Aquamarine,
Color.Azure,
Color.Beige,
new ()
new (), new() //AMOUR
),
ClothingPreference.Jumpskirt,
BackpackPreference.Backpack,

View File

@@ -7,6 +7,7 @@ using System.Threading;
using System.Threading.Tasks;
using Content.Server.Administration.Logs;
using Content.Server.Administration.Managers;
using Content.Shared._Amour.Hole;
using Content.Shared.Administration.Logs;
using Content.Shared.Database;
using Content.Shared.Humanoid;
@@ -232,7 +233,7 @@ namespace Content.Server.Database
Color.FromHex(profile.FacialHairColor),
Color.FromHex(profile.EyeColor),
Color.FromHex(profile.SkinColor),
markings
markings, new List<Genital>() //TEMP
),
clothing,
backpack,

View File

@@ -1,4 +1,5 @@
using System.Linq;
using Content.Server._Amour.Hole;
using Content.Shared.Examine;
using Content.Shared.Humanoid;
using Content.Shared.Humanoid.Markings;
@@ -15,6 +16,7 @@ public sealed partial class HumanoidAppearanceSystem : SharedHumanoidAppearanceS
{
[Dependency] private readonly MarkingManager _markingManager = default!;
[Dependency] private readonly IPrototypeManager _prototypeManager = default!;
[Dependency] private readonly HoleSystem _holeSystem = default!;
public override void Initialize()
{
@@ -116,6 +118,13 @@ public sealed partial class HumanoidAppearanceSystem : SharedHumanoidAppearanceS
humanoid.Age = profile.Age;
//AMOUR
foreach (var genitals in profile.Appearance.Genitals)
{
Log.Debug("CHLEN! " + genitals.GenitalId);
_holeSystem.AddHole(uid,genitals.GenitalId,genitals.Color);
}
Dirty(humanoid);
}

View File

@@ -1,4 +1,5 @@
using System.Linq;
using Content.Shared._Amour.Hole;
using Content.Shared.Humanoid.Markings;
using Content.Shared.Humanoid.Prototypes;
using Robust.Shared.Prototypes;
@@ -17,7 +18,7 @@ namespace Content.Shared.Humanoid
Color facialHairColor,
Color eyeColor,
Color skinColor,
List<Marking> markings)
List<Marking> markings, List<Genital> genitals)
{
HairStyleId = hairStyleId;
HairColor = ClampColor(hairColor);
@@ -26,6 +27,7 @@ namespace Content.Shared.Humanoid
EyeColor = ClampColor(eyeColor);
SkinColor = ClampColor(skinColor);
Markings = markings;
Genitals = genitals;
}
[DataField("hair")]
@@ -49,50 +51,58 @@ namespace Content.Shared.Humanoid
[DataField("markings")]
public List<Marking> Markings { get; private set; }
[DataField("genitals")]
public List<Genital> Genitals { get; private set; }//AMOUR
public HumanoidCharacterAppearance WithHairStyleName(string newName)
{
return new(newName, HairColor, FacialHairStyleId, FacialHairColor, EyeColor, SkinColor, Markings);
return new(newName, HairColor, FacialHairStyleId, FacialHairColor, EyeColor, SkinColor, Markings, Genitals);
}
public HumanoidCharacterAppearance WithHairColor(Color newColor)
{
return new(HairStyleId, newColor, FacialHairStyleId, FacialHairColor, EyeColor, SkinColor, Markings);
return new(HairStyleId, newColor, FacialHairStyleId, FacialHairColor, EyeColor, SkinColor, Markings , Genitals);
}
public HumanoidCharacterAppearance WithFacialHairStyleName(string newName)
{
return new(HairStyleId, HairColor, newName, FacialHairColor, EyeColor, SkinColor, Markings);
return new(HairStyleId, HairColor, newName, FacialHairColor, EyeColor, SkinColor, Markings , Genitals);
}
public HumanoidCharacterAppearance WithFacialHairColor(Color newColor)
{
return new(HairStyleId, HairColor, FacialHairStyleId, newColor, EyeColor, SkinColor, Markings);
return new(HairStyleId, HairColor, FacialHairStyleId, newColor, EyeColor, SkinColor, Markings , Genitals);
}
public HumanoidCharacterAppearance WithEyeColor(Color newColor)
{
return new(HairStyleId, HairColor, FacialHairStyleId, FacialHairColor, newColor, SkinColor, Markings);
return new(HairStyleId, HairColor, FacialHairStyleId, FacialHairColor, newColor, SkinColor, Markings , Genitals);
}
public HumanoidCharacterAppearance WithSkinColor(Color newColor)
{
return new(HairStyleId, HairColor, FacialHairStyleId, FacialHairColor, EyeColor, newColor, Markings);
return new(HairStyleId, HairColor, FacialHairStyleId, FacialHairColor, EyeColor, newColor, Markings , Genitals);
}
public HumanoidCharacterAppearance WithMarkings(List<Marking> newMarkings)
{
return new(HairStyleId, HairColor, FacialHairStyleId, FacialHairColor, EyeColor, SkinColor, newMarkings);
return new(HairStyleId, HairColor, FacialHairStyleId, FacialHairColor, EyeColor, SkinColor, newMarkings , Genitals);
}
public HumanoidCharacterAppearance() : this(
public HumanoidCharacterAppearance WithGenitals(List<Genital> genitals)
{
return new(HairStyleId, HairColor, FacialHairStyleId, FacialHairColor, EyeColor, SkinColor, Markings,
genitals);
}
public HumanoidCharacterAppearance(List<Genital> genitals) : this(
HairStyles.DefaultHairStyle,
Color.Black,
HairStyles.DefaultFacialHairStyle,
Color.Black,
Color.Black,
Humanoid.SkinColor.ValidHumanSkinTone,
new ()
)
new (), genitals)
{
}
@@ -114,7 +124,7 @@ namespace Content.Shared.Humanoid
Color.Black,
Color.Black,
skinColor,
new ()
new (), new()
);
}
@@ -175,7 +185,7 @@ namespace Content.Shared.Humanoid
newSkinColor = Humanoid.SkinColor.ValidTintedHuesSkinTone(newSkinColor);
}
return new HumanoidCharacterAppearance(newHairStyle, newHairColor, newFacialHairStyle, newHairColor, newEyeColor, newSkinColor, new ());
return new HumanoidCharacterAppearance(newHairStyle, newHairColor, newFacialHairStyle, newHairColor, newEyeColor, newSkinColor, new (), new());
float RandomizeColor(float channel)
{
@@ -228,6 +238,15 @@ namespace Content.Shared.Humanoid
}
// WD-EDIT
// AMOUR EDIT
var genitals = new List<Genital>();
foreach (var genital in appearance.Genitals)
{
if(proto.TryIndex(genital.GenitalId,out _))
genitals.Add(genital);
}
// END AMOUR EDIT
var markingSet = new MarkingSet();
var skinColor = appearance.SkinColor;
if (!proto.TryIndex(species, out SpeciesPrototype? speciesProto))
@@ -239,7 +258,7 @@ namespace Content.Shared.Humanoid
facialHairColor,
eyeColor,
skinColor,
markingSet.GetForwardEnumerator().ToList());
markingSet.GetForwardEnumerator().ToList(),genitals);
}
markingSet = new MarkingSet(appearance.Markings, speciesProto.MarkingPoints, markingManager, proto);
@@ -263,7 +282,7 @@ namespace Content.Shared.Humanoid
facialHairColor,
eyeColor,
skinColor,
markingSet.GetForwardEnumerator().ToList());
markingSet.GetForwardEnumerator().ToList(), genitals);
}
public bool MemberwiseEquals(ICharacterAppearance maybeOther)

View File

@@ -0,0 +1,19 @@
using Robust.Shared.Prototypes;
using Robust.Shared.Serialization;
namespace Content.Shared._Amour.Hole;
[Serializable, NetSerializable, DataDefinition]
public sealed partial class Genital
{
public Genital(EntProtoId genitalId, Color? color)
{
GenitalId = genitalId;
Color = color;
}
[DataField]
public EntProtoId GenitalId { get; private set; }
[DataField]
public Color? Color { get; private set; }
}

View File

@@ -0,0 +1,10 @@
using Robust.Shared.Prototypes;
namespace Content.Shared._Amour.Hole;
[Prototype("genitalsGroup")]
public sealed class GenitalsGroupPrototype : IPrototype
{
[IdDataField] public string ID { get; private set; } = default!;
[DataField(required:true)] public List<EntProtoId> Prototypes = default!;
}

View File

@@ -6,6 +6,7 @@ namespace Content.Shared._Amour.Hole;
public abstract partial class SharedHoleSystem
{
[Dependency] private readonly SharedContainerSystem _containerSystem = default!;
[Dependency] private readonly IPrototypeManager _prototypeManager = default!;
public void InitializeContainer()
{
SubscribeLocalEvent<HoleContainerComponent,ComponentInit>(OnContainerInit);
@@ -20,13 +21,26 @@ public abstract partial class SharedHoleSystem
}
}
public void AddHole(Entity<HoleContainerComponent?> entity, EntProtoId protoId)
public void AddHole(Entity<HoleContainerComponent?> entity, EntProtoId protoId, Color? color = null)
{
if (!Resolve(entity.Owner, ref entity.Comp))
if (!_prototypeManager.TryIndex<EntityPrototype>(protoId, out _))
{
Log.Error(protoId + " NOT EXIST YOU BASTARD!");
return;
//entity.Comp = EnsureComp<HoleContainerComponent>(entity.Owner);
}
if (!Resolve(entity.Owner, ref entity.Comp,logMissing:false))
entity.Comp = EnsureComp<HoleContainerComponent>(entity.Owner);
var spawned = Spawn(protoId);
if (!TryComp<HoleComponent>(spawned, out var component))
{
QueueDel(spawned);
return;
}
Log.Debug("ADDED " + protoId);
_containerSystem.Insert(Spawn(protoId), entity.Comp.Slot);
component.Layers[0].Color = color;
_containerSystem.Insert(spawned, entity.Comp.Slot);
}
}

View File

@@ -0,0 +1,9 @@
genitals-same-color = Принять цвет кожи
genitals-none = отсутствует
genitals-group = Настройка приколов
genitals-group-penis = Промежности
genitals-group-testicles = Яйца
genitals-group-butt = Попа
genitals-group-breast = Сисечки

View File

@@ -361,6 +361,13 @@
noRot: true
# TODO BODY Turn these into individual body parts?
layers:
# START AMOUR EDIT
- map: [ "enum.GenitalVisualLayers.ButtBehind" ]
- map: [ "enum.GenitalVisualLayers.BreastBehind" ]
- map: [ "enum.GenitalVisualLayers.VaginaBehind" ]
- map: [ "enum.GenitalVisualLayers.TesticlesBehind" ]
- map: [ "enum.GenitalVisualLayers.DickBehind" ]
# END AMOUR EDIT
- map: [ "enum.HumanoidVisualLayers.Chest" ]
- map: [ "enum.HumanoidVisualLayers.Head" ]
- map: [ "enum.HumanoidVisualLayers.Snout" ]
@@ -385,6 +392,13 @@
- map: ["jumpsuit"]
- map: ["enum.HumanoidVisualLayers.LHand"]
- map: ["enum.HumanoidVisualLayers.RHand"]
# START AMOUR EDIT
- map: [ "enum.GenitalVisualLayers.ButtFront" ]
- map: [ "enum.GenitalVisualLayers.BreastFront" ]
- map: [ "enum.GenitalVisualLayers.VaginaFront" ]
- map: [ "enum.GenitalVisualLayers.TesticlesFront" ]
- map: [ "enum.GenitalVisualLayers.DickFront" ]
# END AMOUR EDIT
- map: ["enum.HumanoidVisualLayers.Handcuffs"]
color: "#ffffff"
sprite: Objects/Misc/handcuffs.rsi

View File

@@ -0,0 +1,101 @@
- type: entity
id: BaseDick
abstract: true
name: Член
components:
- type: Hole
holeType: Father
holeName: Dick
holeNotVisibleIn:
- suitstorage
- outerClothing
- jumpsuit
- underwearb
sprite: _Amour/Genitals/penis.rsi
prefixes:
- layer: "enum.GenitalVisualLayers.DickBehind"
prefix: "_BEHIND"
- layer: "enum.GenitalVisualLayers.DickFront"
prefix: "_FRONT"
- type: HoleSolution
- type: HoleInventory
size: Tiny
maxSize: Small
- type: entity
id: BaseVagina
abstract: true
name: Пизда
components:
- type: Hole
holeType: Mother
holeName: Vagina
holeNotVisibleIn:
- suitstorage
- outerClothing
- jumpsuit
- underwearb
sprite: _Amour/Genitals/vagina.rsi
prefixes:
- layer: "enum.GenitalVisualLayers.DickFront" #Hmm
prefix: "_FRONT"
- type: HoleSolution
- type: HoleInventory
- type: entity
id: BaseButt
abstract: true
name: Попа
components:
- type: Hole
holeType: Mother
holeName: Anus
holeNotVisibleIn:
- suitstorage
- outerClothing
- jumpsuit
- underwearb
sprite: _Amour/Genitals/butt.rsi
prefixes:
- layer: "enum.GenitalVisualLayers.ButtFront"
prefix: "_FRONT"
- type: HoleInventory
- type: entity
id: BaseBreast
abstract: true
name: Сиськи
components:
- type: Hole
holeName: Breast
holeNotVisibleIn:
- suitstorage
- outerClothing
- jumpsuit
- underweart
sprite: _Amour/Genitals/breasts.rsi
prefixes:
- layer: "enum.GenitalVisualLayers.BreastBehind"
prefix: "_BEHIND"
- layer: "enum.GenitalVisualLayers.BreastFront"
prefix: "_FRONT"
- type: HoleSolution
- type: HoleInventory
- type: entity
id: BaseTesticles
name: Яички
components:
- type: Hole
holeName: Dick
holeNotVisibleIn:
- suitstorage
- outerClothing
- jumpsuit
- underwearb
sprite: _Amour/Genitals/testicles.rsi
prefixes:
- layer: "enum.GenitalVisualLayers.TesticlesBehind"
prefix: "_BEHIND"
- layer: "enum.GenitalVisualLayers.TesticlesFront"
prefix: "_FRONT"

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,96 @@
- type: entity
parent: BaseButt
id: ButtPair00
components:
- type: Hole
layers:
- state: butt_pair_0_0
- type: entity
parent: BaseButt
id: ButtPair0S0
components:
- type: Hole
layers:
- state: butt_pair_0_s_0
- type: entity
parent: BaseButt
id: ButtPair10
components:
- type: Hole
layers:
- state: butt_pair_1_0
- type: entity
parent: BaseButt
id: ButtPair1S0
components:
- type: Hole
layers:
- state: butt_pair_1_s_0
- type: entity
parent: BaseButt
id: ButtPair20
components:
- type: Hole
layers:
- state: butt_pair_2_0
- type: entity
parent: BaseButt
id: ButtPair2S0
components:
- type: Hole
layers:
- state: butt_pair_2_s_0
- type: entity
parent: BaseButt
id: ButtPair30
components:
- type: Hole
layers:
- state: butt_pair_3_0
- type: entity
parent: BaseButt
id: ButtPair3S0
components:
- type: Hole
layers:
- state: butt_pair_3_s_0
- type: entity
parent: BaseButt
id: ButtPair40
components:
- type: Hole
layers:
- state: butt_pair_4_0
- type: entity
parent: BaseButt
id: ButtPair4S0
components:
- type: Hole
layers:
- state: butt_pair_4_s_0
- type: entity
parent: BaseButt
id: ButtPair50
components:
- type: Hole
layers:
- state: butt_pair_5_0
- type: entity
parent: BaseButt
id: ButtPair5S0
components:
- type: Hole
layers:
- state: butt_pair_5_s_0

View File

@@ -1,108 +1,4 @@
- type: entity
id: BaseDick
abstract: true
name: Чилен
components:
- type: Hole
holeType: Father
holeName: Dick
holeNotVisibleIn:
- suitstorage
- outerClothing
- jumpsuit
- underwearb
sprite: _Amour/Genitals/penis.rsi
prefixes:
- layer: "enum.GenitalVisualLayers.DickBehind"
prefix: "_BEHIND"
- layer: "enum.GenitalVisualLayers.DickFront"
prefix: "_FRONT"
- type: HoleSolution
- type: HoleInventory
size: Tiny
maxSize: Small
- type: entity
id: BaseVagina
abstract: true
name: Пизда
components:
- type: Hole
holeType: Mother
holeName: Vagina
holeNotVisibleIn:
- suitstorage
- outerClothing
- jumpsuit
- underwearb
sprite: _Amour/Genitals/butt.rsi
prefixes:
- layer: "enum.GenitalVisualLayers.VaginaBehind"
prefix: "_BEHIND"
- layer: "enum.GenitalVisualLayers.VaginaFront"
prefix: "_FRONT"
- type: HoleSolution
- type: HoleInventory
- type: entity
id: BaseButt
abstract: true
name: Очко
components:
- type: Hole
holeType: Mother
holeName: Anus
holeNotVisibleIn:
- suitstorage
- outerClothing
- jumpsuit
- underwearb
sprite: _Amour/Genitals/butt.rsi
prefixes:
- layer: "enum.GenitalVisualLayers.ButtFront"
prefix: "_FRONT"
- type: HoleInventory
- type: entity
id: BaseBreast
abstract: true
name: Сиськи
components:
- type: Hole
holeName: Breast
holeNotVisibleIn:
- suitstorage
- outerClothing
- jumpsuit
- underweart
sprite: _Amour/Genitals/breasts.rsi
prefixes:
- layer: "enum.GenitalVisualLayers.BreastBehind"
prefix: "_BEHIND"
- layer: "enum.GenitalVisualLayers.BreastFront"
prefix: "_FRONT"
- type: HoleInventory
- type: entity
id: BaseTesticles
name: Яички
components:
- type: Hole
holeName: Dick
holeNotVisibleIn:
- suitstorage
- outerClothing
- jumpsuit
- underwearb
sprite: _Amour/Genitals/testicles.rsi
prefixes:
- layer: "enum.GenitalVisualLayers.TesticlesBehind"
prefix: "_BEHIND"
- layer: "enum.GenitalVisualLayers.TesticlesFront"
prefix: "_FRONT"
- type: entity
parent: BaseDick
id: Dick
components:
@@ -136,3 +32,11 @@
prefix: "_FRONT"
layers:
- state: testicles_sheath_5_s_0
- type: entity
parent: BaseVagina
id: Vagina
components:
- type: Hole
layers:
- state: vagina_human_1_s_1

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,380 @@
- type: entity
parent: BaseTesticles
id: TesticlesSheath10
components:
- type: Hole
layers:
- state: testicles_sheath_1_0
prefixes:
- layer: "enum.GenitalVisualLayers.TesticlesFront"
prefix: "_FRONT"
- type: entity
parent: BaseTesticles
id: TesticlesSheath11
components:
- type: Hole
layers:
- state: testicles_sheath_1_1
prefixes:
- layer: "enum.GenitalVisualLayers.TesticlesFront"
prefix: "_FRONT"
- type: entity
parent: BaseTesticles
id: TesticlesSheath1S0
components:
- type: Hole
layers:
- state: testicles_sheath_1_s_0
prefixes:
- layer: "enum.GenitalVisualLayers.TesticlesFront"
prefix: "_FRONT"
- type: entity
parent: BaseTesticles
id: TesticlesSheath1S1
components:
- type: Hole
layers:
- state: testicles_sheath_1_s_1
prefixes:
- layer: "enum.GenitalVisualLayers.TesticlesFront"
prefix: "_FRONT"
- type: entity
parent: BaseTesticles
id: TesticlesSheath20
components:
- type: Hole
layers:
- state: testicles_sheath_2_0
prefixes:
- layer: "enum.GenitalVisualLayers.TesticlesFront"
prefix: "_FRONT"
- type: entity
parent: BaseTesticles
id: TesticlesSheath21
components:
- type: Hole
layers:
- state: testicles_sheath_2_1
prefixes:
- layer: "enum.GenitalVisualLayers.TesticlesFront"
prefix: "_FRONT"
- type: entity
parent: BaseTesticles
id: TesticlesSheath2S0
components:
- type: Hole
layers:
- state: testicles_sheath_2_s_0
prefixes:
- layer: "enum.GenitalVisualLayers.TesticlesFront"
prefix: "_FRONT"
- type: entity
parent: BaseTesticles
id: TesticlesSheath2S1
components:
- type: Hole
layers:
- state: testicles_sheath_2_s_1
prefixes:
- layer: "enum.GenitalVisualLayers.TesticlesFront"
prefix: "_FRONT"
- type: entity
parent: BaseTesticles
id: TesticlesSheath30
components:
- type: Hole
layers:
- state: testicles_sheath_3_0
prefixes:
- layer: "enum.GenitalVisualLayers.TesticlesFront"
prefix: "_FRONT"
- type: entity
parent: BaseTesticles
id: TesticlesSheath31
components:
- type: Hole
layers:
- state: testicles_sheath_3_1
prefixes:
- layer: "enum.GenitalVisualLayers.TesticlesFront"
prefix: "_FRONT"
- type: entity
parent: BaseTesticles
id: TesticlesSheath3S0
components:
- type: Hole
layers:
- state: testicles_sheath_3_s_0
prefixes:
- layer: "enum.GenitalVisualLayers.TesticlesFront"
prefix: "_FRONT"
- type: entity
parent: BaseTesticles
id: TesticlesSheath3S1
components:
- type: Hole
layers:
- state: testicles_sheath_3_s_1
prefixes:
- layer: "enum.GenitalVisualLayers.TesticlesFront"
prefix: "_FRONT"
- type: entity
parent: BaseTesticles
id: TesticlesSheath40
components:
- type: Hole
layers:
- state: testicles_sheath_4_0
prefixes:
- layer: "enum.GenitalVisualLayers.TesticlesFront"
prefix: "_FRONT"
- type: entity
parent: BaseTesticles
id: TesticlesSheath41
components:
- type: Hole
layers:
- state: testicles_sheath_4_1
prefixes:
- layer: "enum.GenitalVisualLayers.TesticlesFront"
prefix: "_FRONT"
- type: entity
parent: BaseTesticles
id: TesticlesSheath4S0
components:
- type: Hole
layers:
- state: testicles_sheath_4_s_0
prefixes:
- layer: "enum.GenitalVisualLayers.TesticlesFront"
prefix: "_FRONT"
- type: entity
parent: BaseTesticles
id: TesticlesSheath4S1
components:
- type: Hole
layers:
- state: testicles_sheath_4_s_1
prefixes:
- layer: "enum.GenitalVisualLayers.TesticlesFront"
prefix: "_FRONT"
- type: entity
parent: BaseTesticles
id: TesticlesSheath50
components:
- type: Hole
layers:
- state: testicles_sheath_5_0
prefixes:
- layer: "enum.GenitalVisualLayers.TesticlesFront"
prefix: "_FRONT"
- type: entity
parent: BaseTesticles
id: TesticlesSheath51
components:
- type: Hole
layers:
- state: testicles_sheath_5_1
prefixes:
- layer: "enum.GenitalVisualLayers.TesticlesFront"
prefix: "_FRONT"
- type: entity
parent: BaseTesticles
id: TesticlesSheath5S0
components:
- type: Hole
layers:
- state: testicles_sheath_5_s_0
prefixes:
- layer: "enum.GenitalVisualLayers.TesticlesFront"
prefix: "_FRONT"
- type: entity
parent: BaseTesticles
id: TesticlesSheath5S1
components:
- type: Hole
layers:
- state: testicles_sheath_5_s_1
prefixes:
- layer: "enum.GenitalVisualLayers.TesticlesFront"
prefix: "_FRONT"
- type: entity
parent: BaseTesticles
id: TesticlesSingle10
components:
- type: Hole
layers:
- state: testicles_single_1_0
- type: entity
parent: BaseTesticles
id: TesticlesSingle11
components:
- type: Hole
layers:
- state: testicles_single_1_1
- type: entity
parent: BaseTesticles
id: TesticlesSingle1S0
components:
- type: Hole
layers:
- state: testicles_single_1_s_0
- type: entity
parent: BaseTesticles
id: TesticlesSingle20
components:
- type: Hole
layers:
- state: testicles_single_2_0
- type: entity
parent: BaseTesticles
id: TesticlesSingle21
components:
- type: Hole
layers:
- state: testicles_single_2_1
- type: entity
parent: BaseTesticles
id: TesticlesSingle2S0
components:
- type: Hole
layers:
- state: testicles_single_2_s_0
- type: entity
parent: BaseTesticles
id: TesticlesSingle30
components:
- type: Hole
layers:
- state: testicles_single_3_0
- type: entity
parent: BaseTesticles
id: TesticlesSingle31
components:
- type: Hole
layers:
- state: testicles_single_3_1
- type: entity
parent: BaseTesticles
id: TesticlesSingle3S0
components:
- type: Hole
layers:
- state: testicles_single_3_s_0
- type: entity
parent: BaseTesticles
id: TesticlesSingle40
components:
- type: Hole
layers:
- state: testicles_single_4_0
prefixes:
- layer: "enum.GenitalVisualLayers.TesticlesFront"
prefix: "_FRONT"
- type: entity
parent: BaseTesticles
id: TesticlesSingle41
components:
- type: Hole
layers:
- state: testicles_single_4_1
prefixes:
- layer: "enum.GenitalVisualLayers.TesticlesFront"
prefix: "_FRONT"
- type: entity
parent: BaseTesticles
id: TesticlesSingle4S0
components:
- type: Hole
layers:
- state: testicles_single_4_s_0
prefixes:
- layer: "enum.GenitalVisualLayers.TesticlesFront"
prefix: "_FRONT"
- type: entity
parent: BaseTesticles
id: TesticlesSingle4S1
components:
- type: Hole
layers:
- state: testicles_single_4_s_1
prefixes:
- layer: "enum.GenitalVisualLayers.TesticlesFront"
prefix: "_FRONT"
- type: entity
parent: BaseTesticles
id: TesticlesSingle50
components:
- type: Hole
layers:
- state: testicles_single_5_0
prefixes:
- layer: "enum.GenitalVisualLayers.TesticlesFront"
prefix: "_FRONT"
- type: entity
parent: BaseTesticles
id: TesticlesSingle51
components:
- type: Hole
layers:
- state: testicles_single_5_1
prefixes:
- layer: "enum.GenitalVisualLayers.TesticlesFront"
prefix: "_FRONT"
- type: entity
parent: BaseTesticles
id: TesticlesSingle5S0
components:
- type: Hole
layers:
- state: testicles_single_5_s_0
prefixes:
- layer: "enum.GenitalVisualLayers.TesticlesFront"
prefix: "_FRONT"
- type: entity
parent: BaseTesticles
id: TesticlesSingle5S1
components:
- type: Hole
layers:
- state: testicles_single_5_s_1
prefixes:
- layer: "enum.GenitalVisualLayers.TesticlesFront"
prefix: "_FRONT"

View File

@@ -0,0 +1,192 @@
- type: entity
parent: BaseVagina
id: VaginaCloaca10
components:
- type: Hole
layers:
- state: vagina_cloaca_1_0
- type: entity
parent: BaseVagina
id: VaginaCloaca11
components:
- type: Hole
layers:
- state: vagina_cloaca_1_1
- type: entity
parent: BaseVagina
id: VaginaDentata10
components:
- type: Hole
layers:
- state: vagina_dentata_1_0
- type: entity
parent: BaseVagina
id: VaginaDentata11
components:
- type: Hole
layers:
- state: vagina_dentata_1_1
- type: entity
parent: BaseVagina
id: VaginaDentata1S0
components:
- type: Hole
layers:
- state: vagina_dentata_1_s_0
- type: entity
parent: BaseVagina
id: VaginaDentata1S1
components:
- type: Hole
layers:
- state: vagina_dentata_1_s_1
- type: entity
parent: BaseVagina
id: VaginaFurred10
components:
- type: Hole
layers:
- state: vagina_furred_1_0
- type: entity
parent: BaseVagina
id: VaginaFurred1S0
components:
- type: Hole
layers:
- state: vagina_furred_1_s_0
- type: entity
parent: BaseVagina
id: VaginaGaping10
components:
- type: Hole
layers:
- state: vagina_gaping_1_0
- type: entity
parent: BaseVagina
id: VaginaGaping11
components:
- type: Hole
layers:
- state: vagina_gaping_1_1
- type: entity
parent: BaseVagina
id: VaginaGaping1S0
components:
- type: Hole
layers:
- state: vagina_gaping_1_s_0
- type: entity
parent: BaseVagina
id: VaginaGaping1S1
components:
- type: Hole
layers:
- state: vagina_gaping_1_s_1
- type: entity
parent: BaseVagina
id: VaginaHairy10
components:
- type: Hole
layers:
- state: vagina_hairy_1_0
- type: entity
parent: BaseVagina
id: VaginaHairy1S0
components:
- type: Hole
layers:
- state: vagina_hairy_1_s_0
- type: entity
parent: BaseVagina
id: VaginaHuman10
components:
- type: Hole
layers:
- state: vagina_human_1_0
- type: entity
parent: BaseVagina
id: VaginaHuman11
components:
- type: Hole
layers:
- state: vagina_human_1_1
- type: entity
parent: BaseVagina
id: VaginaHuman1S0
components:
- type: Hole
layers:
- state: vagina_human_1_s_0
- type: entity
parent: BaseVagina
id: VaginaHuman1S1
components:
- type: Hole
layers:
- state: vagina_human_1_s_1
- type: entity
parent: BaseVagina
id: VaginaSpade10
components:
- type: Hole
layers:
- state: vagina_spade_1_0
- type: entity
parent: BaseVagina
id: VaginaSpade1S0
components:
- type: Hole
layers:
- state: vagina_spade_1_s_0
- type: entity
parent: BaseVagina
id: VaginaTentacle10
components:
- type: Hole
layers:
- state: vagina_tentacle_1_0
- type: entity
parent: BaseVagina
id: VaginaTentacle11
components:
- type: Hole
layers:
- state: vagina_tentacle_1_1
- type: entity
parent: BaseVagina
id: VaginaTentacle1S0
components:
- type: Hole
layers:
- state: vagina_tentacle_1_s_0
- type: entity
parent: BaseVagina
id: VaginaTentacle1S1
components:
- type: Hole
layers:
- state: vagina_tentacle_1_s_1

View File

@@ -0,0 +1,456 @@
- type: genitalsGroup
id: Penis
prototypes:
- Amputated
- PenisBarbknot10
- PenisBarbknot11
- PenisBarbknot1S0
- PenisBarbknot1S1
- PenisBarbknot20
- PenisBarbknot21
- PenisBarbknot2S0
- PenisBarbknot2S1
- PenisBarbknot30
- PenisBarbknot31
- PenisBarbknot3S0
- PenisBarbknot3S1
- PenisBarbknot40
- PenisBarbknot41
- PenisBarbknot4S0
- PenisBarbknot4S1
- PenisBarbknot50
- PenisBarbknot51
- PenisFlared10
- PenisFlared11
- PenisFlared1S0
- PenisFlared1S1
- PenisFlared20
- PenisFlared21
- PenisFlared2S0
- PenisFlared2S1
- PenisFlared30
- PenisFlared31
- PenisFlared3S0
- PenisFlared3S1
- PenisFlared40
- PenisFlared41
- PenisFlared4S0
- PenisFlared4S1
- PenisFlared50
- PenisFlared51
- PenisHemiknot10
- PenisHemiknot11
- PenisHemiknot1S0
- PenisHemiknot1S1
- PenisHemiknot20
- PenisHemiknot21
- PenisHemiknot2S0
- PenisHemiknot2S1
- PenisHemiknot30
- PenisHemiknot31
- PenisHemiknot3S0
- PenisHemiknot3S1
- PenisHemiknot40
- PenisHemiknot41
- PenisHemiknot4S0
- PenisHemiknot4S1
- PenisHemiknot50
- PenisHemiknot51
- PenisHemi10
- PenisHemi11
- PenisHemi1S0
- PenisHemi1S1
- PenisHemi20
- PenisHemi21
- PenisHemi2S0
- PenisHemi2S1
- PenisHemi30
- PenisHemi31
- PenisHemi3S0
- PenisHemi3S1
- PenisHemi40
- PenisHemi41
- PenisHemi4S0
- PenisHemi4S1
- PenisHuman10
- PenisHuman11
- PenisHuman1S0
- PenisHuman1S1
- PenisHuman20
- PenisHuman21
- PenisHuman2S0
- PenisHuman2S1
- PenisHuman30
- PenisHuman31
- PenisHuman3S0
- PenisHuman3S1
- PenisHuman40
- PenisHuman41
- PenisHuman4S0
- PenisHuman4S1
- PenisHuman50
- PenisHuman51
- PenisKnotted10
- PenisKnotted11
- PenisKnotted1S0
- PenisKnotted1S1
- PenisKnotted20
- PenisKnotted21
- PenisKnotted2S0
- PenisKnotted2S1
- PenisKnotted30
- PenisKnotted31
- PenisKnotted3S0
- PenisKnotted3S1
- PenisKnotted40
- PenisKnotted41
- PenisKnotted4S0
- PenisKnotted4S1
- PenisKnotted50
- PenisKnotted51
- PenisTapered10
- PenisTapered11
- PenisTapered1S0
- PenisTapered1S1
- PenisTapered20
- PenisTapered21
- PenisTapered2S0
- PenisTapered2S1
- PenisTapered30
- PenisTapered31
- PenisTapered3S0
- PenisTapered3S1
- PenisTapered40
- PenisTapered41
- PenisTapered4S0
- PenisTapered4S1
- PenisTentacle10
- PenisTentacle11
- PenisTentacle1S0
- PenisTentacle20
- PenisTentacle21
- PenisTentacle2S0
- PenisTentacle30
- PenisTentacle31
- PenisTentacle3S0
- PenisTentacle40
- PenisTentacle41
- PenisTentacle4S0
- PenisTentacle4S1
- PenisThick10
- PenisThick11
- PenisThick20
- PenisThick21
- PenisThick30
- PenisThick31
- PenisThick40
- PenisThick41
- PenisThick50
- PenisThick51
- VaginaCloaca10
- VaginaCloaca11
- VaginaDentata10
- VaginaDentata11
- VaginaDentata1S0
- VaginaDentata1S1
- VaginaFurred10
- VaginaFurred1S0
- VaginaGaping10
- VaginaGaping11
- VaginaGaping1S0
- VaginaGaping1S1
- VaginaHairy10
- VaginaHairy1S0
- VaginaHuman10
- VaginaHuman11
- VaginaHuman1S0
- VaginaHuman1S1
- VaginaSpade10
- VaginaSpade1S0
- VaginaTentacle10
- VaginaTentacle11
- VaginaTentacle1S0
- VaginaTentacle1S1
- type: genitalsGroup
id: Butt
prototypes:
- ButtPair00
- ButtPair0S0
- ButtPair10
- ButtPair1S0
- ButtPair20
- ButtPair2S0
- ButtPair30
- ButtPair3S0
- ButtPair40
- ButtPair4S0
- ButtPair50
- ButtPair5S0
- type: genitalsGroup
id: Breast
prototypes:
- BreastsPairA0
- BreastsPairA1
- BreastsPairAS0
- BreastsPairAS1
- BreastsPairB0
- BreastsPairB1
- BreastsPairBS0
- BreastsPairBS1
- BreastsPairC0
- BreastsPairC1
- BreastsPairCS0
- BreastsPairCS1
- BreastsPairD0
- BreastsPairD1
- BreastsPairDS0
- BreastsPairDS1
- BreastsPairE0
- BreastsPairE1
- BreastsPairES0
- BreastsPairES1
- BreastsPairF0
- BreastsPairF1
- BreastsPairFS0
- BreastsPairFS1
- BreastsPairGiga0
- BreastsPairGiga1
- BreastsPairGigaS0
- BreastsPairGigaS1
- BreastsPairG0
- BreastsPairG1
- BreastsPairGS0
- BreastsPairGS1
- BreastsPairHuge0
- BreastsPairHuge1
- BreastsPairHugeS0
- BreastsPairHugeS1
- BreastsPairH0
- BreastsPairH1
- BreastsPairHS0
- BreastsPairHS1
- BreastsPairImpossible0
- BreastsPairImpossible1
- BreastsPairImpossibleS0
- BreastsPairImpossibleS1
- BreastsPairI0
- BreastsPairI1
- BreastsPairIS0
- BreastsPairIS1
- BreastsPairJ0
- BreastsPairJ1
- BreastsPairJS0
- BreastsPairJS1
- BreastsPairK0
- BreastsPairK1
- BreastsPairKS0
- BreastsPairKS1
- BreastsPairL0
- BreastsPairL1
- BreastsPairLS0
- BreastsPairLS1
- BreastsPairMassive0
- BreastsPairMassive1
- BreastsPairMassiveS0
- BreastsPairMassiveS1
- BreastsPairM0
- BreastsPairM1
- BreastsPairMS0
- BreastsPairMS1
- BreastsPairN0
- BreastsPairN1
- BreastsPairNS0
- BreastsPairNS1
- BreastsPairO0
- BreastsPairO1
- BreastsPairOS0
- BreastsPairOS1
- BreastsQuadA0
- BreastsQuadA1
- BreastsQuadAS0
- BreastsQuadAS1
- BreastsQuadB0
- BreastsQuadB1
- BreastsQuadBS0
- BreastsQuadBS1
- BreastsQuadC0
- BreastsQuadC1
- BreastsQuadCS0
- BreastsQuadCS1
- BreastsQuadD0
- BreastsQuadD1
- BreastsQuadDS0
- BreastsQuadDS1
- BreastsQuadE0
- BreastsQuadE1
- BreastsQuadES0
- BreastsQuadES1
- BreastsQuadF0
- BreastsQuadF1
- BreastsQuadFS0
- BreastsQuadFS1
- BreastsQuadGiga0
- BreastsQuadGiga1
- BreastsQuadGigaS0
- BreastsQuadGigaS1
- BreastsQuadG0
- BreastsQuadG1
- BreastsQuadGS0
- BreastsQuadGS1
- BreastsQuadHuge0
- BreastsQuadHuge1
- BreastsQuadHugeS0
- BreastsQuadHugeS1
- BreastsQuadH0
- BreastsQuadH1
- BreastsQuadHS0
- BreastsQuadHS1
- BreastsQuadImpossible0
- BreastsQuadImpossible1
- BreastsQuadImpossibleS0
- BreastsQuadImpossibleS1
- BreastsQuadI0
- BreastsQuadI1
- BreastsQuadIS0
- BreastsQuadIS1
- BreastsQuadJ0
- BreastsQuadJ1
- BreastsQuadJS0
- BreastsQuadJS1
- BreastsQuadK0
- BreastsQuadK1
- BreastsQuadKS0
- BreastsQuadKS1
- BreastsQuadL0
- BreastsQuadL1
- BreastsQuadLS0
- BreastsQuadLS1
- BreastsQuadMassive0
- BreastsQuadMassive1
- BreastsQuadMassiveS0
- BreastsQuadMassiveS1
- BreastsQuadM0
- BreastsQuadM1
- BreastsQuadMS0
- BreastsQuadMS1
- BreastsQuadN0
- BreastsQuadN1
- BreastsQuadNS0
- BreastsQuadNS1
- BreastsQuadO0
- BreastsQuadO1
- BreastsQuadOS0
- BreastsQuadOS1
- BreastsSextupleA0
- BreastsSextupleA1
- BreastsSextupleAS0
- BreastsSextupleAS1
- BreastsSextupleB0
- BreastsSextupleB1
- BreastsSextupleBS0
- BreastsSextupleBS1
- BreastsSextupleC0
- BreastsSextupleC1
- BreastsSextupleCS0
- BreastsSextupleCS1
- BreastsSextupleD0
- BreastsSextupleD1
- BreastsSextupleDS0
- BreastsSextupleDS1
- BreastsSextupleE0
- BreastsSextupleE1
- BreastsSextupleES0
- BreastsSextupleES1
- BreastsSextupleF0
- BreastsSextupleFS0
- BreastsSextupleFS1
- BreastsSextupleGiga0
- BreastsSextupleGiga1
- BreastsSextupleGigaS0
- BreastsSextupleGigaS1
- BreastsSextupleG0
- BreastsSextupleGS0
- BreastsSextupleGS1
- BreastsSextupleHuge0
- BreastsSextupleHuge1
- BreastsSextupleHugeS0
- BreastsSextupleHugeS1
- BreastsSextupleH0
- BreastsSextupleHS0
- BreastsSextupleHS1
- BreastsSextupleImpossible0
- BreastsSextupleImpossible1
- BreastsSextupleImpossibleS0
- BreastsSextupleImpossibleS1
- BreastsSextupleI0
- BreastsSextupleIS0
- BreastsSextupleIS1
- BreastsSextupleJ0
- BreastsSextupleJS0
- BreastsSextupleJS1
- BreastsSextupleK0
- BreastsSextupleKS0
- BreastsSextupleKS1
- BreastsSextupleL0
- BreastsSextupleLS0
- BreastsSextupleLS1
- BreastsSextupleMassive0
- BreastsSextupleMassive1
- BreastsSextupleMassiveS0
- BreastsSextupleMassiveS1
- BreastsSextupleM0
- BreastsSextupleMS0
- BreastsSextupleMS1
- BreastsSextupleN0
- BreastsSextupleNS0
- BreastsSextupleNS1
- BreastsSextupleO0
- BreastsSextupleOS0
- BreastsSextupleOS1
- type: genitalsGroup
id: Testicles
prototypes:
- TesticlesSheath10
- TesticlesSheath11
- TesticlesSheath1S0
- TesticlesSheath1S1
- TesticlesSheath20
- TesticlesSheath21
- TesticlesSheath2S0
- TesticlesSheath2S1
- TesticlesSheath30
- TesticlesSheath31
- TesticlesSheath3S0
- TesticlesSheath3S1
- TesticlesSheath40
- TesticlesSheath41
- TesticlesSheath4S0
- TesticlesSheath4S1
- TesticlesSheath50
- TesticlesSheath51
- TesticlesSheath5S0
- TesticlesSheath5S1
- TesticlesSingle10
- TesticlesSingle11
- TesticlesSingle1S0
- TesticlesSingle20
- TesticlesSingle21
- TesticlesSingle2S0
- TesticlesSingle30
- TesticlesSingle31
- TesticlesSingle3S0
- TesticlesSingle40
- TesticlesSingle41
- TesticlesSingle4S0
- TesticlesSingle4S1
- TesticlesSingle50
- TesticlesSingle51
- TesticlesSingle5S0
- TesticlesSingle5S1