private static string SaveState_SaveToString(On.SaveState.orig_SaveToString orig, SaveState self)
        {
            if (!(self is CustomSaveState css))
            {
                return(orig(self));
            }

            StringBuilder sb         = new StringBuilder(orig(self));
            string        customData = css.SaveCustomToString();

            if (!string.IsNullOrEmpty(customData))
            {
                sb.Append("SLUGBASE<svB>");
                sb.Append(customData);
                sb.Append("<svA>");
            }
            customData = css.SaveCustomPermanentToString(false, false);
            if (!string.IsNullOrEmpty(customData))
            {
                sb.Append("SLUGBASEPERSISTENT<svB>");
                sb.Append(customData);
                sb.Append("<svA>");
            }

            return(sb.ToString());
        }
    private static string SaveState_SaveToString(On.SaveState.orig_SaveToString orig, SaveState self)
    {
        Debug.Log("SAVE!");
        string text  = string.Empty;
        string text2 = text;

        text = string.Concat(new object[]
        {
            text2,
            "SAV STATE NUMBER<svB>",
            self.saveStateNumber,
            "<svA>"
        });
        text2 = text;
        text  = string.Concat(new object[]
        {
            text2,
            "SEED<svB>",
            self.seed,
            "<svA>"
        });
        text2 = text;
        text  = string.Concat(new object[]
        {
            text2,
            "VERSION<svB>",
            self.gameVersion,
            "<svA>"
        });
        text2 = text;
        text  = string.Concat(new object[]
        {
            text2,
            "INITVERSION<svB>",
            self.initiatedInGameVersion,
            "<svA>"
        });
        text2 = text;
        text  = string.Concat(new object[]
        {
            text2,
            "WORLDVERSION<svB>",
            self.worldVersion,
            "<svA>"
        });
        text  = text + "DENPOS<svB>" + self.denPosition + "<svA>";
        text2 = text;
        text  = string.Concat(new object[]
        {
            text2,
            "CYCLENUM<svB>",
            self.cycleNumber,
            "<svA>"
        });
        text2 = text;
        text  = string.Concat(new object[]
        {
            text2,
            "FOOD<svB>",
            self.food,
            "<svA>"
        });
        text2 = text;
        text  = string.Concat(new object[]
        {
            text2,
            "NEXTID<svB>",
            self.nextIssuedID,
            "<svA>"
        });
        if (self.theGlow)
        {
            text += "HASTHEGLOW<svA>";
        }
        if (self.guideOverseerDead)
        {
            text += "GUIDEOVERSEERDEAD<svA>";
        }
        if (self.respawnCreatures.Count > 0)
        {
            text += "RESPAWNS<svB>";
            for (int i = 0; i < self.respawnCreatures.Count; i++)
            {
                text = text + self.respawnCreatures[i] + ((i >= self.respawnCreatures.Count - 1) ? string.Empty : ".");
            }
            text += "<svA>";
        }
        if (self.waitRespawnCreatures.Count > 0)
        {
            text += "WAITRESPAWNS<svB>";
            for (int j = 0; j < self.waitRespawnCreatures.Count; j++)
            {
                text = text + self.waitRespawnCreatures[j] + ((j >= self.waitRespawnCreatures.Count - 1) ? string.Empty : ".");
            }
            text += "<svA>";
        }
        if (self.creatureCommunitiesString != null)
        {
            text = text + "COMMUNITIES<svB>" + self.creatureCommunitiesString + "<svA>";
        }
        for (int k = 0; k < self.regionStates.Length; k++)
        {
            if (self.regionStates[k] != null)
            {
                text = text + "REGIONSTATE<svB>" + self.regionStates[k].SaveToString() + "<svA>";
            }
            else if (self.regionLoadStrings[k] != null)
            {
                text = text + "REGIONSTATE<svB>" + self.regionLoadStrings[k] + "<svA>";
            }
        }
        text = text + "DEATHPERSISTENTSAVEDATA<svB>" + self.deathPersistentSaveData.SaveToString(false, false) + "<svA>";
        string text3 = self.miscWorldSaveData.ToString();

        if (text3 != string.Empty)
        {
            text = text + "MISCWORLDSAVEDATA<svB>" + text3 + "<svA>";
        }
        if (self.swallowedItems != null)
        {
            text += "SWALLOWEDITEMS<svB>";
            for (int l = 0; l < self.swallowedItems.Length; l++)
            {
                text = text + self.swallowedItems[l] + ((l >= self.swallowedItems.Length - 1) ? string.Empty : "<svB>");
            }
            text += "<svA>";
        }
        if (self.dreamsState != null)
        {
            text = text + "DREAMSSTATE<svB>" + self.dreamsState.ToString() + "<svA>";
        }
        text2 = text;
        text  = string.Concat(new object[]
        {
            text2,
            "TOTFOOD<svB>",
            self.totFood,
            "<svA>"
        });
        text2 = text;
        text  = string.Concat(new object[]
        {
            text2,
            "TOTTIME<svB>",
            self.totTime,
            "<svA>"
        });
        text2 = text;
        text  = string.Concat(new object[]
        {
            text2,
            "CURRVERCYCLES<svB>",
            self.cyclesInCurrentWorldVersion,
            "<svA>"
        });
        if (self.kills.Count > 0)
        {
            text += "KILLS<svB>";
            for (int m = 0; m < self.kills.Count; m++)
            {
                text2 = text;
                text  = string.Concat(new object[]
                {
                    text2,
                    self.kills[m].Key,
                    "<svD>",
                    self.kills[m].Value,
                    (m >= self.kills.Count - 1) ? string.Empty : "<svC>"
                });
            }
            text += "<svA>";
        }
        if (self.redExtraCycles)
        {
            text += "REDEXTRACYCLES<svA>";
        }
        if (KarmaAppetite_ExtraInventory.SaveEnabled && KarmaAppetite_ExtraInventory.Inventories.Count > 0)
        {
            text += "EXTRAINVENTORY<svB>";
            int m = 0;

            foreach (var kvp in KarmaAppetite_ExtraInventory.Inventories)
            {
                if (kvp.Value.Count > 0)
                {
                    text = text + kvp.Key + "<svD>";

                    for (int n = 0; n < kvp.Value.Count; n++)
                    {
                        text2 = text;
                        text  = string.Concat(new object[]
                        {
                            text2,
                            kvp.Value[n].ToString(),
                            (n >= kvp.Value.Count - 1) ? string.Empty : "<svD>"
                        });
                    }

                    text += (m >= KarmaAppetite_ExtraInventory.Inventories.Count - 1) ? string.Empty : "svC";
                }
                m++;
            }
            text += "<svA>";
        }
        return(text);
    }