Co-authored-by: lunarica <splatt.pr@gmail.com>
This commit is contained in:
SplikZerys 2025-02-28 13:28:18 +03:00 committed by GitHub
parent 603702ab18
commit bdf87d104e
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
187 changed files with 6119 additions and 152 deletions

View file

@ -3,6 +3,7 @@ using System.Linq;
using System.Numerics;
using Content.Client.DisplacementMap;
using Content.Client.Inventory;
using Content.Shared._Sunrise;
using Content.Shared.Clothing;
using Content.Shared.Clothing.Components;
using Content.Shared.Clothing.EntitySystems;
@ -11,9 +12,11 @@ using Content.Shared.Humanoid;
using Content.Shared.Inventory;
using Content.Shared.Inventory.Events;
using Content.Shared.Item;
using Content.Shared.Tag;
using Robust.Client.GameObjects;
using Robust.Client.Graphics;
using Robust.Client.ResourceManagement;
using Robust.Shared.Prototypes;
using Robust.Shared.Serialization.Manager;
using Robust.Shared.Serialization.TypeSerializers.Implementations;
using Robust.Shared.Utility;
@ -55,6 +58,8 @@ public sealed class ClientClothingSystem : ClothingSystem
[Dependency] private readonly IResourceCache _cache = default!;
[Dependency] private readonly InventorySystem _inventorySystem = default!;
[Dependency] private readonly DisplacementMapSystem _displacement = default!;
[Dependency] private readonly IPrototypeManager _prototype = default!;
[Dependency] private readonly TagSystem _tagSystem = default!;
public override void Initialize()
{
@ -108,6 +113,12 @@ public sealed class ClientClothingSystem : ClothingSystem
List<PrototypeLayerData>? layers = null;
if (TryComp(args.Equipee, out HumanoidAppearanceComponent? humanoid))
{
var bodyTypeName = _prototype.Index<BodyTypePrototype>(humanoid.BodyType).Name;
item.ClothingVisuals.TryGetValue($"{args.Slot}-{bodyTypeName}", out layers);
}
// first attempt to get species specific data.
if (inventory.SpeciesId != null)
item.ClothingVisuals.TryGetValue($"{args.Slot}-{inventory.SpeciesId}", out layers);
@ -116,7 +127,7 @@ public sealed class ClientClothingSystem : ClothingSystem
if (layers == null && !item.ClothingVisuals.TryGetValue(args.Slot, out layers))
{
// No generic data either. Attempt to generate defaults from the item's RSI & item-prefixes
if (!TryGetDefaultVisuals(uid, item, args.Slot, inventory.SpeciesId, out layers))
if (!TryGetDefaultVisuals(uid, item, args.Slot, inventory.SpeciesId, args.Equipee, out layers))
return;
}
@ -144,6 +155,7 @@ public sealed class ClientClothingSystem : ClothingSystem
/// Useful for lazily adding clothing sprites without modifying yaml. And for backwards compatibility.
/// </remarks>
private bool TryGetDefaultVisuals(EntityUid uid, ClothingComponent clothing, string slot, string? speciesId,
EntityUid target,
[NotNullWhen(true)] out List<PrototypeLayerData>? layers)
{
layers = null;
@ -171,6 +183,13 @@ public sealed class ClientClothingSystem : ClothingSystem
if (clothing.EquippedState != null)
state = $"{clothing.EquippedState}";
if (TryComp(target, out HumanoidAppearanceComponent? humanoid))
{
var bodyTypeName = _prototype.Index(humanoid.BodyType).Name;
if (rsi.TryGetState($"{state}-{bodyTypeName}", out _))
state = $"{state}-{bodyTypeName}";
}
// species specific
if (speciesId != null && rsi.TryGetState($"{state}-{speciesId}", out _))
state = $"{state}-{speciesId}";
@ -276,18 +295,42 @@ public sealed class ClientClothingSystem : ClothingSystem
// Select displacement maps
var displacementData = inventory.Displacements.GetValueOrDefault(slot); //Default unsexed map
var equipeeSex = CompOrNull<HumanoidAppearanceComponent>(equipee)?.Sex;
if (equipeeSex != null)
string? bodyTypeName = null;
if (TryComp(equipee, out HumanoidAppearanceComponent? humanoid))
{
switch (equipeeSex)
bodyTypeName = _prototype.Index(humanoid.BodyType).Name;
var hardsuitKey = $"hardsuit-{bodyTypeName}";
switch (humanoid.Sex)
{
case Sex.Male:
if (inventory.MaleDisplacements.Count > 0)
displacementData = inventory.MaleDisplacements.GetValueOrDefault(slot);
{
displacementData = inventory.MaleDisplacements.GetValueOrDefault($"{slot}-{bodyTypeName}")
?? inventory.MaleDisplacements.GetValueOrDefault(slot);
if (_tagSystem.HasTag(equipment, "Hardsuit"))
{
displacementData = inventory.MaleDisplacements.GetValueOrDefault(hardsuitKey)
?? inventory.Displacements.GetValueOrDefault(slot);
}
}
break;
case Sex.Female:
if (inventory.FemaleDisplacements.Count > 0)
displacementData = inventory.FemaleDisplacements.GetValueOrDefault(slot);
{
displacementData = inventory.FemaleDisplacements.GetValueOrDefault($"{slot}-{bodyTypeName}")
?? inventory.FemaleDisplacements.GetValueOrDefault(slot);
if (_tagSystem.HasTag(equipment, "Hardsuit"))
{
displacementData = inventory.FemaleDisplacements.GetValueOrDefault(hardsuitKey)
?? inventory.FemaleDisplacements.GetValueOrDefault(slot);
}
}
break;
}
}
@ -334,7 +377,8 @@ public sealed class ClientClothingSystem : ClothingSystem
if (displacementData is not null)
{
//Checking that the state is not tied to the current race. In this case we don't need to use the displacement maps.
if (layerData.State is not null && inventory.SpeciesId is not null && layerData.State.EndsWith(inventory.SpeciesId))
if (layerData.State is not null && (inventory.SpeciesId is not null && layerData.State.EndsWith(inventory.SpeciesId)
|| bodyTypeName is not null && layerData.State.EndsWith(bodyTypeName)))
continue;
if (_displacement.TryAddDisplacement(displacementData, sprite, index, key, revealedLayers))

View file

@ -1,3 +1,4 @@
using Content.Shared._Sunrise;
using Content.Shared.Humanoid;
using Content.Shared.Humanoid.Markings;
using Content.Shared.Humanoid.Prototypes;
@ -41,10 +42,8 @@ public sealed class HumanoidAppearanceSystem : SharedHumanoidAppearanceSystem
var oldLayers = new HashSet<HumanoidVisualLayers>(component.BaseLayers.Keys);
component.BaseLayers.Clear();
// add default species layers
var speciesProto = _prototypeManager.Index(component.Species);
var baseSprites = _prototypeManager.Index<HumanoidSpeciesBaseSpritesPrototype>(speciesProto.SpriteSet);
foreach (var (key, id) in baseSprites.Sprites)
var bodyTypeProto = _prototypeManager.Index(component.BodyType);
foreach (var (key, id) in bodyTypeProto.Sprites)
{
oldLayers.Remove(key);
if (!component.CustomBaseLayers.ContainsKey(key))
@ -194,6 +193,7 @@ public sealed class HumanoidAppearanceSystem : SharedHumanoidAppearanceSystem
humanoid.Sex = profile.Sex;
humanoid.Gender = profile.Gender;
humanoid.Age = profile.Age;
humanoid.BodyType = profile.BodyType;
humanoid.Species = profile.Species;
humanoid.SkinColor = profile.Appearance.SkinColor;
humanoid.EyeColor = profile.Appearance.EyeColor;

View file

@ -61,6 +61,13 @@
ToolTip="{Loc 'humanoid-profile-editor-guidebook-button-tooltip'}"/>
<OptionButton Name="SpeciesButton" HorizontalAlignment="Right" />
</BoxContainer>
<!-- Body Type -->
<BoxContainer HorizontalExpand="True">
<Label Text="Тип тела"/>
<Control HorizontalExpand="True"/>
<OptionButton Name="CBodyTypesButton" HorizontalAlignment="Right" />
</BoxContainer>
<!-- Body Type -->
<!-- Age -->
<BoxContainer HorizontalExpand="True">
<Label Text="{Loc 'humanoid-profile-editor-age-label'}" />

View file

@ -9,6 +9,7 @@ using Content.Client.Players.PlayTimeTracking;
using Content.Client.Sprite;
using Content.Client.Stylesheets;
using Content.Client.UserInterface.Systems.Guidebook;
using Content.Shared._Sunrise;
using Content.Shared._Sunrise.SunriseCCVars;
using Content.Shared.CCVar;
using Content.Shared.Clothing;
@ -88,6 +89,8 @@ namespace Content.Client.Lobby.UI
private List<SpeciesPrototype> _species = new();
private List<BodyTypePrototype> _bodyTypes = new();
private List<(string, RequirementsSelector)> _jobPriorities = new();
private readonly Dictionary<string, BoxContainer> _jobCategories;
@ -227,6 +230,17 @@ namespace Content.Client.Lobby.UI
#endregion
// Sunrise-TTS-End
#region BodyType
CBodyTypesButton.OnItemSelected += args =>
{
CBodyTypesButton.SelectId(args.Id);
SetBodyType(_bodyTypes[args.Id].ID);
};
#endregion
RefreshSpecies();
SpeciesButton.OnItemSelected += args =>
@ -786,6 +800,7 @@ namespace Content.Client.Lobby.UI
UpdateSaveButton();
UpdateMarkings();
UpdateTtsVoicesControls(); // Sunrise-TTS
UpdateBodyTypes();
UpdateHairPickers();
UpdateCMarkingsHair();
UpdateCMarkingsFacialHair();
@ -1252,6 +1267,7 @@ namespace Content.Client.Lobby.UI
UpdateGenderControls();
UpdateTtsVoicesControls(); // Sunrise-TTS
UpdateBodyTypes();
RefreshLoadouts(); // Sunrise-Sex restrictions
Markings.SetSex(newSex);
ReloadPreview();
@ -1281,6 +1297,7 @@ namespace Content.Client.Lobby.UI
// In case there's species restrictions for loadouts
RefreshLoadouts();
UpdateSexControls(); // update sex for new species
UpdateBodyTypes();
UpdateSpeciesGuidebookIcon();
ReloadPreview();
}
@ -1733,5 +1750,38 @@ namespace Content.Client.Lobby.UI
ImportButton.Disabled = false;
ExportButton.Disabled = false;
}
private void SetBodyType(string newBodyType)
{
Profile = Profile?.WithBodyType(newBodyType);
ReloadPreview();
IsDirty = true;
}
private void UpdateBodyTypes()
{
if (Profile is null)
return;
CBodyTypesButton.Clear();
var species = _prototypeManager.Index(Profile.Species);
var sex = Profile.Sex;
_bodyTypes = species.BodyTypes.Select(protoId => _prototypeManager.Index<BodyTypePrototype>(protoId))
.Where(proto => !proto.SexRestrictions.Contains(sex.ToString()))
.ToList();
for (var i = 0; i < _bodyTypes.Count; i++)
{
CBodyTypesButton.AddItem(Loc.GetString(_bodyTypes[i].Name), i);
}
if (!_bodyTypes.Select(proto => proto.ID).Contains(Profile.BodyType))
{
SetBodyType(_bodyTypes.First().ID);
}
CBodyTypesButton.Select(_bodyTypes.FindIndex(x => x.ID == Profile.BodyType));
IsDirty = true;
}
}
}

