PlayerHeadProfiles.cs

Static lookup of per-player head appearance profiles (head shape, hair, beard, skin/hair/eye colors) keyed by player id, with fallback palettes and width/length shape helpers. Used by the soccer game's player head rendering.

Rough Code
using System;
using System.Collections.Generic;
using System.Linq;
namespace Socer;

// Authored from the existing portrait palette/silhouette. Identity is stable across duplicates.
public sealed record PlayerHeadProfile(int HeadShape,int HairStyle,int BeardStyle,string Skin,string Hair,string Eyes)
{ public string Signature=>$"{HeadShape}:{HairStyle}:{BeardStyle}:{Skin}:{Hair}:{Eyes}"; }
public static class PlayerHeadProfiles
{
    public const int Revision=6;
    public const int GenericShapes=6; public const int HeadShapes=19; public const int HairStyles=20; public const int BeardStyles=8;
    static Dictionary<string,PlayerHeadProfile> Profiles=Build();
    static readonly string[] FallbackSkins={"#f0c5a2","#dca780","#bd845f","#985e42","#754b39","#513a30"};
    static readonly string[] FallbackHair={"#211c1c","#35271f","#65452c","#b38b52","#8c482c"};
    static int loadedRevision;
    public static int Generation { get; private set; }=1;
    public static void Reload(){Profiles=Build();loadedRevision=Revision;Generation++;}
    static void EnsureCurrent(){if(loadedRevision!=Revision)Reload();}
    static Dictionary<string,PlayerHeadProfile> Build()=>new(StringComparer.Ordinal)
    {
        ["RU-00"]=new(5,15,0,"#e4b295","#967049","#496b74"),
        ["RU-01"]=new(0,19,7,"#b9845f","#2b221c","#496b74"),
        ["RU-02"]=new(3,14,0,"#d29a74","#6f4d30","#795b43"),
        ["RU-03"]=new(4,15,0,"#d29a74","#47342a","#795b43"),
        ["RU-04"]=new(3,3,0,"#d29a74","#47342a","#6b8ba0"),
        ["RU-05"]=new(4,4,0,"#b9845f","#c3a268","#6b8ba0"),
        ["RU-06"]=new(1,1,0,"#d29a74","#967049","#496b74"),
        ["RU-07"]=new(2,2,0,"#d29a74","#2b221c","#6b8ba0"),
        ["RU-08"]=new(3,3,3,"#b9845f","#47342a","#668167"),
        ["RU-09"]=new(4,4,0,"#e4b295","#967049","#668167"),
        ["RU-10"]=new(0,3,4,"#b9845f","#47342a","#496b74"),
        ["RU-11"]=new(5,2,0,"#e4b295","#6f4d30","#795b43"),
        ["RU-12"]=new(2,5,0,"#e4b295","#47342a","#496b74"),
        ["RU-13"]=new(1,4,6,"#b9845f","#2b221c","#496b74"),
        ["RU-14"]=new(2,19,0,"#e4b295","#967049","#5c4532"),
        ["RU-15"]=new(1,15,0,"#b9845f","#2b221c","#5c4532"),
        ["RU-16"]=new(4,2,0,"#d29a74","#47342a","#795b43"),
        ["RU-17"]=new(3,1,5,"#d29a74","#2b221c","#795b43"),
        ["RU-18"]=new(4,9,0,"#d29a74","#6f4d30","#668167"),
        ["RU-19"]=new(3,8,0,"#d29a74","#47342a","#668167"),
        ["RU-20"]=new(5,8,0,"#d29a74","#47342a","#6b8ba0"),
        ["RU-21"]=new(0,9,0,"#d29a74","#47342a","#668167"),
        ["RU-22"]=new(1,14,0,"#d29a74","#6f4d30","#668167"),
        ["RU-23"]=new(2,15,0,"#d29a74","#47342a","#668167"),
        ["RU-24"]=new(3,5,7,"#b9845f","#2b221c","#5c4532"),
        ["RU-25"]=new(4,19,0,"#d29a74","#967049","#5c4532"),
        ["RU-26"]=new(5,17,0,"#d29a74","#2b221c","#5c4532"),
        ["RU-27"]=new(0,8,6,"#b9845f","#2b221c","#795b43"),
        ["GB-00"]=new(1,9,0,"#d29a74","#6f4d30","#6b8ba0"),
        ["GB-01"]=new(2,14,0,"#d29a74","#967049","#6b8ba0"),
        ["GB-02"]=new(5,5,0,"#d29a74","#47342a","#496b74"),
        ["GB-03"]=new(0,8,0,"#d29a74","#47342a","#6b8ba0"),
        ["GB-04"]=new(3,4,3,"#835233","#2b221c","#496b74"),
        ["GB-05"]=new(4,5,0,"#d29a74","#6f4d30","#496b74"),
        ["GB-06"]=new(1,2,0,"#b9845f","#2b221c","#795b43"),
        ["GB-07"]=new(2,3,0,"#d29a74","#6f4d30","#795b43"),
        ["GB-08"]=new(3,4,0,"#835233","#171717","#795b43"),
        ["GB-09"]=new(4,13,1,"#b9845f","#2b221c","#795b43"),
        ["GB-10"]=new(2,9,0,"#d29a74","#6f4d30","#5c4532"),
        ["GB-11"]=new(1,8,0,"#9f6847","#171717","#5c4532"),
        ["GB-12"]=new(4,14,0,"#d29a74","#47342a","#795b43"),
        ["GB-13"]=new(3,9,3,"#835233","#2b221c","#795b43"),
        ["GB-14"]=new(0,4,0,"#d29a74","#2b221c","#496b74"),
        ["GB-15"]=new(5,15,7,"#b9845f","#6f4d30","#795b43"),
        ["GB-16"]=new(2,2,0,"#d29a74","#47342a","#6b8ba0"),
        ["GB-17"]=new(1,1,0,"#d29a74","#967049","#496b74"),
        ["GB-18"]=new(0,19,0,"#d29a74","#47342a","#6b8ba0"),
        ["GB-19"]=new(5,15,3,"#9f6847","#171717","#496b74"),
        ["GB-20"]=new(5,3,0,"#d29a74","#2b221c","#496b74"),
        ["GB-21"]=new(0,4,0,"#835233","#171717","#496b74"),
        ["GB-22"]=new(1,5,0,"#d29a74","#47342a","#496b74"),
        ["GB-23"]=new(2,8,0,"#d29a74","#6f4d30","#6b8ba0"),
        ["GB-24"]=new(1,19,7,"#d29a74","#2b221c","#5c4532"),
        ["GB-25"]=new(2,1,0,"#d29a74","#b74729","#795b43"),
        ["GB-26"]=new(3,2,0,"#d29a74","#2b221c","#795b43"),
        ["GB-27"]=new(4,3,0,"#9f6847","#2b221c","#795b43"),
        ["ES-00"]=new(4,14,2,"#d29a74","#2b221c","#668167"),
        ["ES-01"]=new(3,14,0,"#d29a74","#47342a","#668167"),
        ["ES-02"]=new(2,9,0,"#d29a74","#2b221c","#668167"),
        ["ES-03"]=new(1,8,0,"#d29a74","#47342a","#6b8ba0"),
        ["ES-04"]=new(2,2,0,"#d29a74","#2b221c","#795b43"),
        ["ES-05"]=new(1,1,1,"#b9845f","#47342a","#5c4532"),
        ["ES-06"]=new(0,19,0,"#d29a74","#2b221c","#5c4532"),
        ["ES-07"]=new(5,15,0,"#d29a74","#2b221c","#5c4532"),
        ["ES-08"]=new(2,2,0,"#d29a74","#47342a","#795b43"),
        ["ES-09"]=new(1,1,4,"#b9845f","#47342a","#795b43"),
        ["ES-10"]=new(3,4,3,"#b9845f","#2b221c","#668167"),
        ["ES-11"]=new(4,5,0,"#b9845f","#c3a268","#668167"),
        ["ES-12"]=new(5,8,0,"#d29a74","#2b221c","#5c4532"),
        ["ES-13"]=new(0,9,0,"#d29a74","#6f4d30","#5c4532"),
        ["ES-14"]=new(1,14,4,"#b9845f","#2b221c","#5c4532"),
        ["ES-15"]=new(2,15,0,"#d29a74","#2b221c","#795b43"),
        ["ES-16"]=new(3,15,0,"#d29a74","#2b221c","#795b43"),
        ["ES-17"]=new(4,19,3,"#9f6847","#2b221c","#795b43"),
        ["ES-18"]=new(1,14,0,"#d29a74","#2b221c","#795b43"),
        ["ES-19"]=new(2,15,0,"#d29a74","#2b221c","#496b74"),
        ["ES-20"]=new(2,5,0,"#d29a74","#2b221c","#496b74"),
        ["ES-21"]=new(1,4,0,"#d29a74","#2b221c","#795b43"),
        ["ES-22"]=new(4,9,0,"#d29a74","#2b221c","#496b74"),
        ["ES-23"]=new(3,8,0,"#d29a74","#2b221c","#496b74"),
        ["ES-24"]=new(4,4,5,"#b9845f","#2b221c","#5c4532"),
        ["ES-25"]=new(3,6,0,"#d29a74","#47342a","#5c4532"),
        ["ES-26"]=new(0,8,0,"#d29a74","#2b221c","#795b43"),
        ["ES-27"]=new(5,17,7,"#b9845f","#2b221c","#795b43"),
        ["FR-00"]=new(0,3,0,"#d29a74","#2b221c","#496b74"),
        ["FR-01"]=new(5,2,0,"#d29a74","#6f4d30","#496b74"),
        ["FR-02"]=new(4,2,0,"#d29a74","#2b221c","#795b43"),
        ["FR-03"]=new(3,1,0,"#d29a74","#2b221c","#795b43"),
        ["FR-04"]=new(4,9,0,"#633c28","#171717","#6b8ba0"),
        ["FR-05"]=new(3,8,5,"#b9845f","#2b221c","#6b8ba0"),
        ["FR-06"]=new(2,7,0,"#b9845f","#2b221c","#6b8ba0"),
        ["FR-07"]=new(1,11,0,"#d29a74","#2b221c","#496b74"),
        ["FR-08"]=new(2,19,0,"#d29a74","#967049","#5c4532"),
        ["FR-09"]=new(1,5,6,"#b9845f","#2b221c","#668167"),
        ["FR-10"]=new(5,4,0,"#d29a74","#2b221c","#5c4532"),
        ["FR-11"]=new(0,5,0,"#d29a74","#6f4d30","#5c4532"),
        ["FR-12"]=new(1,8,6,"#b9845f","#47342a","#5c4532"),
        ["FR-13"]=new(2,6,1,"#d29a74","#2b221c","#795b43"),
        ["FR-14"]=new(3,4,3,"#835233","#171717","#795b43"),
        ["FR-15"]=new(4,19,0,"#d29a74","#2b221c","#795b43"),
        ["FR-16"]=new(5,15,0,"#d29a74","#2b221c","#496b74"),
        ["FR-17"]=new(0,19,0,"#d29a74","#c3a268","#496b74"),
        ["FR-18"]=new(1,19,0,"#d29a74","#2b221c","#496b74"),
        ["FR-19"]=new(2,1,6,"#b9845f","#2b221c","#6b8ba0"),
        ["FR-20"]=new(0,9,6,"#835233","#171717","#5c4532"),
        ["FR-21"]=new(5,8,0,"#d29a74","#47342a","#5c4532"),
        ["FR-22"]=new(2,14,0,"#9f6847","#171717","#795b43"),
        ["FR-23"]=new(1,14,0,"#d29a74","#967049","#795b43"),
        ["FR-24"]=new(2,3,5,"#b9845f","#2b221c","#668167"),
        ["FR-25"]=new(1,2,0,"#835233","#171717","#668167"),
        ["FR-26"]=new(4,5,0,"#d29a74","#2b221c","#5c4532"),
        ["FR-27"]=new(3,4,7,"#b9845f","#47342a","#668167"),
        ["DE-00"]=new(3,1,0,"#d29a74","#6f4d30","#496b74"),
        ["DE-01"]=new(4,2,0,"#d29a74","#47342a","#496b74"),
        ["DE-02"]=new(5,3,0,"#e4b295","#967049","#496b74"),
        ["DE-03"]=new(0,4,5,"#d29a74","#2b221c","#6b8ba0"),
        ["DE-04"]=new(1,4,0,"#d29a74","#967049","#6b8ba0"),
        ["DE-05"]=new(2,5,0,"#d29a74","#47342a","#6b8ba0"),
        ["DE-06"]=new(3,8,0,"#d29a74","#47342a","#668167"),
        ["DE-07"]=new(4,9,0,"#d29a74","#47342a","#668167"),
        ["DE-08"]=new(1,4,0,"#d29a74","#2b221c","#668167"),
        ["DE-09"]=new(2,5,6,"#b9845f","#967049","#668167"),
        ["DE-10"]=new(4,1,0,"#d29a74","#2b221c","#668167"),
        ["DE-11"]=new(3,19,0,"#d29a74","#6f4d30","#668167"),
        ["DE-12"]=new(2,15,0,"#b9845f","#171717","#668167"),
        ["DE-13"]=new(1,14,4,"#b9845f","#47342a","#6b8ba0"),
        ["DE-14"]=new(2,4,0,"#d29a74","#47342a","#795b43"),
        ["DE-15"]=new(1,3,0,"#d29a74","#6f4d30","#5c4532"),
        ["DE-16"]=new(0,2,0,"#d29a74","#967049","#5c4532"),
        ["DE-17"]=new(5,1,0,"#d29a74","#47342a","#5c4532"),
        ["DE-18"]=new(2,4,0,"#d29a74","#2b221c","#496b74"),
        ["DE-19"]=new(1,3,0,"#d29a74","#6f4d30","#795b43"),
        ["DE-20"]=new(1,2,0,"#e4b295","#b74729","#496b74"),
        ["DE-21"]=new(2,3,0,"#d29a74","#2b221c","#496b74"),
        ["DE-22"]=new(5,19,0,"#d29a74","#967049","#795b43"),
        ["DE-23"]=new(0,1,3,"#d29a74","#2b221c","#496b74"),
        ["DE-24"]=new(5,5,0,"#b9845f","#171717","#6b8ba0"),
        ["DE-25"]=new(0,19,1,"#b9845f","#47342a","#668167"),
        ["DE-26"]=new(3,4,0,"#d29a74","#2b221c","#6b8ba0"),
        ["DE-27"]=new(4,5,0,"#b9845f","#c3a268","#6b8ba0"),
        ["BR-00"]=new(0,5,0,"#b9845f","#2b221c","#6b8ba0"),
        ["BR-01"]=new(5,4,3,"#9f6847","#2b221c","#6b8ba0"),
        ["BR-02"]=new(4,4,0,"#b9845f","#2b221c","#496b74"),
        ["BR-03"]=new(3,3,0,"#b9845f","#171717","#496b74"),
        ["BR-04"]=new(2,2,4,"#b9845f","#2b221c","#496b74"),
        ["BR-05"]=new(1,1,2,"#835233","#47342a","#795b43"),
        ["BR-06"]=new(0,19,0,"#d29a74","#2b221c","#795b43"),
        ["BR-07"]=new(5,15,5,"#b9845f","#2b221c","#795b43"),
        ["BR-08"]=new(2,2,0,"#b9845f","#2b221c","#795b43"),
        ["BR-09"]=new(1,1,0,"#9f6847","#171717","#795b43"),
        ["BR-10"]=new(5,8,1,"#b9845f","#2b221c","#795b43"),
        ["BR-11"]=new(0,7,3,"#835233","#171717","#795b43"),
        ["BR-12"]=new(1,4,6,"#9f6847","#2b221c","#795b43"),
        ["BR-13"]=new(2,19,1,"#b9845f","#2b221c","#496b74"),
        ["BR-14"]=new(1,8,7,"#835233","#2b221c","#668167"),
        ["BR-15"]=new(2,6,0,"#d29a74","#2b221c","#5c4532"),
        ["BR-16"]=new(3,4,4,"#d29a74","#2b221c","#5c4532"),
        ["BR-17"]=new(4,5,6,"#b9845f","#6f4d30","#5c4532"),
        ["BR-18"]=new(1,2,0,"#d29a74","#2b221c","#6b8ba0"),
        ["BR-19"]=new(2,3,0,"#d29a74","#2b221c","#668167"),
        ["BR-20"]=new(4,2,0,"#d29a74","#2b221c","#5c4532"),
        ["BR-21"]=new(3,1,1,"#9f6847","#171717","#5c4532"),
        ["BR-22"]=new(0,3,7,"#835233","#171717","#795b43"),
        ["BR-23"]=new(5,3,0,"#d29a74","#2b221c","#795b43"),
        ["BR-24"]=new(2,5,0,"#d29a74","#2b221c","#496b74"),
        ["BR-25"]=new(1,4,0,"#b9845f","#171717","#795b43"),
        ["BR-26"]=new(4,9,1,"#b9845f","#2b221c","#6b8ba0"),
        ["BR-27"]=new(3,8,6,"#b9845f","#171717","#496b74"),
        ["AR-00"]=new(3,15,0,"#d29a74","#2b221c","#668167"),
        ["AR-01"]=new(4,15,4,"#b9845f","#2b221c","#668167"),
        ["AR-02"]=new(5,19,0,"#d29a74","#47342a","#668167"),
        ["AR-03"]=new(0,1,0,"#d29a74","#2b221c","#5c4532"),
        ["AR-04"]=new(1,2,0,"#d29a74","#6f4d30","#5c4532"),
        ["AR-05"]=new(2,3,5,"#b9845f","#2b221c","#5c4532"),
        ["AR-06"]=new(3,4,0,"#d29a74","#2b221c","#795b43"),
        ["AR-07"]=new(4,4,0,"#d29a74","#2b221c","#795b43"),
        ["AR-08"]=new(5,5,0,"#d29a74","#47342a","#795b43"),
        ["AR-09"]=new(0,8,0,"#d29a74","#47342a","#496b74"),
        ["AR-10"]=new(4,14,0,"#d29a74","#2b221c","#795b43"),
        ["AR-11"]=new(3,9,4,"#9f6847","#2b221c","#795b43"),
        ["AR-12"]=new(2,8,2,"#d29a74","#2b221c","#5c4532"),
        ["AR-13"]=new(1,8,0,"#d29a74","#6f4d30","#5c4532"),
        ["AR-14"]=new(2,1,0,"#d29a74","#2b221c","#496b74"),
        ["AR-15"]=new(1,1,0,"#d29a74","#2b221c","#496b74"),
        ["AR-16"]=new(0,19,3,"#d29a74","#2b221c","#496b74"),
        ["AR-17"]=new(5,15,0,"#d29a74","#2b221c","#795b43"),
        ["AR-18"]=new(0,5,0,"#d29a74","#2b221c","#668167"),
        ["AR-19"]=new(5,4,0,"#d29a74","#47342a","#6b8ba0"),
        ["AR-20"]=new(1,15,7,"#d29a74","#47342a","#795b43"),
        ["AR-21"]=new(2,19,0,"#d29a74","#2b221c","#795b43"),
        ["AR-22"]=new(5,14,0,"#d29a74","#6f4d30","#5c4532"),
        ["AR-23"]=new(0,14,0,"#d29a74","#2b221c","#5c4532"),
        ["AR-24"]=new(5,3,1,"#b9845f","#47342a","#496b74"),
        ["AR-25"]=new(0,3,0,"#d29a74","#2b221c","#496b74"),
        ["AR-26"]=new(3,1,0,"#d29a74","#2b221c","#795b43"),
        ["AR-27"]=new(4,2,0,"#d29a74","#2b221c","#496b74"),
        ["JP-00"]=new(0,14,0,"#d29a74","#2b221c","#5c4532"),
        ["JP-01"]=new(5,9,0,"#d29a74","#2b221c","#5c4532"),
        ["JP-02"]=new(2,19,0,"#d29a74","#47342a","#795b43"),
        ["JP-03"]=new(1,15,0,"#e4b295","#2b221c","#795b43"),
        ["JP-04"]=new(2,5,0,"#d29a74","#2b221c","#668167"),
        ["JP-05"]=new(1,4,0,"#e4b295","#2b221c","#668167"),
        ["JP-06"]=new(4,8,0,"#d29a74","#2b221c","#5c4532"),
        ["JP-07"]=new(3,10,0,"#d29a74","#2b221c","#668167"),
        ["JP-08"]=new(2,5,0,"#d29a74","#2b221c","#6b8ba0"),
        ["JP-09"]=new(1,4,0,"#d29a74","#171717","#6b8ba0"),
        ["JP-10"]=new(5,4,0,"#d29a74","#2b221c","#5c4532"),
        ["JP-11"]=new(0,5,0,"#d29a74","#c3a268","#5c4532"),
        ["JP-12"]=new(3,2,0,"#d29a74","#2b221c","#668167"),
        ["JP-13"]=new(4,3,0,"#d29a74","#2b221c","#5c4532"),
        ["JP-14"]=new(3,9,0,"#e4b295","#2b221c","#496b74"),
        ["JP-15"]=new(4,14,0,"#d29a74","#2b221c","#496b74"),
        ["JP-16"]=new(1,8,0,"#d29a74","#2b221c","#795b43"),
        ["JP-17"]=new(2,9,0,"#d29a74","#2b221c","#795b43"),
        ["JP-18"]=new(1,1,0,"#d29a74","#2b221c","#6b8ba0"),
        ["JP-19"]=new(0,15,0,"#d29a74","#2b221c","#496b74"),
        ["JP-20"]=new(2,9,0,"#d29a74","#2b221c","#5c4532"),
        ["JP-21"]=new(1,8,0,"#d29a74","#2b221c","#5c4532"),
        ["JP-22"]=new(0,5,0,"#d29a74","#2b221c","#5c4532"),
        ["JP-23"]=new(5,4,0,"#e4b295","#47342a","#668167"),
        ["JP-24"]=new(0,6,0,"#d29a74","#2b221c","#496b74"),
        ["JP-25"]=new(5,15,0,"#e4b295","#2b221c","#795b43"),
        ["JP-26"]=new(4,19,0,"#d29a74","#2b221c","#795b43"),
        ["JP-27"]=new(3,4,0,"#d29a74","#2b221c","#795b43"),
        ["PRO-01"]=new(2,3,3,"#b9845f","#47342a","#5c4532"),
        ["PRO-02"]=new(5,4,5,"#b9845f","#47342a","#668167"),
        ["PRO-03"]=new(0,1,1,"#d29a74","#2b221c","#668167"),
        ["PRO-04"]=new(5,11,1,"#d29a74","#2b221c","#795b43"),
        ["PRO-05"]=new(9,16,1,"#b9845f","#2b221c","#5c4532"),
        ["PRO-06"]=new(15,1,3,"#633c28","#171717","#5c4532"),
        ["PRO-07"]=new(12,17,0,"#b9845f","#171717","#5c4532"),
        ["PRO-08"]=new(3,2,1,"#d29a74","#47342a","#496b74"),
        ["PRO-09"]=new(8,7,5,"#b9845f","#2b221c","#5c4532"),
        ["PRO-10"]=new(17,6,0,"#835233","#171717","#5c4532"),
        ["PRO-11"]=new(11,2,3,"#e4b295","#6f4d30","#5c4532"),
        ["PRO-12"]=new(4,12,0,"#edc0a6","#c7ad78","#72a7bc"),
        ["PRO-13"]=new(14,3,0,"#e4b295","#47342a","#5c4532"),
        ["PRO-14"]=new(4,3,0,"#d29a74","#967049","#795b43"),
        ["PRO-15"]=new(3,5,3,"#d29a74","#47342a","#5c4532"),
        ["PRO-16"]=new(0,6,0,"#9f6847","#2b221c","#795b43"),
        ["PRO-17"]=new(5,3,3,"#d29a74","#47342a","#795b43"),
        ["PRO-18"]=new(4,1,1,"#d29a74","#2b221c","#5c4532"),
        ["PRO-19"]=new(10,5,1,"#f0c5a2","#967049","#6b8ba0"),
        ["PRO-20"]=new(13,2,0,"#e4b295","#2b221c","#5c4532"),
        ["PRO-21"]=new(18,17,0,"#9f6847","#171717","#5c4532"),
        ["PRO-22"]=new(5,17,0,"#d29a74","#47342a","#5c4532"),
        ["PRO-23"]=new(0,9,5,"#e2b295","#302822","#79604a"),
        ["PRO-24"]=new(6,1,0,"#9f6847","#171717","#5c4532"),
        ["PRO-25"]=new(2,2,3,"#d29a74","#6f4d30","#795b43"),
        ["PRO-26"]=new(3,3,0,"#e4b295","#967049","#795b43"),
        ["PRO-27"]=new(4,2,0,"#d29a74","#47342a","#496b74"),
        ["PRO-28"]=new(1,3,1,"#b9845f","#2b221c","#496b74"),
        ["PRO-29"]=new(2,3,1,"#d29a74","#47342a","#496b74"),
        ["PRO-30"]=new(4,2,1,"#d29a74","#47342a","#5c4532"),
        ["PRO-31"]=new(3,3,1,"#e4b295","#6f4d30","#668167"),
        ["PRO-32"]=new(2,2,3,"#d29a74","#c3a268","#668167"),
        ["PRO-33"]=new(1,11,0,"#9f6847","#2b221c","#668167"),
        ["PRO-34"]=new(2,1,3,"#b9845f","#47342a","#795b43"),
        ["PRO-35"]=new(1,1,1,"#b9845f","#2b221c","#795b43"),
        ["PRO-36"]=new(0,3,0,"#e4b295","#2b221c","#5c4532"),
        ["PRO-37"]=new(5,6,3,"#d29a74","#2b221c","#5c4532"),
        ["PRO-38"]=new(2,2,1,"#d29a74","#967049","#496b74"),
        ["PRO-39"]=new(1,3,0,"#e4b295","#967049","#496b74"),
        ["PRO-40"]=new(5,3,1,"#d29a74","#47342a","#496b74"),
        ["PRO-41"]=new(0,3,0,"#d29a74","#47342a","#496b74"),
        ["PRO-42"]=new(3,3,3,"#d29a74","#47342a","#795b43"),
        ["PRO-43"]=new(4,15,0,"#e4b295","#967049","#496b74"),
        ["PRO-44"]=new(1,15,0,"#e4b295","#47342a","#795b43"),
        ["PRO-45"]=new(2,6,0,"#d29a74","#2b221c","#795b43"),
        ["PRO-46"]=new(5,2,0,"#e4b295","#967049","#5c4532"),
        ["PRO-47"]=new(0,3,3,"#d29a74","#2b221c","#5c4532"),
        ["PRO-48"]=new(3,11,0,"#9f6847","#2b221c","#668167"),
        ["PRO-49"]=new(4,1,1,"#9f6847","#2b221c","#5c4532"),
        ["PRO-50"]=new(4,3,1,"#d29a74","#47342a","#668167"),
        ["PRO-51"]=new(3,6,1,"#9f6847","#2b221c","#6b8ba0"),
        ["PRO-52"]=new(16,14,0,"#835233","#211b18","#5c4532"),
        ["PRO-53"]=new(7,4,0,"#d29a74","#2b221c","#5c4532"),
        // Every combination below already has near, far, hair and beard native
        // exports. Reuse the library; palette and silhouette identify the player.
        ["PRO-58"]=new(3,1,0,"#cb9575","#28211e","#68563e"),
        ["PRO-59"]=new(3,3,3,"#d6a988","#61432f","#75634b"),
        ["PRO-60"]=new(2,11,0,"#8c593e","#211b19","#4f3d2c"),
        ["PRO-61"]=new(1,3,1,"#d0a17f","#2b231e","#6d573d"),
        ["PRO-62"]=new(4,3,0,"#e6b99a","#94704f","#668894"),
        ["PRO-63"]=new(5,13,0,"#e1b293","#9c7650","#796148"),
        ["PRO-64"]=new(3,1,0,"#6f4634","#1d1917","#493629"),
        ["PRO-65"]=new(4,15,0,"#edbfa0","#c0a071","#6e99a7"),
        ["PRO-66"]=new(3,6,1,"#c99773","#30251f","#776142"),
        ["PRO-67"]=new(0,9,0,"#ddb18f","#211d1b","#4b382b"),
        ["PRO-68"]=new(5,11,0,"#8c5b40","#231c18","#58412e"),
        ["PRO-69"]=new(2,3,3,"#d4a68b","#4c342b","#6b5843"),
        ["PRO-70"]=new(5,3,0,"#e2b395","#443128","#6a94a4"),
        ["PRO-71"]=new(2,1,3,"#c99779","#2c241f","#715a3e"),
        ["PRO-72"]=new(3,3,1,"#d5a88c","#372a21","#655039"),
        ["PRO-73"]=new(4,13,1,"#e6b896","#9a704b","#7694a4"),
        [PlayerAppearance.ZlatanId]=new(5,16,0,"#d8ad8c","#302821","#604c36"),
        [PlayerAppearance.PirloId]=new(0,13,0,"#d4a58a","#3b3028","#705c43"),
        [PlayerAppearance.MaldiniId]=new(5,13,0,"#d3a68c","#47382b","#668fa1"),
        [PlayerAppearance.BuffonId]=new(2,2,0,"#d6a582","#42382e","#5b4d39"),
    };
    public static IReadOnlyDictionary<string,PlayerHeadProfile> All {get{EnsureCurrent();return Profiles;}}
    public static PlayerHeadProfile Find(string id){EnsureCurrent();return id!=null && Profiles.TryGetValue(id,out var p)?p:null;}
    public static float Width(int shape)=>shape switch{1=>.96f,2=>1.04f,3=>1.05f,4=>.93f,5=>1.02f,6=>1.12f,7=>.97f,8=>1.02f,9=>.97f,10=>1.05f,11=>.95f,12=>.99f,13=>.96f,14=>.95f,15=>1.06f,16=>.96f,17=>1.06f,18=>.98f,_=>1};
    public static float Length(int shape)=>shape switch{1=>1.08f,2=>.98f,3=>.92f,4=>1.05f,5=>1.10f,6=>.86f,7=>1.05f,8=>1.02f,9=>1.13f,10=>1.02f,11=>1.12f,12=>1.04f,13=>1.05f,14=>1.14f,15=>1.02f,16=>1.10f,17=>.95f,18=>1.03f,_=>1};
    public static string Skin(string id,int fallback=-1,int slot=0)=>Find(id)?.Skin??FallbackSkins[fallback>=0?Math.Clamp(fallback,0,5):Math.Abs(slot)%6];
    public static string Hair(string id,int fallback=-1)=>Find(id)?.Hair??FallbackHair[fallback>=0?Math.Clamp(fallback,0,4):0];
}