static void Postfix(ref string ___debugName, ref CharacterUIMeshBase ____characterMesh, ref CharacterState characterState)
 {
     if (___debugName.StartsWith("Character_TrainSteward"))
     {
         OverlayImage = CreateFaceObject(____characterMesh.GetSortingLayer().LayerID());
         (____characterMesh as CharacterUIMeshSpine).OrNull()?.AttachToBone(OverlayImage.transform, VfxAtLoc.Location.BoneStatusEffectSlot1);
     }
 }
        static void Postfix(ref CharacterUIMeshBase ____characterMesh, ref int ___TopAllMeshSortingOrder, ref SpriteRenderer ___spriteRenderer)
        {
            CharacterOverlayImage overlayImage = ___spriteRenderer.GetComponentInChildren <CharacterOverlayImage>();

            if (overlayImage != null)
            {
                overlayImage.SetSortingOrder(____characterMesh.GetSortingLayer().LayerID(), ___TopAllMeshSortingOrder);
            }
        }
        private static CharacterOverlayImage CreateFaceObject(int sortingLayerID)
        {
            GameObject parent = new GameObject("Face");
            GameObject child  = new GameObject("Face_Image");

            child.transform.SetParent(parent.transform);

            CharacterOverlayImage overlayImage   = parent.AddComponent <CharacterOverlayImage>();
            SpriteRenderer        spriteRenderer = child.AddComponent <SpriteRenderer>();

            spriteRenderer.transform.localPosition += new Vector3(-.65f, -.65f, -.1f);
            spriteRenderer.transform.localScale     = new Vector3(.456f, .456f);

            string path = SpookyStewards.SpriteFilePaths[RandomManager.Range(0, SpookyStewards.SpriteFilePaths.Length, RngId.NonDeterministic)];

            spriteRenderer.sprite         = LoadNewSprite(path);
            spriteRenderer.sortingLayerID = sortingLayerID;
            spriteRenderer.sortingOrder   = 1;

            overlayImage.SetSpriteRenderer(spriteRenderer);
            return(overlayImage);
        }