View file

@ -45,6 +45,7 @@ namespace Content.IntegrationTests.Tests.Preferences
FlavorText = "The biggest boy around.",
Species = "Human",
Age = 21,
BodyType = "Normal",
Appearance = new(
"Afro",
Color.Aqua,

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,29 @@
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace Content.Server.Database.Migrations.Postgres
{
/// <inheritdoc />
public partial class BodyType : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.AddColumn<string>(
name: "body_type",
table: "profile",
type: "text",
nullable: false,
defaultValue: "");
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropColumn(
name: "body_type",
table: "profile");
}
}
}

View file

@ -827,6 +827,11 @@ namespace Content.Server.Database.Migrations.Postgres
.HasColumnType("integer")
.HasColumnName("age");
b.Property<string>("BodyType")
.IsRequired()
.HasColumnType("text")
.HasColumnName("body_type");
b.Property<string>("CharacterName")
.IsRequired()
.HasColumnType("text")
@ -902,12 +907,10 @@ namespace Content.Server.Database.Migrations.Postgres
.HasColumnType("text")
.HasColumnName("species");
// Sunrise-TTS-Start
b.Property<string>("Voice")
.IsRequired()
.HasColumnType("text")
.HasColumnName("voice");
// Sunrise-TTS-End
b.HasKey("Id")
.HasName("PK_profile");

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,29 @@
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace Content.Server.Database.Migrations.Sqlite
{
/// <inheritdoc />
public partial class BodyType : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.AddColumn<string>(
name: "body_type",
table: "profile",
type: "TEXT",
nullable: false,
defaultValue: "");
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropColumn(
name: "body_type",
table: "profile");
}
}
}

View file

@ -779,6 +779,11 @@ namespace Content.Server.Database.Migrations.Sqlite
.HasColumnType("INTEGER")
.HasColumnName("age");
b.Property<string>("BodyType")
.IsRequired()
.HasColumnType("TEXT")
.HasColumnName("body_type");
b.Property<string>("CharacterName")
.IsRequired()
.HasColumnType("TEXT")
@ -854,12 +859,10 @@ namespace Content.Server.Database.Migrations.Sqlite
.HasColumnType("TEXT")
.HasColumnName("species");
// Sunrise-TTS-Start
b.Property<string>("Voice")
.IsRequired()
.HasColumnType("TEXT")
.HasColumnName("voice");
// Sunrise-TTS-End
b.HasKey("Id")
.HasName("PK_profile");

View file

@ -403,6 +403,9 @@ namespace Content.Server.Database
public string FlavorText { get; set; } = null!;
public int Age { get; set; }
public string Sex { get; set; } = null!;
public string BodyType { get; set; } = null!;
public string Gender { get; set; } = null!;
public string Species { get; set; } = null!;
public string Voice { get; set; } = null!; // Sunrise-TTS

View file

@ -251,6 +251,7 @@ namespace Content.Server.Database
profile.FlavorText,
profile.Species,
voice, // Sunrise-TTS
profile.BodyType,
profile.Age,
sex,
gender,
@ -288,6 +289,7 @@ namespace Content.Server.Database
profile.FlavorText = humanoid.FlavorText;
profile.Species = humanoid.Species;
profile.Voice = humanoid.Voice; // Sunrise-TTS
profile.BodyType = humanoid.BodyType;
profile.Age = humanoid.Age;
profile.Sex = humanoid.Sex.ToString();
profile.Gender = humanoid.Gender.ToString();

View file

