public static bool RenderVampire(PawnRenderer __instance, Vector3 rootLoc, float angle, bool renderBody,
                                         Rot4 bodyFacing, RotDrawMode bodyDrawType, PawnRenderFlags flags)
        {
            Quaternion quat = Quaternion.AngleAxis(angle, Vector3.up);

            Pawn p = Traverse.Create(__instance).Field("pawn").GetValue <Pawn>();

            if (p?.Map?.GetComponent <MapComponent_HiddenTracker>()?.hiddenCharacters?.Contains(p) ?? false)
            {
                //<texPath>Things/Pawn/Animal/Tenebrous/tenebrous</texPath>
                //<drawSize>2.0</drawSize>
                if (VampireGraphicUtility.invisibleForm == null)
                {
                    var graphicData = new GraphicData();
                    graphicData.drawSize = new Vector2(2, 2);
                    graphicData.texPath  = "Things/Pawn/Hidden/hidden";
                    VampireGraphicUtility.invisibleForm = graphicData.Graphic;
                }
                __instance.graphics.nakedGraphic = VampireGraphicUtility.invisibleForm;
                return(false);
            }
            if (p?.Map?.GetComponent <MapComponent_HiddenTracker>()?.toRemoveCharacters?.Contains(p) ?? false)
            {
                __instance.graphics.nakedGraphic = null;
                if (p.IsVampire() && p.VampComp() is CompVampire vampCompy)
                {
                    vampCompy.atDirty = true;
                }
                p?.Map?.GetComponent <MapComponent_HiddenTracker>()?.toRemoveCharacters.Remove(p);
                //return false;
            }
            if (p?.VampComp() is CompVampire v)
            {
                if (v.Transformed)
                {
                    if (__instance.graphics.nakedGraphic == null || v.CurFormGraphic == null || v.atDirty)
                    {
                        if (v.CurrentForm != null)
                        {
                            if (v.CurrentForm.GetCompProperties <CompAnimated.CompProperties_Animated>() is CompAnimated.CompProperties_Animated Props)
                            {
                                Graphic curGraphic = v.CurFormGraphic;
                                v.CurFormGraphic = CompAnimated.CompAnimated.ResolveCurGraphic(p, Props, ref curGraphic, ref v.atCurIndex, ref v.atCurTicks, ref v.atDirty, false);
                            }
                            else
                            {
                                v.CurFormGraphic = v.CurrentForm.bodyGraphicData.Graphic;
                            }
                        }
                        else
                        {
                            v.CurFormGraphic = p.kindDef.lifeStages[p.ageTracker.CurLifeStageIndex].bodyGraphicData.Graphic;// v.CurrentForm.lifeStages[0].bodyGraphicData.Graphic;
                        }
                        __instance.graphics.nakedGraphic = v.CurFormGraphic;
                        __instance.graphics.ResolveApparelGraphics();
                    }
                    Mesh mesh = null;
                    if (renderBody)
                    {
                        Vector3 loc = rootLoc;
                        loc.y += 0.0046875f;
                        if (bodyDrawType == RotDrawMode.Dessicated && !p.RaceProps.Humanlike && __instance.graphics.dessicatedGraphic != null && !flags.HasFlag(PawnRenderFlags.Portrait))
                        {
                            __instance.graphics.dessicatedGraphic.Draw(loc, bodyFacing, p);
                        }
                        else
                        {
                            mesh = __instance.graphics.nakedGraphic.MeshAt(bodyFacing);
                            List <Material> list = __instance.graphics.MatsBodyBaseAt(bodyFacing, bodyDrawType);
                            for (int i = 0; i < list.Count; i++)
                            {
                                Material damagedMat  = __instance.graphics.flasher.GetDamagedMat(list[i]);
                                Vector3  scaleVector = new Vector3(loc.x, loc.y, loc.z);
                                if (flags.HasFlag(PawnRenderFlags.Portrait))
                                {
                                    scaleVector.x *= 1f + (1f - (flags.HasFlag(PawnRenderFlags.Portrait) ?
                                                                 v.CurrentForm.bodyGraphicData.drawSize :
                                                                 v.CurrentForm.bodyGraphicData.drawSize)
                                                           .x);
                                    scaleVector.z *= 1f + (1f - (flags.HasFlag(PawnRenderFlags.Portrait) ?
                                                                 v.CurrentForm.bodyGraphicData.drawSize :
                                                                 v.CurrentForm.bodyGraphicData.drawSize)
                                                           .y);
                                }
                                else
                                {
                                    scaleVector = new Vector3(0, 0, 0);
                                }
                                GenDraw.DrawMeshNowOrLater(mesh, loc + scaleVector, quat, damagedMat, flags.FlagSet(PawnRenderFlags.DrawNow));
                                //HasFlag(PawnRenderFlags.Portrait));

                                //GenDraw.DrawMeshNowOrLater(mesh, Matrix4x4.TRS(loc + scaleVector, quat, Vector3.one), damagedMat, flags.FlagSet(PawnRenderFlags.DrawNow));

                                loc.y += 0.0046875f;
                            }
                            if (bodyDrawType == RotDrawMode.Fresh)
                            {
                                Vector3 drawLoc = rootLoc;
                                drawLoc.y += 0.01875f;
                                Traverse.Create(__instance).Field("woundOverlays").GetValue <PawnWoundDrawer>().RenderOverBody(drawLoc, mesh, quat, flags.FlagSet(PawnRenderFlags.DrawNow), BodyTypeDef.WoundLayer.Body, bodyFacing);
                                //Traverse.Create(__instance).Field("woundOverlays").GetValue<PawnWoundDrawer>().RenderOverBody(drawLoc, mesh, quat, flags.HasFlag(PawnRenderFlags.Portrait), BodyTypeDef.WoundLayer.Body, bodyFacing);
                            }
                        }
                    }
                    return(false);
                }
                else if (!v.Transformed && v.CurFormGraphic != null)
                {
                    v.CurFormGraphic = null;
                    __instance.graphics.ResolveAllGraphics();
                }
            }
            return(true);
        }