using Robust.Shared.Prototypes;
using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype;
namespace Content.Shared.Humanoid.Prototypes;
[Prototype]
public sealed partial class SpeciesPrototype : IPrototype
{
///
/// Prototype ID of the species.
///
[IdDataField]
public string ID { get; private set; } = default!;
///
/// User visible name of the species.
///
[DataField(required: true)]
public string Name { get; private set; } = default!;
///
/// Descriptor. Unused...? This is intended
/// for an eventual integration into IdentitySystem
/// (i.e., young human person, young lizard person, etc.)
///
[DataField]
public string Descriptor { get; private set; } = "humanoid";
///
/// Whether the species is available "at round start" (In the character editor)
///
[DataField(required: true)]
public bool RoundStart { get; private set; } = false;
// The below two are to avoid fetching information about the species from the entity
// prototype.
// This one here is a utility field, and is meant to *avoid* having to duplicate
// the massive SpriteComponent found in every species.
// Species implementors can just override SpriteComponent if they want a custom
// sprite layout, and leave this null. Keep in mind that this will disable
// sprite accessories.
[DataField("sprites")]
public string SpriteSet { get; private set; } = default!;
///
/// Default skin tone for this species. This applies for non-human skin tones.
///
[DataField]
public Color DefaultSkinTone { get; private set; } = Color.White;
///
/// Default human skin tone for this species. This applies for human skin tones.
/// See for the valid range of skin tones.
///
[DataField]
public int DefaultHumanSkinTone { get; private set; } = 20;
///
/// The limit of body markings that you can place on this species.
///
[DataField("markingLimits")]
public string MarkingPoints { get; private set; } = default!;
///
/// Humanoid species variant used by this entity.
///
[DataField(required: true)]
public EntProtoId Prototype { get; private set; } = default!;
///
/// Prototype used by the species for the dress-up doll in various menus.
///
[DataField(required: true)]
public EntProtoId DollPrototype { get; private set; } = default!;
///
/// Method of skin coloration used by the species.
///
[DataField(required: true)]
public HumanoidSkinColor SkinColoration { get; private set; }
[DataField]
public string MaleFirstNames { get; private set; } = "NamesFirstMale";
[DataField]
public string FemaleFirstNames { get; private set; } = "NamesFirstFemale";
[DataField]
public string LastNames { get; private set; } = "NamesLast";
[DataField]
public SpeciesNaming Naming { get; private set; } = SpeciesNaming.FirstLast;
[DataField]
public List Sexes { get; private set; } = new() { Sex.Male, Sex.Female };
///
/// Characters younger than this are too young to be hired by Nanotrasen.
///
[DataField]
public int MinAge = 18;
///
/// Characters younger than this appear young.
///
[DataField]
public int YoungAge = 30;
///
/// Characters older than this appear old. Characters in between young and old age appear middle aged.
///
[DataField]
public int OldAge = 60;
///
/// Characters cannot be older than this. Only used for restrictions...
/// although imagine if ghosts could age people WYCI...
///
[DataField]
public int MaxAge = 120;
}
public enum SpeciesNaming : byte
{
First,
FirstLast,
FirstDashFirst,
TheFirstofLast,
}