@ -37,6 +37,7 @@ public sealed partial class HumanoidAppearanceSystem
uid,
HumanoidMarkingModifierKey.Key,
new HumanoidMarkingModifierState(component.MarkingSet, component.Species,
component.BodyType,
component.Sex,
component.SkinColor,
component.CustomBaseLayers
@ -70,6 +71,7 @@ public sealed partial class HumanoidAppearanceSystem
uid,
HumanoidMarkingModifierKey.Key,
new HumanoidMarkingModifierState(component.MarkingSet, component.Species,
component.BodyType,
component.Sex,
component.SkinColor,
component.CustomBaseLayers
@ -94,6 +96,7 @@ public sealed partial class HumanoidAppearanceSystem
uid,
HumanoidMarkingModifierKey.Key,
new HumanoidMarkingModifierState(component.MarkingSet, component.Species,
component.BodyType,
component.Sex,
component.SkinColor,
component.CustomBaseLayers

View file

@ -3,6 +3,7 @@ using System.Numerics;
using Content.Server.Body.Components;
using Content.Server.Construction.Components;
using Content.Server.Traits.Assorted;
using Content.Shared._Sunrise;
using Content.Shared._Sunrise.FleshCult;
using Content.Shared.Body.Components;
using Content.Shared.Body.Part;
@ -269,8 +270,8 @@ public sealed partial class FleshCultSystem
}
}
var skeletonSprites = _prototypeManager.Index<HumanoidSpeciesBaseSpritesPrototype>("MobSkeletonSprites");
foreach (var (key, id) in skeletonSprites.Sprites)
var bodyType = _prototypeManager.Index<BodyTypePrototype>("SkeletonNormal");
foreach (var (key, id) in bodyType.Sprites)
{
if (key != HumanoidVisualLayers.Head)
{

View file

@ -4,6 +4,7 @@ using Content.Server._Sunrise.FleshCult.FleshGrowth;
using Content.Server._Sunrise.FleshCult.GameRule;
using Content.Server.Body.Components;
using Content.Server.Traits.Assorted;
using Content.Shared._Sunrise;
using Content.Shared._Sunrise.FleshCult;
using Content.Shared.Body.Components;
using Content.Shared.Body.Organ;
@ -304,8 +305,8 @@ public sealed partial class FleshCultSystem
}
}
var skeletonSprites = _prototypeManager.Index<HumanoidSpeciesBaseSpritesPrototype>("MobSkeletonSprites");
foreach (var (key, id) in skeletonSprites.Sprites)
var bodyType = _prototypeManager.Index<BodyTypePrototype>("SkeletonNormal");
foreach (var (key, id) in bodyType.Sprites)
{
if (key != HumanoidVisualLayers.Head)
{

View file

@ -223,9 +223,8 @@ public sealed partial class SurgerySystem : SharedSurgerySystem
baseLayerStorage.Layer = customBaseLayer.Id;
else
{
var speciesProto = _prototypes.Index(humanoid.Species);
var baseSprites = _prototypes.Index<HumanoidSpeciesBaseSpritesPrototype>(speciesProto.SpriteSet);
if (baseSprites.Sprites.TryGetValue(layer.Value, out var baseLayer))
var bodyType = _prototypes.Index(humanoid.BodyType);
if (bodyType.Sprites.TryGetValue(layer.Value, out var baseLayer))
baseLayerStorage.Layer = baseLayer;
}
}

View file

@ -1,3 +1,4 @@
using Content.Shared._Sunrise;
using Content.Shared._Sunrise.TTS;
using Content.Shared.Humanoid.Markings;
using Content.Shared.Humanoid.Prototypes;
@ -94,6 +95,9 @@ public sealed partial class HumanoidAppearanceComponent : Component
[DataField("voice")]
public ProtoId<TTSVoicePrototype> Voice { get; set; } = SharedHumanoidAppearanceSystem.DefaultVoice;
// Sunrise-TTS-End
[DataField, AutoNetworkedField]
public ProtoId<BodyTypePrototype> BodyType { get; set; } = SharedHumanoidAppearanceSystem.DefaultBodyType;
}
[DataDefinition]

View file

@ -1,6 +1,7 @@
using System.Collections.Frozen;
using System.Diagnostics.CodeAnalysis;
using System.Linq;
using Content.Shared._Sunrise;
using Content.Shared.Humanoid.Prototypes;
using Robust.Shared.Prototypes;
@ -254,11 +255,10 @@ namespace Content.Shared.Humanoid.Markings
IoCManager.Resolve(ref prototypeManager);
var speciesProto = prototypeManager.Index<SpeciesPrototype>(species);
if (
!prototypeManager.TryIndex(speciesProto.SpriteSet, out HumanoidSpeciesBaseSpritesPrototype? baseSprites) ||
!baseSprites.Sprites.TryGetValue(layer, out var spriteName) ||
!prototypeManager.TryIndex(speciesProto.BodyTypes.First(), out BodyTypePrototype? baseBodyType) ||
!baseBodyType.Sprites.TryGetValue(layer, out var spriteName) ||
!prototypeManager.TryIndex(spriteName, out HumanoidSpeciesSpriteLayer? sprite) ||
sprite == null ||
!sprite.MarkingsMatchSkin
sprite is not { MarkingsMatchSkin: true }
)
{
alpha = 1f;

View file

@ -7,7 +7,7 @@ namespace Content.Shared.Humanoid.Prototypes;
/// Base sprites for a species (e.g., what replaces the empty tagged layer,
/// or settings per layer)
/// </summary>
[Prototype("speciesBaseSprites")]
/*[Prototype("speciesBaseSprites")]
public sealed partial class HumanoidSpeciesBaseSpritesPrototype : IPrototype
{
[IdDataField]
@ -21,7 +21,7 @@ public sealed partial class HumanoidSpeciesBaseSpritesPrototype : IPrototype
/// </summary>
[DataField("sprites", required: true)]
public Dictionary<HumanoidVisualLayers, string> Sprites = new();
}
}*/
/// <summary>
/// Humanoid species sprite layer. This is what defines the base layer of

View file

@ -54,6 +54,9 @@ public sealed partial class SpeciesPrototype : IPrototype
[DataField("sprites")]
public string SpriteSet { get; private set; } = default!;
[DataField(required: true)]
public List<string> BodyTypes { get; } = default!;
/// <summary>
/// Default skin tone for this species. This applies for non-human skin tones.
/// </summary>

View file

@ -1,5 +1,6 @@
using System.IO;
using System.Linq;
using Content.Shared._Sunrise;
using Content.Shared._Sunrise.TTS;
using Content.Shared.CCVar;
using Content.Shared.Decals;
@ -42,6 +43,10 @@ public abstract class SharedHumanoidAppearanceSystem : EntitySystem
[ValidatePrototypeId<SpeciesPrototype>]
public const string DefaultSpecies = "Human";
[ValidatePrototypeId<BodyTypePrototype>]
public const string DefaultBodyType = "HumanNormal"; // Sunrise
// Sunrise-TTS-Start
public const string DefaultVoice = "Voljin";
public static readonly Dictionary<Sex, string> DefaultSexVoice = new()
@ -61,6 +66,25 @@ public abstract class SharedHumanoidAppearanceSystem : EntitySystem
SubscribeLocalEvent<HumanoidAppearanceComponent, ExaminedEvent>(OnExamined);
}
public void SetBodyType(
EntityUid uid,
ProtoId<BodyTypePrototype> bodyType,
bool sync = true,
HumanoidAppearanceComponent? humanoid = null)
{
if (!Resolve(uid, ref humanoid))
return;
var speciesPrototype = _proto.Index<SpeciesPrototype>(humanoid.Species);
if (speciesPrototype.BodyTypes.Contains(bodyType))
humanoid.BodyType = bodyType;
else
humanoid.BodyType = speciesPrototype.BodyTypes.First();
if (sync)
Dirty(uid, humanoid);
}
public DataNode ToDataNode(HumanoidCharacterProfile profile)
{
var export = new HumanoidProfileExport()
@ -167,6 +191,7 @@ public abstract class SharedHumanoidAppearanceSystem : EntitySystem
targetHumanoid.CustomBaseLayers = new(sourceHumanoid.CustomBaseLayers);
targetHumanoid.MarkingSet = new(sourceHumanoid.MarkingSet);
SetTTSVoice(target, sourceHumanoid.Voice, targetHumanoid); // Sunrise-TTS
targetHumanoid.BodyType = sourceHumanoid.BodyType;
targetHumanoid.Gender = sourceHumanoid.Gender;
if (TryComp<GrammarComponent>(target, out var grammar))
@ -422,6 +447,7 @@ public abstract class SharedHumanoidAppearanceSystem : EntitySystem
EnsureDefaultMarkings(uid, humanoid);
SetTTSVoice(uid, profile.Voice, humanoid); // Sunrise-TTS
SetBodyType(uid, profile.BodyType, false, humanoid);
humanoid.Gender = profile.Gender;
if (TryComp<GrammarComponent>(uid, out var grammar))

View file

@ -44,6 +44,7 @@ public sealed class HumanoidMarkingModifierState : BoundUserInterfaceState
public HumanoidMarkingModifierState(
MarkingSet markingSet,
string species,
string bodyType,
Sex sex,
Color skinColor,
Dictionary<HumanoidVisualLayers, CustomBaseLayerInfo> customBaseLayers
@ -51,6 +52,7 @@ public sealed class HumanoidMarkingModifierState : BoundUserInterfaceState
{
MarkingSet = markingSet;
Species = species;
BodyType = bodyType;
Sex = sex;
SkinColor = skinColor;
CustomBaseLayers = customBaseLayers;
@ -58,6 +60,7 @@ public sealed class HumanoidMarkingModifierState : BoundUserInterfaceState
public MarkingSet MarkingSet { get; }
public string Species { get; }
public string BodyType { get; }
public Sex Sex { get; }
public Color SkinColor { get; }
public Color EyeColor { get; }

View file

@ -92,6 +92,9 @@ namespace Content.Shared.Preferences
[DataField]
public Gender Gender { get; private set; } = Gender.Male;
[DataField]
public string BodyType { get; set; } = SharedHumanoidAppearanceSystem.DefaultBodyType;
/// <summary>
/// <see cref="Appearance"/>
/// </summary>
@ -136,6 +139,7 @@ namespace Content.Shared.Preferences
string flavortext,
string species,
string voice, // Sunrise-TTS
string bodyType,
int age,
Sex sex,
Gender gender,
@ -151,6 +155,7 @@ namespace Content.Shared.Preferences
FlavorText = flavortext;
Species = species;
Voice = voice; // Sunrise-TTS
BodyType = bodyType;
Age = age;
Sex = sex;
Gender = gender;
@ -183,6 +188,7 @@ namespace Content.Shared.Preferences
other.FlavorText,
other.Species,
other.Voice,
other.BodyType,
other.Age,
other.Sex,
other.Gender,
@ -241,10 +247,12 @@ namespace Content.Shared.Preferences
var sex = Sex.Unsexed;
var age = 18;
var bodyType = SharedHumanoidAppearanceSystem.DefaultBodyType;
if (prototypeManager.TryIndex<SpeciesPrototype>(species, out var speciesPrototype))
{
sex = random.Pick(speciesPrototype.Sexes);
age = random.Next(speciesPrototype.MinAge, speciesPrototype.OldAge); // people don't look and keep making 119 year old characters with zero rp, cap it at middle aged
bodyType = speciesPrototype.BodyTypes.First();
}
// Sunrise-TTS-Start
@ -277,6 +285,7 @@ namespace Content.Shared.Preferences
Gender = gender,
Species = species,
Voice = voiceId, // Sunrise-TTS
BodyType = bodyType,
Appearance = HumanoidCharacterAppearance.Random(species, sex),
};
}
@ -318,6 +327,11 @@ namespace Content.Shared.Preferences
}
// Sunrise-TTS-End
public HumanoidCharacterProfile WithBodyType(string bodyType)
{
return new HumanoidCharacterProfile(this) { BodyType = bodyType };
}
public HumanoidCharacterProfile WithCharacterAppearance(HumanoidCharacterAppearance appearance)
{
return new(this) { Appearance = appearance };
@ -487,6 +501,7 @@ namespace Content.Shared.Preferences
if (Sex != other.Sex) return false;
if (Gender != other.Gender) return false;
if (Species != other.Species) return false;
if (BodyType != other.BodyType) return false;
if (PreferenceUnavailable != other.PreferenceUnavailable) return false;
if (SpawnPriority != other.SpawnPriority) return false;
if (!_jobPriorities.SequenceEqual(other._jobPriorities)) return false;
@ -539,6 +554,8 @@ namespace Content.Shared.Preferences
_ => Gender.Epicene // Invalid enum values.
};
var bodyType = speciesPrototype.BodyTypes.Contains(BodyType) ? BodyType : speciesPrototype.BodyTypes.First();
string name;
if (string.IsNullOrEmpty(Name))
{
@ -646,6 +663,7 @@ namespace Content.Shared.Preferences
Age = age;
Sex = sex;
Gender = gender;
BodyType = bodyType;
Appearance = appearance;
SpawnPriority = spawnPriority;
@ -767,6 +785,7 @@ namespace Content.Shared.Preferences
hashCode.Add(FlavorText);
hashCode.Add(Species);
hashCode.Add(Age);
hashCode.Add(BodyType);
hashCode.Add((int)Sex);
hashCode.Add((int)Gender);
hashCode.Add(Appearance);

View file

@ -0,0 +1,20 @@
using Content.Shared.Humanoid;
using Robust.Shared.Prototypes;
namespace Content.Shared._Sunrise;
[Prototype("bodyType")]
public sealed class BodyTypePrototype : IPrototype
{
[IdDataField]
public string ID { get; } = default!;
[DataField(required: true)]
public string Name { get; } = default!;
[DataField(required: true)]
public Dictionary<HumanoidVisualLayers, string> Sprites = new();
[DataField]
public List<string> SexRestrictions = new();
}

View file

@ -0,0 +1,3 @@
humanoid-profile-editor-body-type-label = Телосложение:
body-normal = Нормальное
body-slim = Худощавое

View file

@ -69,6 +69,46 @@
32:
sprite: Mobs/Species/Human/displacement.rsi
state: jumpsuit-female
jumpsuit-body-slim:
sizeMaps:
32:
sprite: _Sunrise/Mobs/Species/Human/displacement.rsi
state: jumpsuit
shoes-body-slim:
sizeMaps:
32:
sprite: _Sunrise/Mobs/Species/Human/displacement.rsi
state: shoes
gloves-body-slim:
sizeMaps:
32:
sprite: _Sunrise/Mobs/Species/Human/displacement.rsi
state: gloves
pants-body-slim:
sizeMaps:
32:
sprite: _Sunrise/Mobs/Species/Human/displacement.rsi
state: panties
socks-body-slim:
sizeMaps:
32:
sprite: _Sunrise/Mobs/Species/Human/displacement.rsi
state: socks
bra-body-slim:
sizeMaps:
32:
sprite: _Sunrise/Mobs/Species/Human/displacement.rsi
state: bra
outerClothing-body-slim:
sizeMaps:
32:
sprite: _Sunrise/Mobs/Species/Human/displacement.rsi
state: outer
hardsuit-body-slim:
sizeMaps:
32:
sprite: _Sunrise/Mobs/Species/Human/displacement.rsi
state: hardsuit
# Sunrise edit ;3
- type: FootprintEmitter
leftBareFootState:
@ -92,3 +132,43 @@
32:
sprite: Mobs/Species/Human/displacement.rsi
state: jumpsuit-female
jumpsuit-body-slim:
sizeMaps:
32:
sprite: _Sunrise/Mobs/Species/Human/displacement.rsi
state: jumpsuit
shoes-body-slim:
sizeMaps:
32:
sprite: _Sunrise/Mobs/Species/Human/displacement.rsi
state: shoes
gloves-body-slim:
sizeMaps:
32:
sprite: _Sunrise/Mobs/Species/Human/displacement.rsi
state: gloves
pants-body-slim:
sizeMaps:
32:
sprite: _Sunrise/Mobs/Species/Human/displacement.rsi
state: panties
socks-body-slim:
sizeMaps:
32:
sprite: _Sunrise/Mobs/Species/Human/displacement.rsi
state: socks
bra-body-slim:
sizeMaps:
32:
sprite: _Sunrise/Mobs/Species/Human/displacement.rsi
state: bra
outerClothing-body-slim:
sizeMaps:
32:
sprite: _Sunrise/Mobs/Species/Human/displacement.rsi
state: outer
hardsuit-body-slim:
sizeMaps:
32:
sprite: _Sunrise/Mobs/Species/Human/displacement.rsi
state: hardsuit

View file

@ -32,6 +32,46 @@
32:
sprite: Mobs/Species/Human/displacement.rsi
state: jumpsuit-female
jumpsuit-body-slim:
sizeMaps:
32:
sprite: _Sunrise/Mobs/Species/Human/displacement.rsi
state: jumpsuit
shoes-body-slim:
sizeMaps:
32:
sprite: _Sunrise/Mobs/Species/Human/displacement.rsi
state: shoes
gloves-body-slim:
sizeMaps:
32:
sprite: _Sunrise/Mobs/Species/Human/displacement.rsi
state: gloves
pants-body-slim:
sizeMaps:
32:
sprite: _Sunrise/Mobs/Species/Human/displacement.rsi
state: panties
socks-body-slim:
sizeMaps:
32:
sprite: _Sunrise/Mobs/Species/Human/displacement.rsi
state: socks
bra-body-slim:
sizeMaps:
32:
sprite: _Sunrise/Mobs/Species/Human/displacement.rsi
state: bra
outerClothing-body-slim:
sizeMaps:
32:
sprite: _Sunrise/Mobs/Species/Human/displacement.rsi
state: outer
hardsuit-body-slim:
sizeMaps:
32:
sprite: _Sunrise/Mobs/Species/Human/displacement.rsi
state: hardsuit
# Sunrise-Start
- type: FootprintEmitter
- type: Carriable
@ -50,3 +90,43 @@
32:
sprite: Mobs/Species/Human/displacement.rsi
state: jumpsuit-female
jumpsuit-body-slim:
sizeMaps:
32:
sprite: _Sunrise/Mobs/Species/Human/displacement.rsi
state: jumpsuit
shoes-body-slim:
sizeMaps:
32:
sprite: _Sunrise/Mobs/Species/Human/displacement.rsi
state: shoes
gloves-body-slim:
sizeMaps:
32:
sprite: _Sunrise/Mobs/Species/Human/displacement.rsi
state: gloves
pants-body-slim:
sizeMaps:
32:
sprite: _Sunrise/Mobs/Species/Human/displacement.rsi
state: panties
socks-body-slim:
sizeMaps:
32:
sprite: _Sunrise/Mobs/Species/Human/displacement.rsi
state: socks
bra-body-slim:
sizeMaps:
32:
sprite: _Sunrise/Mobs/Species/Human/displacement.rsi
state: bra
outerClothing-body-slim:
sizeMaps:
32:
sprite: _Sunrise/Mobs/Species/Human/displacement.rsi
state: outer
hardsuit-body-slim:
sizeMaps:
32:
sprite: _Sunrise/Mobs/Species/Human/displacement.rsi
state: hardsuit

View file

@ -3,21 +3,21 @@
name: species-name-arachnid
roundStart: true
prototype: MobArachnid
sprites: MobArachnidSprites
bodyTypes:
- ArachnidNormal
# - ArachnidSlim
defaultSkinTone: "#385878"
markingLimits: MobArachnidMarkingLimits
dollPrototype: MobArachnidDummy
skinColoration: Hues
maleFirstNames: names_arachnid_first
femaleFirstNames: names_arachnid_first
maleLastNames: names_arachnid_last # Russian-LastnameGender
femaleLastNames: names_arachnid_last # Russian-LastnameGender
# Sunrise-Edit
#sexes:
#- Unsexed
maleLastNames: names_arachnid_last
femaleLastNames: names_arachnid_last
- type: speciesBaseSprites
id: MobArachnidSprites
- type: bodyType
id: ArachnidNormal
name: body-normal
sprites:
Head: MobArachnidHead
Snout: MobHumanoidAnyMarking
@ -35,12 +35,40 @@
LFoot: MobArachnidLFoot
RFoot: MobArachnidRFoot
- type: bodyType
id: ArachnidSlim
name: body-slim
sexRestrictions:
- Male
sprites:
Head: MobArachnidSlimHead
Snout: MobHumanoidAnyMarking
Chest: MobArachnidSlimTorso
HeadTop: MobHumanoidAnyMarking
HeadSide: MobHumanoidAnyMarking
Tail: MobHumanoidAnyMarking
Eyes: MobArachnidSlimEyes
LArm: MobArachnidSlimLArm
RArm: MobArachnidSlimRArm
LHand: MobArachnidSlimLHand
RHand: MobArachnidSlimRHand
LLeg: MobArachnidSlimLLeg
RLeg: MobArachnidSlimRLeg
LFoot: MobArachnidSlimLFoot
RFoot: MobArachnidSlimRFoot
- type: humanoidBaseSprite
id: MobArachnidEyes
baseSprite:
sprite: Mobs/Species/Arachnid/parts.rsi
state: eyes
- type: humanoidBaseSprite
id: MobArachnidSlimEyes
baseSprite:
sprite: Mobs/Species/Slim/arachnid.rsi
state: eyes
- type: markingPoints
id: MobArachnidMarkingLimits
onlyWhitelisted: true
@ -155,3 +183,75 @@
baseSprite:
sprite: Mobs/Species/Arachnid/parts.rsi
state: r_foot
- type: humanoidBaseSprite
id: MobArachnidSlimHead
baseSprite:
sprite: Mobs/Species/Slim/arachnid.rsi
state: head_slim
- type: humanoidBaseSprite
id: MobArachnidSlimHeadFemale
baseSprite:
sprite: Mobs/Species/Slim/arachnid.rsi
state: head_slim_f
- type: humanoidBaseSprite
id: MobArachnidSlimTorso
baseSprite:
sprite: Mobs/Species/Slim/arachnid.rsi
state: torso_slim
- type: humanoidBaseSprite
id: MobArachnidSlimTorsoFemale
baseSprite:
sprite: Mobs/Species/Slim/arachnid.rsi
state: torso_slim_f
- type: humanoidBaseSprite
id: MobArachnidSlimLLeg
baseSprite:
sprite: Mobs/Species/Slim/arachnid.rsi
state: l_leg_slim
- type: humanoidBaseSprite
id: MobArachnidSlimLArm
baseSprite:
sprite: Mobs/Species/Slim/arachnid.rsi
state: l_arm_slim
- type: humanoidBaseSprite
id: MobArachnidSlimLHand
baseSprite:
sprite: Mobs/Species/Slim/arachnid.rsi
state: l_hand_slim
- type: humanoidBaseSprite
id: MobArachnidSlimLFoot
baseSprite:
sprite: Mobs/Species/Slim/arachnid.rsi
state: l_foot_slim
- type: humanoidBaseSprite
id: MobArachnidSlimRLeg
baseSprite:
sprite: Mobs/Species/Slim/arachnid.rsi
state: r_leg_slim
- type: humanoidBaseSprite
id: MobArachnidSlimRArm
baseSprite:
sprite: Mobs/Species/Slim/arachnid.rsi
state: r_arm_slim
- type: humanoidBaseSprite
id: MobArachnidSlimRHand
baseSprite:
sprite: Mobs/Species/Slim/arachnid.rsi
state: r_hand_slim
- type: humanoidBaseSprite
id: MobArachnidSlimRFoot
baseSprite:
sprite: Mobs/Species/Slim/arachnid.rsi
state: r_foot_slim

View file

@ -3,7 +3,8 @@
name: species-name-diona
roundStart: true
prototype: MobDiona
sprites: MobDionaSprites
bodyTypes:
- DionaNormal
defaultSkinTone: "#cdb369"
markingLimits: MobDionaMarkingLimits
dollPrototype: MobDionaDummy
@ -14,8 +15,9 @@
femaleLastNames: DionaLast # Russian-LastnameGender
naming: TheFirstofLast
- type: speciesBaseSprites
id: MobDionaSprites
- type: bodyType
id: DionaNormal
name: body-normal
sprites:
Head: MobDionaHead
HeadTop: MobHumanoidAnyMarking

View file

@ -3,7 +3,9 @@
name: species-name-dwarf
roundStart: true
prototype: MobDwarf
sprites: MobHumanSprites
bodyTypes:
- HumanNormal
- HumanSlim
markingLimits: MobHumanMarkingLimits
dollPrototype: MobDwarfDummy
skinColoration: HumanToned

View file

@ -3,14 +3,16 @@
name: species-name-gingerbread
roundStart: false
prototype: MobGingerbread
sprites: MobGingerbreadSprites
bodyTypes:
- GingerbreadNormal
markingLimits: MobHumanMarkingLimits
dollPrototype: MobGingerbreadDummy
skinColoration: HumanToned
defaultSkinTone: "#9a7c5a"
- type: speciesBaseSprites
id: MobGingerbreadSprites
- type: bodyType
id: GingerbreadNormal
name: body-normal
sprites:
Head: MobGingerbreadHead
HeadTop: MobHumanoidAnyMarking

View file

@ -3,7 +3,9 @@
name: species-name-human
roundStart: true
prototype: MobHuman
sprites: MobHumanSprites
bodyTypes:
- HumanNormal
- HumanSlim
markingLimits: MobHumanMarkingLimits
dollPrototype: MobHumanDummy
skinColoration: HumanToned
@ -14,8 +16,9 @@
# be defined as a 'custom base layer'
# in either the mob's starting marking prototype,
# or it has to be added in C#.
- type: speciesBaseSprites
id: MobHumanSprites
- type: bodyType
id: HumanNormal
name: body-normal
sprites:
Special: MobHumanoidAnyMarking
Head: MobHumanHead
@ -35,6 +38,28 @@
LFoot: MobHumanLFoot
RFoot: MobHumanRFoot
- type: bodyType
id: HumanSlim
name: body-slim
sexRestrictions:
- Male
sprites:
Head: MobHumanSlimHead
Hair: MobHumanoidAnyMarking
FacialHair: MobHumanoidAnyMarking
Chest: MobHumanSlimTorso
HeadTop: MobHumanoidAnyMarking
Tail: MobHumanoidAnyMarking
Eyes: MobHumanoidEyes
LArm: MobHumanSlimLArm
RArm: MobHumanSlimRArm
LHand: MobHumanSlimLHand
RHand: MobHumanSlimRHand
LLeg: MobHumanSlimLLeg
RLeg: MobHumanSlimRLeg
LFoot: MobHumanSlimLFoot
RFoot: MobHumanSlimRFoot
- type: markingPoints
id: MobHumanMarkingLimits
points:
@ -162,3 +187,75 @@
baseSprite:
sprite: Mobs/Species/Human/parts.rsi
state: r_foot
- type: humanoidBaseSprite
id: MobHumanSlimHead
baseSprite:
sprite: Mobs/Species/Human/parts.rsi
state: head_slim
- type: humanoidBaseSprite
id: MobHumanSlimHeadFemale
baseSprite:
sprite: Mobs/Species/Human/parts.rsi
state: head_slim_f
- type: humanoidBaseSprite
id: MobHumanSlimTorso
baseSprite:
sprite: Mobs/Species/Human/parts.rsi
state: torso_slim
- type: humanoidBaseSprite
id: MobHumanSlimTorsoFemale
baseSprite:
sprite: Mobs/Species/Human/parts.rsi
state: torso_slim_f
- type: humanoidBaseSprite
id: MobHumanSlimLLeg
baseSprite:
sprite: Mobs/Species/Human/parts.rsi
state: l_leg_slim
- type: humanoidBaseSprite
id: MobHumanSlimLArm
baseSprite:
sprite: Mobs/Species/Human/parts.rsi
state: l_arm_slim
- type: humanoidBaseSprite
id: MobHumanSlimLHand
baseSprite:
sprite: Mobs/Species/Human/parts.rsi
state: l_hand_slim
- type: humanoidBaseSprite
id: MobHumanSlimLFoot
baseSprite:
sprite: Mobs/Species/Human/parts.rsi
state: l_foot_slim
- type: humanoidBaseSprite
id: MobHumanSlimRLeg
baseSprite:
sprite: Mobs/Species/Human/parts.rsi
state: r_leg_slim
- type: humanoidBaseSprite
id: MobHumanSlimRArm
baseSprite:
sprite: Mobs/Species/Human/parts.rsi
state: r_arm_slim
- type: humanoidBaseSprite
id: MobHumanSlimRHand
baseSprite:
sprite: Mobs/Species/Human/parts.rsi
state: r_hand_slim
- type: humanoidBaseSprite
id: MobHumanSlimRFoot
baseSprite:
sprite: Mobs/Species/Human/parts.rsi
state: r_foot_slim

View file

@ -3,18 +3,21 @@
name: species-name-moth
roundStart: true
prototype: MobMoth
sprites: MobMothSprites
bodyTypes:
- MothNormal
# - MothSlim
defaultSkinTone: "#ffda93"
markingLimits: MobMothMarkingLimits
dollPrototype: MobMothDummy
skinColoration: Hues
maleFirstNames: names_moth_first_male
femaleFirstNames: names_moth_first_female
maleLastNames: names_moth_last # Russian-LastnameGender
femaleLastNames: names_moth_last # Russian-LastnameGender
maleLastNames: names_moth_last
femaleLastNames: names_moth_last
- type: speciesBaseSprites
id: MobMothSprites
- type: bodyType
id: MothNormal
name: body-normal
sprites:
Head: MobMothHead
Snout: MobHumanoidAnyMarking
@ -32,12 +35,40 @@
LFoot: MobMothLFoot
RFoot: MobMothRFoot
- type: bodyType
id: MothSlim
name: body-slim
sexRestrictions:
- Male
sprites:
Head: MobMothSlimHead
Snout: MobHumanoidAnyMarking
Chest: MobMothSlimTorso
HeadTop: MobHumanoidAnyMarking
HeadSide: MobHumanoidAnyMarking
Tail: MobHumanoidAnyMarking
Eyes: MobMothSlimEyes
LArm: MobMothSlimLArm
RArm: MobMothSlimRArm
LHand: MobMothSlimLHand
RHand: MobMothSlimRHand
LLeg: MobMothSlimLLeg
RLeg: MobMothSlimRLeg
LFoot: MobMothSlimLFoot
RFoot: MobMothSlimRFoot
- type: humanoidBaseSprite
id: MobMothEyes
baseSprite:
sprite: Mobs/Species/Moth/parts.rsi
state: eyes
- type: humanoidBaseSprite
id: MobMothSlimEyes
baseSprite:
sprite: Mobs/Species/Slim/moth.rsi
state: eyes
- type: markingPoints
id: MobMothMarkingLimits
onlyWhitelisted: true
@ -158,3 +189,75 @@
baseSprite:
sprite: Mobs/Species/Moth/parts.rsi
state: r_foot
- type: humanoidBaseSprite
id: MobMothSlimHead
baseSprite:
sprite: Mobs/Species/Slim/moth.rsi
state: head_slim
- type: humanoidBaseSprite
id: MobMothSlimHeadFemale
baseSprite:
sprite: Mobs/Species/Slim/moth.rsi
state: head_slim_f
- type: humanoidBaseSprite
id: MobMothSlimTorso
baseSprite:
sprite: Mobs/Species/Slim/moth.rsi
state: torso_slim
- type: humanoidBaseSprite
id: MobMothSlimTorsoFemale
baseSprite:
sprite: Mobs/Species/Slim/moth.rsi
state: torso_slim_f
- type: humanoidBaseSprite
id: MobMothSlimLLeg
baseSprite:
sprite: Mobs/Species/Slim/moth.rsi
state: l_leg_slim
- type: humanoidBaseSprite
id: MobMothSlimLArm
baseSprite:
sprite: Mobs/Species/Slim/moth.rsi
state: l_arm_slim
- type: humanoidBaseSprite
id: MobMothSlimLHand
baseSprite:
sprite: Mobs/Species/Slim/moth.rsi
state: l_hand_slim
- type: humanoidBaseSprite
id: MobMothSlimLFoot
baseSprite:
sprite: Mobs/Species/Slim/moth.rsi
state: l_foot_slim
- type: humanoidBaseSprite
id: MobMothSlimRLeg
baseSprite:
sprite: Mobs/Species/Slim/moth.rsi
state: r_leg_slim
- type: humanoidBaseSprite
id: MobMothSlimRArm
baseSprite:
sprite: Mobs/Species/Slim/moth.rsi
state: r_arm_slim
- type: humanoidBaseSprite
id: MobMothSlimRHand
baseSprite:
sprite: Mobs/Species/Slim/moth.rsi
state: r_hand_slim
- type: humanoidBaseSprite
id: MobMothSlimRFoot
baseSprite:
sprite: Mobs/Species/Slim/moth.rsi
state: r_foot_slim

View file

@ -3,7 +3,9 @@
name: species-name-reptilian
roundStart: true
prototype: MobReptilian
sprites: MobReptilianSprites
bodyTypes:
- ReptilianNormal
# - ReptilianSlim
defaultSkinTone: "#34a223"
markingLimits: MobReptilianMarkingLimits
dollPrototype: MobReptilianDummy
@ -12,8 +14,9 @@
femaleFirstNames: names_reptilian_female
naming: FirstDashFirst
- type: speciesBaseSprites
id: MobReptilianSprites
- type: bodyType
id: ReptilianNormal
name: body-normal
sprites:
Head: MobReptilianHead
Snout: MobHumanoidAnyMarking
@ -31,6 +34,28 @@
LFoot: MobReptilianLFoot
RFoot: MobReptilianRFoot
- type: bodyType
id: ReptilianSlim
name: body-slim
sexRestrictions:
- Male
sprites:
Head: MobReptilianSlimHead
Snout: MobHumanoidAnyMarking
Chest: MobReptilianSlimTorso
HeadTop: MobHumanoidAnyMarking
HeadSide: MobHumanoidAnyMarking
Tail: MobHumanoidAnyMarking
Eyes: MobHumanoidEyes
LArm: MobReptilianSlimLArm
RArm: MobReptilianSlimRArm
LHand: MobReptilianSlimLHand
RHand: MobReptilianSlimRHand
LLeg: MobReptilianSlimLLeg
RLeg: MobReptilianSlimRLeg
LFoot: MobReptilianSlimLFoot
RFoot: MobReptilianSlimRFoot
- type: markingPoints
id: MobReptilianMarkingLimits
onlyWhitelisted: true
@ -148,3 +173,75 @@
baseSprite:
sprite: Mobs/Species/Reptilian/parts.rsi
state: r_foot
- type: humanoidBaseSprite
id: MobReptilianSlimHead
baseSprite:
sprite: Mobs/Species/Slim/lizard.rsi
state: head_slim
- type: humanoidBaseSprite
id: MobReptilianSlimHeadFemale
baseSprite:
sprite: Mobs/Species/Slim/lizard.rsi
state: head_slim_f
- type: humanoidBaseSprite
id: MobReptilianSlimTorso
baseSprite:
sprite: Mobs/Species/Slim/lizard.rsi
state: torso_slim
- type: humanoidBaseSprite
id: MobReptilianSlimTorsoFemale
baseSprite:
sprite: Mobs/Species/Slim/lizard.rsi
state: torso_slim_f
- type: humanoidBaseSprite
id: MobReptilianSlimLLeg
baseSprite:
sprite: Mobs/Species/Slim/lizard.rsi
state: l_leg_slim
- type: humanoidBaseSprite
id: MobReptilianSlimLArm
baseSprite:
sprite: Mobs/Species/Slim/lizard.rsi
state: l_arm_slim
- type: humanoidBaseSprite
id: MobReptilianSlimLHand
baseSprite:
sprite: Mobs/Species/Slim/lizard.rsi
state: l_hand_slim
- type: humanoidBaseSprite
id: MobReptilianSlimLFoot
baseSprite:
sprite: Mobs/Species/Slim/lizard.rsi
state: l_foot_slim
- type: humanoidBaseSprite
id: MobReptilianSlimRLeg
baseSprite:
sprite: Mobs/Species/Slim/lizard.rsi
state: r_leg_slim
- type: humanoidBaseSprite
id: MobReptilianSlimRArm
baseSprite:
sprite: Mobs/Species/Slim/lizard.rsi
state: r_arm_slim
- type: humanoidBaseSprite
id: MobReptilianSlimRHand
baseSprite:
sprite: Mobs/Species/Slim/lizard.rsi
state: r_hand_slim
- type: humanoidBaseSprite
id: MobReptilianSlimRFoot
baseSprite:
sprite: Mobs/Species/Slim/lizard.rsi
state: r_foot_slim

View file

@ -3,7 +3,8 @@
name: species-name-skeleton
roundStart: false
prototype: MobSkeletonPerson
sprites: MobSkeletonSprites
bodyTypes:
- SkeletonNormal
defaultSkinTone: "#fff9e2"
markingLimits: MobHumanMarkingLimits
maleFirstNames: skeletonNamesFirst
@ -11,8 +12,9 @@
dollPrototype: MobSkeletonPersonDummy
skinColoration: TintedHues
- type: speciesBaseSprites
id: MobSkeletonSprites
- type: bodyType
id: SkeletonNormal
name: body-normal
sprites:
Head: MobSkeletonHead
Chest: MobSkeletonTorso

View file

@ -3,21 +3,24 @@
name: species-name-slime
roundStart: true
prototype: MobSlimePerson
sprites: MobSlimeSprites
bodyTypes:
- SlimeNormal
# - SlimeSlim
defaultSkinTone: "#b8b8b8"
markingLimits: MobSlimeMarkingLimits
dollPrototype: MobSlimePersonDummy
skinColoration: Hues
- type: speciesBaseSprites
id: MobSlimeSprites
- type: bodyType
id: SlimeNormal
name: body-normal
sprites:
Head: MobSlimeHead
Hair: MobSlimeMarkingFollowSkin
FacialHair: MobSlimeMarkingFollowSkin
Chest: MobSlimeTorso
HeadTop: MobHumanoidAnyMarking # Sunrise-Sponsors
Tail: MobHumanoidAnyMarking # Sunrise-Sponsors
HeadTop: MobHumanoidAnyMarking
Tail: MobHumanoidAnyMarking
Eyes: MobHumanoidEyes
LArm: MobSlimeLArm
RArm: MobSlimeRArm
@ -28,6 +31,28 @@
LFoot: MobSlimeLFoot
RFoot: MobSlimeRFoot
- type: bodyType
id: SlimeSlim
name: body-slim
sexRestrictions:
- Male
sprites:
Head: MobSlimeSlimHead
Hair: MobSlimeMarkingFollowSkin
FacialHair: MobSlimeMarkingFollowSkin
Chest: MobSlimeSlimTorso
HeadTop: MobHumanoidAnyMarking
Tail: MobHumanoidAnyMarking
Eyes: MobHumanoidEyes
LArm: MobSlimeSlimLArm
RArm: MobSlimeSlimRArm
LHand: MobSlimeSlimLHand
RHand: MobSlimeSlimRHand
LLeg: MobSlimeSlimLLeg
RLeg: MobSlimeSlimRLeg
LFoot: MobSlimeSlimLFoot
RFoot: MobSlimeSlimRFoot
- type: markingPoints
id: MobSlimeMarkingLimits
points:
@ -37,11 +62,11 @@
FacialHair:
points: 1
required: false
Tail: # :despair:
points: 1 # Sunrise-Sponsors
Tail:
points: 1
required: false
HeadTop: # :skull:
points: 1 # Sunrise-Sponsors
HeadTop:
points: 1
required: false
Chest:
points: 1
@ -141,3 +166,75 @@
baseSprite:
sprite: Mobs/Species/Slime/parts.rsi
state: r_foot
- type: humanoidBaseSprite
id: MobSlimeSlimHead
baseSprite:
sprite: Mobs/Species/Slim/slime.rsi
state: head_slim
- type: humanoidBaseSprite
id: MobSlimeSlimHeadFemale
baseSprite:
sprite: Mobs/Species/Slim/slime.rsi
state: head_slim_f
- type: humanoidBaseSprite
id: MobSlimeSlimTorso
baseSprite:
sprite: Mobs/Species/Slim/slime.rsi
state: torso_slim
- type: humanoidBaseSprite
id: MobSlimeSlimTorsoFemale
baseSprite:
sprite: Mobs/Species/Slim/slime.rsi
state: torso_slim_f
- type: humanoidBaseSprite
id: MobSlimeSlimLLeg
baseSprite:
sprite: Mobs/Species/Slim/slime.rsi
state: l_leg_slim
- type: humanoidBaseSprite
id: MobSlimeSlimLArm
baseSprite:
sprite: Mobs/Species/Slim/slime.rsi
state: l_arm_slim
- type: humanoidBaseSprite
id: MobSlimeSlimLHand
baseSprite:
sprite: Mobs/Species/Slim/slime.rsi
state: l_hand_slim
- type: humanoidBaseSprite
id: MobSlimeSlimLFoot
baseSprite:
sprite: Mobs/Species/Slim/slime.rsi
state: l_foot_slim
- type: humanoidBaseSprite
id: MobSlimeSlimRLeg
baseSprite:
sprite: Mobs/Species/Slim/slime.rsi
state: r_leg_slim
- type: humanoidBaseSprite
id: MobSlimeSlimRArm
baseSprite:
sprite: Mobs/Species/Slim/slime.rsi
state: r_arm_slim
- type: humanoidBaseSprite
id: MobSlimeSlimRHand
baseSprite:
sprite: Mobs/Species/Slim/slime.rsi
state: r_hand_slim
- type: humanoidBaseSprite
id: MobSlimeSlimRFoot
baseSprite:
sprite: Mobs/Species/Slim/slime.rsi
state: r_foot_slim

View file

@ -3,7 +3,8 @@
name: Terminator
roundStart: false
prototype: MobTerminatorEndoskeleton
sprites: MobTerminatorSprites
bodyTypes:
- TerminatorNormal
defaultSkinTone: "#fff9e2"
markingLimits: MobHumanMarkingLimits
maleFirstNames: skeletonNamesFirst
@ -11,8 +12,9 @@
dollPrototype: MobSkeletonPersonDummy
skinColoration: TintedHues
- type: speciesBaseSprites
id: MobTerminatorSprites
- type: bodyType
id: TerminatorNormal
name: body-normal
sprites:
Head: MobTerminatorHead
Chest: MobTerminatorTorso

View file

@ -3,7 +3,8 @@
name: species-name-vox
roundStart: true
prototype: MobVox
sprites: MobVoxSprites
bodyTypes:
- VoxNormal
markingLimits: MobVoxMarkingLimits
dollPrototype: MobVoxDummy
skinColoration: VoxFeathers
@ -14,8 +15,9 @@
sexes:
- Unsexed
- type: speciesBaseSprites
id: MobVoxSprites
- type: bodyType
id: VoxNormal
name: body-normal
sprites:
Head: MobVoxHead
Snout: MobHumanoidAnyMarking

View file

@ -40,6 +40,46 @@
32:
sprite: Mobs/Species/Human/displacement.rsi
state: jumpsuit-female
jumpsuit-body-slim:
sizeMaps:
32:
sprite: _Sunrise/Mobs/Species/Human/displacement.rsi
state: jumpsuit
shoes-body-slim:
sizeMaps:
32:
sprite: _Sunrise/Mobs/Species/Human/displacement.rsi
state: shoes
gloves-body-slim:
sizeMaps:
32:
sprite: _Sunrise/Mobs/Species/Human/displacement.rsi
state: gloves
pants-body-slim:
sizeMaps:
32:
sprite: _Sunrise/Mobs/Species/Human/displacement.rsi
state: panties
socks-body-slim:
sizeMaps:
32:
sprite: _Sunrise/Mobs/Species/Human/displacement.rsi
state: socks
bra-body-slim:
sizeMaps:
32:
sprite: _Sunrise/Mobs/Species/Human/displacement.rsi
state: bra
outerClothing-body-slim:
sizeMaps:
32:
sprite: _Sunrise/Mobs/Species/Human/displacement.rsi
state: outer
hardsuit-body-slim:
sizeMaps:
32:
sprite: _Sunrise/Mobs/Species/Human/displacement.rsi
state: hardsuit
- type: Fixtures
fixtures:
fix1:

View file

@ -3,7 +3,9 @@
name: species-name-demon
roundStart: true
prototype: MobDemon
sprites: MobDemonSprites
bodyTypes:
- DemonNormal
# - DemonSlim
defaultSkinTone: "#34a223"
markingLimits: MobDemonMarkingLimits
dollPrototype: MobDemonDummy
@ -14,8 +16,9 @@
femaleLastNames: names_last_female
naming: firstlast
- type: speciesBaseSprites
id: MobDemonSprites
- type: bodyType
id: DemonNormal
name: body-normal
sprites:
Head: MobDemonHead
Hair: MobHumanoidAnyMarking
@ -35,6 +38,30 @@
LFoot: MobDemonLFoot
RFoot: MobDemonRFoot
- type: bodyType
id: DemonSlim
name: body-slim
sexRestrictions:
- Male
sprites:
Head: MobDemonSlimHead
Hair: MobHumanoidAnyMarking
FacialHair: MobHumanoidAnyMarking
Snout: MobHumanoidAnyMarking
Chest: MobDemonSlimTorso
HeadTop: MobHumanoidAnyMarking
HeadSide: MobHumanoidAnyMarking
Tail: MobDemonTail
Eyes: MobHumanoidEyes
LArm: MobDemonSlimLArm
RArm: MobDemonSlimRArm
LHand: MobDemonSlimLHand
RHand: MobDemonSlimRHand
LLeg: MobDemonSlimLLeg
RLeg: MobDemonSlimRLeg
LFoot: MobDemonSlimLFoot
RFoot: MobDemonSlimRFoot
- type: markingPoints
id: MobDemonMarkingLimits
points:
@ -155,3 +182,75 @@
baseSprite:
sprite: _Sunrise/Mobs/Species/Demon/parts.rsi
state: tail
- type: humanoidBaseSprite
id: MobDemonSlimHead
baseSprite:
sprite: Mobs/Species/Slim/demon.rsi
state: head_slim
- type: humanoidBaseSprite
id: MobDemonSlimHeadFemale
baseSprite:
sprite: Mobs/Species/Slim/demon.rsi
state: head_slim_f
- type: humanoidBaseSprite
id: MobDemonSlimTorso
baseSprite:
sprite: Mobs/Species/Slim/demon.rsi
state: torso_slim
- type: humanoidBaseSprite
id: MobDemonSlimTorsoFemale
baseSprite:
sprite: Mobs/Species/Slim/demon.rsi
state: torso_slim_f
- type: humanoidBaseSprite
id: MobDemonSlimLLeg
baseSprite:
sprite: Mobs/Species/Slim/demon.rsi
state: l_leg_slim
- type: humanoidBaseSprite
id: MobDemonSlimLArm
baseSprite:
sprite: Mobs/Species/Slim/demon.rsi
state: l_arm_slim
- type: humanoidBaseSprite
id: MobDemonSlimLHand
baseSprite:
sprite: Mobs/Species/Slim/demon.rsi
state: l_hand_slim
- type: humanoidBaseSprite
id: MobDemonSlimLFoot
baseSprite:
sprite: Mobs/Species/Slim/demon.rsi
state: l_foot_slim
- type: humanoidBaseSprite
id: MobDemonSlimRLeg
baseSprite:
sprite: Mobs/Species/Slim/demon.rsi
state: r_leg_slim
- type: humanoidBaseSprite
id: MobDemonSlimRArm
baseSprite:
sprite: Mobs/Species/Slim/demon.rsi
state: r_arm_slim
- type: humanoidBaseSprite
id: MobDemonSlimRHand
baseSprite:
sprite: Mobs/Species/Slim/demon.rsi
state: r_hand_slim
- type: humanoidBaseSprite
id: MobDemonSlimRFoot
baseSprite:
sprite: Mobs/Species/Slim/demon.rsi
state: r_foot_slim

View file

@ -3,7 +3,9 @@
name: species-name-felinid
roundStart: true
prototype: MobFelinid
sprites: MobHumanSprites
bodyTypes:
- HumanNormal
- HumanSlim
markingLimits: MobFelinidMarkingLimits
dollPrototype: MobFelinidDummy
skinColoration: HumanToned

View file

@ -4,14 +4,16 @@
name: species-name-xeno
roundStart: true
prototype: MobHumanoidXeno
sprites: MobHumanoidXenoSprites
bodyTypes:
- HumanoidXenoNormal
markingLimits: MobHumanoidXenoMarkingLimits
dollPrototype: MobXenoDummy
skinColoration: TintedHues
sponsorOnly: true
- type: speciesBaseSprites
id: MobHumanoidXenoSprites
- type: bodyType
id: HumanoidXenoNormal
name: body-normal
sprites:
Head: MobHumanoidXenoHead
Chest: MobHumanoidXenoTorso

View file

@ -4,14 +4,16 @@
name: species-name-predator
roundStart: true
prototype: MobPredator
sprites: MobPredatorSprites
bodyTypes:
- PredatorNormal
markingLimits: MobPredatorMarkingLimits
dollPrototype: MobPredatorDummy
skinColoration: None
sponsorOnly: true
- type: speciesBaseSprites
id: MobPredatorSprites
- type: bodyType
id: PredatorNormal
name: body-normal
sprites:
Head: MobPredatorHead
Chest: MobPredatorTorso

View file

@ -3,13 +3,15 @@
name: species-name-swine
roundStart: true
prototype: MobSwine
sprites: MobSwineSprites
bodyTypes:
- SwineNormal
markingLimits: MobSwineMarkingLimits
dollPrototype: MobSwineDummy
skinColoration: None
- type: speciesBaseSprites
id: MobSwineSprites
- type: bodyType
id: SwineNormal
name: body-normal
sprites:
Head: MobSwineHead
Hair: MobHumanoidAnyMarking

View file

@ -3,7 +3,9 @@
name: species-name-tajaran
roundStart: true
prototype: MobTajaran
sprites: MobTajaranSprites
bodyTypes:
- TajaranNormal
# - TajaranSlim
markingLimits: MobTajaranMarkingLimits
dollPrototype: MobTajaranDummy
skinColoration: Hues
@ -16,8 +18,9 @@
oldAge: 46
maxAge: 49
- type: speciesBaseSprites
id: MobTajaranSprites
- type: bodyType
id: TajaranNormal
name: body-normal
sprites:
Head: MobTajaranHead
Hair: MobHumanoidAnyMarking
@ -36,6 +39,29 @@
HeadTop: MobHumanoidAnyMarking
Snout: MobHumanoidAnyMarking
- type: bodyType
id: TajaranSlim
name: body-slim
sexRestrictions:
- Male
sprites:
Head: MobTajaranSlimHead
Hair: MobHumanoidAnyMarking
FacialHair: MobHumanoidAnyMarking
Chest: MobTajaranSlimTorso
Eyes: MobTajaranEyes
LArm: MobTajaranSlimLArm
RArm: MobTajaranSlimRArm
LHand: MobTajaranSlimLHand
RHand: MobTajaranSlimRHand
LLeg: MobTajaranSlimLLeg
RLeg: MobTajaranSlimRLeg
LFoot: MobTajaranSlimLFoot
RFoot: MobTajaranSlimRFoot
Tail: MobTajaranTail
HeadTop: MobHumanoidAnyMarking
Snout: MobHumanoidAnyMarking
- type: markingPoints
id: MobTajaranMarkingLimits
onlyWhitelisted: true
@ -150,4 +176,76 @@
id: MobTajaranRFoot
baseSprite:
sprite: _Sunrise/Mobs/Species/Tajaran/parts.rsi
state: r_foot
state: r_foot
- type: humanoidBaseSprite
id: MobTajaranSlimHead
baseSprite:
sprite: Mobs/Species/Slim/tajaran.rsi
state: head_slim
- type: humanoidBaseSprite
id: MobTajaranSlimHeadFemale
baseSprite:
sprite: Mobs/Species/Slim/tajaran.rsi
state: head_slim_f
- type: humanoidBaseSprite
id: MobTajaranSlimTorso
baseSprite:
sprite: Mobs/Species/Slim/tajaran.rsi
state: torso_slim
- type: humanoidBaseSprite
id: MobTajaranSlimTorsoFemale
baseSprite:
sprite: Mobs/Species/Slim/tajaran.rsi
state: torso_slim_f
- type: humanoidBaseSprite
id: MobTajaranSlimLLeg
baseSprite:
sprite: Mobs/Species/Slim/tajaran.rsi
state: l_leg_slim
- type: humanoidBaseSprite
id: MobTajaranSlimLArm
baseSprite:
sprite: Mobs/Species/Slim/tajaran.rsi
state: l_arm_slim
- type: humanoidBaseSprite
id: MobTajaranSlimLHand
baseSprite:
sprite: Mobs/Species/Slim/tajaran.rsi
state: l_hand_slim
- type: humanoidBaseSprite
id: MobTajaranSlimLFoot
baseSprite:
sprite: Mobs/Species/Slim/tajaran.rsi
state: l_foot_slim
- type: humanoidBaseSprite
id: MobTajaranSlimRLeg
baseSprite:
sprite: Mobs/Species/Slim/tajaran.rsi
state: r_leg_slim
- type: humanoidBaseSprite
id: MobTajaranSlimRArm
baseSprite:
sprite: Mobs/Species/Slim/tajaran.rsi
state: r_arm_slim
- type: humanoidBaseSprite
id: MobTajaranSlimRHand
baseSprite:
sprite: Mobs/Species/Slim/tajaran.rsi
state: r_hand_slim
- type: humanoidBaseSprite
id: MobTajaranSlimRFoot
baseSprite:
sprite: Mobs/Species/Slim/tajaran.rsi
state: r_foot_slim

View file

@ -3,14 +3,17 @@
name: species-name-foxes
roundStart: true
prototype: MobVulpkanin
sprites: MobVulpkaninSprites
bodyTypes:
- VulpkaninNormal
# - VulpkaninSlim
defaultSkinTone: "#FFBBC3"
markingLimits: MobVulpkaninMarkingLimits
dollPrototype: MobVulpkaninDummy
skinColoration: Hues
- type: speciesBaseSprites
id: MobVulpkaninSprites
- type: bodyType
id: VulpkaninNormal
name: body-normal
sprites:
Head: MobVulpkaninHead
Hair: MobHumanoidAnyMarking
@ -30,6 +33,30 @@
LFoot: MobVulpkaninLFoot
RFoot: MobVulpkaninRFoot
- type: bodyType
id: VulpkaninSlim
name: body-slim
sexRestrictions:
- Male
sprites:
Head: MobVulpkaninSlimHead
Hair: MobHumanoidAnyMarking
FacialHair: MobHumanoidAnyMarking
Snout: MobHumanoidAnyMarking
Chest: MobVulpkaninSlimTorso
HeadTop: MobHumanoidAnyMarking
HeadSide: MobHumanoidAnyMarking
Tail: MobHumanoidAnyMarking
Eyes: MobHumanoidEyes
LArm: MobVulpkaninSlimLArm
RArm: MobVulpkaninSlimRArm
LHand: MobVulpkaninSlimLHand
RHand: MobVulpkaninSlimRHand
LLeg: MobVulpkaninSlimLLeg
RLeg: MobVulpkaninSlimRLeg
LFoot: MobVulpkaninSlimLFoot
RFoot: MobVulpkaninSlimRFoot
- type: markingPoints
id: MobVulpkaninMarkingLimits
points:
@ -146,3 +173,75 @@
baseSprite:
sprite: _Sunrise/Mobs/Species/Vulpkanin/parts.rsi
state: r_foot
- type: humanoidBaseSprite
id: MobVulpkaninSlimHead
baseSprite:
sprite: Mobs/Species/Slim/vulpa.rsi
state: head_slim
- type: humanoidBaseSprite
id: MobVulpkaninSlimHeadFemale
baseSprite:
sprite: Mobs/Species/Slim/vulpa.rsi
state: head_slim_f
- type: humanoidBaseSprite
id: MobVulpkaninSlimTorso
baseSprite:
sprite: Mobs/Species/Slim/vulpa.rsi
state: torso_slim
- type: humanoidBaseSprite
id: MobVulpkaninSlimTorsoFemale
baseSprite:
sprite: Mobs/Species/Slim/vulpa.rsi
state: torso_slim_f
- type: humanoidBaseSprite
id: MobVulpkaninSlimLLeg
baseSprite:
sprite: Mobs/Species/Slim/vulpa.rsi
state: l_leg_slim
- type: humanoidBaseSprite
id: MobVulpkaninSlimLArm
baseSprite:
sprite: Mobs/Species/Slim/vulpa.rsi
state: l_arm_slim
- type: humanoidBaseSprite
id: MobVulpkaninSlimLHand
baseSprite:
sprite: Mobs/Species/Slim/vulpa.rsi
state: l_hand_slim
- type: humanoidBaseSprite
id: MobVulpkaninSlimLFoot
baseSprite:
sprite: Mobs/Species/Slim/vulpa.rsi
state: l_foot_slim
- type: humanoidBaseSprite
id: MobVulpkaninSlimRLeg
baseSprite:
sprite: Mobs/Species/Slim/vulpa.rsi
state: r_leg_slim
- type: humanoidBaseSprite
id: MobVulpkaninSlimRArm
baseSprite:
sprite: Mobs/Species/Slim/vulpa.rsi
state: r_arm_slim
- type: humanoidBaseSprite
id: MobVulpkaninSlimRHand
baseSprite:
sprite: Mobs/Species/Slim/vulpa.rsi
state: r_hand_slim
- type: humanoidBaseSprite
id: MobVulpkaninSlimRFoot
baseSprite:
sprite: Mobs/Species/Slim/vulpa.rsi
state: r_foot_slim

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.6 KiB

After

Width:  |  Height:  |  Size: 486 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 606 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 616 B

After

Width:  |  Height:  |  Size: 442 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 606 B

After

Width:  |  Height:  |  Size: 435 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 373 B

After

Width:  |  Height:  |  Size: 266 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 502 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 438 B

After

Width:  |  Height:  |  Size: 398 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 322 B

After

Width:  |  Height:  |  Size: 257 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 517 B

After

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

View file

@ -1,63 +1,118 @@
{
"version": 1,
"license": "CC-BY-SA-3.0",
"copyright": "https://github.com/tgstation/tgstation/blob/8024397cc81c5f47f74cf4279e35728487d0a1a7/icons/mob/human_parts_greyscale.dmi and modified by DrSmugleaf",
"size": {
"x": 32,
"y": 32
},
"states": [
{
"name": "full",
"directions": 4
"version": 2,
"license": "CC-BY-SA-3.0",
"copyright": "https://github.com/tgstation/tgstation/blob/8024397cc81c5f47f74cf4279e35728487d0a1a7/icons/mob/human_parts_greyscale.dmi and modified by DrSmugleaf",
"size": {
"x": 32,
"y": 32
},
{
"name": "head_f",
"directions": 4
},
{
"name": "head_m",
"directions": 4
},
{
"name": "l_arm",
"directions": 4
},
{
"name": "l_foot",
"directions": 4
},
{
"name": "l_hand",
"directions": 4
},
{
"name": "l_leg",
"directions": 4
},
{
"name": "r_arm",
"directions": 4
},
{
"name": "r_foot",
"directions": 4
},
{
"name": "r_hand",
"directions": 4
},
{
"name": "r_leg",
"directions": 4
},
{
"name": "torso_f",
"directions": 4
},
{
"name": "torso_m",
"directions": 4
}
]
"states": [
{
"name": "full"
},
{
"name": "head",
"directions": 4
},
{
"name": "head_m",
"directions": 4
},
{
"name": "head_f",
"directions": 4
},
{
"name": "l_arm",
"directions": 4
},
{
"name": "l_foot",
"directions": 4
},
{
"name": "l_hand",
"directions": 4
},
{
"name": "l_leg",
"directions": 4
},
{
"name": "r_arm",
"directions": 4
},
{
"name": "r_foot",
"directions": 4
},
{
"name": "r_hand",
"directions": 4
},
{
"name": "r_leg",
"directions": 4
},
{
"name": "torso",
"directions": 4
},
{
"name": "torso_m",
"directions": 4
},
{
"name": "torso_f",
"directions": 4
},
{
"name": "head_slim",
"directions": 4
},
{
"name": "head_slim_f",
"directions": 4
},
{
"name": "l_arm_slim",
"directions": 4
},
{
"name": "l_foot_slim",
"directions": 4
},
{
"name": "l_hand_slim",
"directions": 4
},
{
"name": "l_leg_slim",
"directions": 4
},
{
"name": "r_arm_slim",
"directions": 4
},
{
"name": "r_foot_slim",
"directions": 4
},
{
"name": "r_hand_slim",
"directions": 4
},
{
"name": "r_leg_slim",
"directions": 4
},
{
"name": "torso_slim",
"directions": 4
},
{
"name": "torso_slim_f",
"directions": 4
}
]
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 383 B

After

Width:  |  Height:  |  Size: 276 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 443 B

After

Width:  |  Height:  |  Size: 398 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 331 B

After

Width:  |  Height:  |  Size: 261 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 486 B

After

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.2 KiB

After

Width:  |  Height:  |  Size: 785 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.2 KiB

After

Width:  |  Height:  |  Size: 682 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 151 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 413 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 413 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 445 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 401 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 363 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 563 B

View file

@ -0,0 +1,63 @@
{
"version": 2,
"license": "CC-BY-SA-3.0",
"copyright": "https://github.com/tgstation/tgstation/blob/8024397cc81c5f47f74cf4279e35728487d0a1a7/icons/mob/human_parts_greyscale.dmi and modified by DrSmugleaf",
"size": {
"x": 32,
"y": 32
},
"states": [
{
"name": "head_slim",
"directions": 4
},
{
"name": "head_slim_f",
"directions": 4
},
{
"name": "l_arm_slim",
"directions": 4
},
{
"name": "l_foot_slim",
"directions": 4
},
{
"name": "l_hand_slim",
"directions": 4
},
{
"name": "l_leg_slim",
"directions": 4
},
{
"name": "r_arm_slim",
"directions": 4
},
{
"name": "r_foot_slim",
"directions": 4
},
{
"name": "r_hand_slim",
"directions": 4
},
{
"name": "r_leg_slim",
"directions": 4
},
{
"name": "torso_slim",
"directions": 4
},
{
"name": "torso_slim_f",
"directions": 4
},
{
"name": "eyes",
"directions": 4
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 504 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 397 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 364 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 552 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 884 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 867 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 648 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 547 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 398 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 347 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 624 B

View file

@ -0,0 +1,59 @@
{
"version": 2,
"license": "CC-BY-SA-3.0",
"copyright": "https://github.com/tgstation/tgstation/blob/8024397cc81c5f47f74cf4279e35728487d0a1a7/icons/mob/human_parts_greyscale.dmi and modified by DrSmugleaf",
"size": {
"x": 32,
"y": 32
},
"states": [
{
"name": "head_slim",
"directions": 4
},
{
"name": "head_slim_f",
"directions": 4
},
{
"name": "l_arm_slim",
"directions": 4
},
{
"name": "l_foot_slim",
"directions": 4
},
{
"name": "l_hand_slim",
"directions": 4
},
{
"name": "l_leg_slim",
"directions": 4
},
{
"name": "r_arm_slim",
"directions": 4
},
{
"name": "r_foot_slim",
"directions": 4
},
{
"name": "r_hand_slim",
"directions": 4
},
{
"name": "r_leg_slim",
"directions": 4
},
{
"name": "torso_slim",
"directions": 4
},
{
"name": "torso_slim_f",
"directions": 4
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 511 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 405 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 390 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 580 B

Some files were not shown because too many files have changed in this diff Show more