Perhaps there's more you could implement in the editor, here's the sourcecode of the class SaveGame :)
Code:
public class SaveGame
{
// Methods
public void CheckMemory(BinaryReader reader, int slot)
{
reader.ReadSingle();
long num = reader.ReadInt64();
if ((Game1.menu.prompt != promptDialogue.Save) && (num >= Game1.menu.mostRecentTime))
{
Game1.menu.mostRecentTime = num;
Game1.stats.saveSlot = Game1.menu.tempSaveSlot = (byte) slot;
}
Game1.menu.saveCompletion[slot] = reader.ReadInt32();
if (reader.ReadBoolean())
{
Game1.menu.canNewGamePlus = true;
}
Game1.menu.saveRegionName[slot] = reader.ReadString();
Game1.menu.saveHP[slot] = reader.ReadInt32();
Game1.menu.saveMaxHP[slot] = (int) Math.Min((float) (reader.ReadInt32() * reader.ReadSingle()), (float) 9999f);
Game1.menu.saveLevel[slot] = reader.ReadInt32();
Game1.menu.saveGold[slot] = reader.ReadInt32();
Game1.menu.saveDifficulty[slot] = reader.ReadByte();
reader.ReadByte();
Game1.menu.saveGameClock[slot] = reader.ReadSingle();
}
public int GetItemArrayID(List<SaveItem> itemList, int newID, string newUniqueID)
{
int num = -1;
for (int i = 0; i < itemList.Count; i++)
{
if ((itemList[i].ID == newID) && ((newUniqueID == null) || (itemList[i].UniqueID == newUniqueID)))
{
num = i;
}
}
return num;
}
public SaveItem GetItemID(List<SaveItem> itemList, string newID)
{
try
{
int num = -1;
for (int i = 0; i < itemList.Count; i++)
{
if (itemList[i].UniqueID == newID)
{
num = i;
break;
}
}
return itemList[num];
}
catch
{
return null;
}
}
public void Read(BinaryReader reader)
{
Character character = Game1.character[0];
Game1.Build = reader.ReadSingle();
reader.ReadInt64();
Game1.stats.Completion = reader.ReadInt32();
Game1.stats.gameComplete = reader.ReadBoolean();
Game1.events.regionDisplayName = reader.ReadString();
character.HP = character.pHP = character.HP = reader.ReadInt32();
character.MaxHP = reader.ReadInt32();
reader.ReadSingle();
Game1.stats.LEVEL = reader.ReadInt32();
Game1.stats.Gold = reader.ReadInt32();
Game1.stats.gameDifficulty = reader.ReadByte();
Game1.stats.startDifficulty = reader.ReadByte();
Game1.stats.gameClock = reader.ReadSingle();
Game1.stats.XP = reader.ReadInt32();
Game1.stats.prevLevelXP = reader.ReadInt32();
Game1.stats.nextLevelXP = reader.ReadInt32();
Game1.stats.skillPoints = reader.ReadInt32();
Game1.stats.canEarnAchievements = reader.ReadBoolean();
string str = reader.ReadString();
if ((Game1.GamerServices && (Game1.xblaManager.MeSignedInGamer() != null)) && (str != Game1.xblaManager.MeSignedInGamer().Gamertag))
{
Game1.stats.canEarnAchievements = false;
}
for (int i = 0; i < Game1.stats.upgrade.Length; i++)
{
Game1.stats.upgrade[i] = reader.ReadByte();
}
for (int j = 0; j < Game1.stats.upgradedStat.Length; j++)
{
Game1.stats.upgradedStat[j] = reader.ReadByte();
}
Game1.stats.projectileType = reader.ReadInt32();
Game1.stats.curCharge = reader.ReadSingle();
for (int k = 0; k < Game1.stats.Equipment.Length; k++)
{
Game1.stats.Equipment[k] = reader.ReadByte();
}
for (int m = 0; m < Game1.stats.EquipBluePrint.Length; m++)
{
Game1.stats.EquipBluePrint[m] = reader.ReadByte();
}
for (int n = 0; n < Game1.stats.shopEquipment.Length; n++)
{
Game1.stats.shopEquipment[n] = reader.ReadByte();
}
for (int num6 = 0; num6 < Game1.stats.Material.Length; num6++)
{
Game1.stats.Material[num6] = reader.ReadInt32();
}
for (int num7 = 0; num7 < Game1.stats.shopMaterial.Length; num7++)
{
Game1.stats.shopMaterial[num7] = reader.ReadInt32();
}
for (int num8 = 0; num8 < Game1.stats.StructureBuilt.Length; num8++)
{
Game1.stats.StructureBuilt[num8] = reader.ReadBoolean();
}
Game1.hud.shopRestockTime = reader.ReadSingle();
Game1.stats.attack = reader.ReadInt32();
Game1.stats.defense = reader.ReadInt32();
Game1.stats.fidget = reader.ReadInt32();
Game1.stats.luck = reader.ReadInt32();
Game1.stats.attackEquip = reader.ReadInt32();
Game1.stats.defenseEquip = reader.ReadInt32();
Game1.stats.newFidgetEquip = reader.ReadInt32();
Game1.stats.luckEquip = reader.ReadInt32();
Game1.stats.newHealtRegen = reader.ReadInt32();
Game1.stats.currentItem = reader.ReadInt32();
Game1.stats.currentPendant = reader.ReadInt32();
Game1.stats.currentAugment = reader.ReadInt32();
Game1.stats.currentArmor = reader.ReadInt32();
Game1.stats.currentRingLeft = reader.ReadInt32();
Game1.stats.currentRingRight = reader.ReadInt32();
for (int num9 = 0; num9 < Game1.cManager.challengeArenas.Count; num9++)
{
Game1.cManager.challengeArenas[num9].HighScore = reader.ReadInt32();
}
Game1.stats.enemiesDefeated = reader.ReadInt32();
Game1.stats.longestChain = reader.ReadInt32();
Game1.events.currentEvent = reader.ReadInt32();
for (int num10 = 0; num10 < Game1.events.sideEventAvailable.Length; num10++)
{
Game1.events.sideEventAvailable[num10] = reader.ReadBoolean();
}
for (int num11 = 0; num11 < Game1.stats.villagerDialogue.Length; num11++)
{
Game1.stats.villagerDialogue[num11] = reader.ReadInt32();
}
for (int num12 = 0; num12 < Game1.events.regionIntroduced.Length; num12++)
{
Game1.events.regionIntroduced[num12] = reader.ReadBoolean();
}
for (int num13 = 1; num13 < Game1.character.Length; num13++)
{
Game1.character[num13].Exists = CharExists.Dead;
}
character.UnloadTextures();
character.Location = new Vector2(reader.ReadSingle(), reader.ReadSingle() - 100f);
Game1.map.transDir = TransitionDirection.None;
Game1.map.path = reader.ReadString();
string str2 = reader.ReadString();
float time = reader.ReadSingle();
int num15 = reader.ReadInt32();
int num16 = reader.ReadInt32();
float num17 = reader.ReadSingle();
int num18 = reader.ReadInt32();
try
{
Game1.questManager.ReadQuests(reader);
}
catch
{
}
try
{
Game1.navManager.ReadSaveFile(reader);
}
catch
{
}
Game1.pManager.Reset(true, true);
Game1.map.SwitchMap(Game1.pManager, Game1.character, Game1.map.path, true);
Game1.wManager.SetWeather((WeatherType) num15, true);
Game1.wManager.randomType = (RandomType) num16;
Game1.wManager.weatherTimer = num17;
WeatherAudio.Play((WeatherAudioType) num18);
Music.Play(null);
Music.Play(str2);
Sound.FadeMusicOut(time);
this.ReadyCharacter();
}
private void ReadyCharacter()
{
Character character = Game1.character[0];
if (character.HP < 1)
{
character.HP = 1;
}
if (Game1.stats.playerLifeState != 0)
{
Game1.stats.playerLifeState = 2;
}
character.LifeBarPercent = 0f;
character.HPLossFrame = 0f;
character.Trajectory = Vector2.Zero;
character.State = CharState.Air;
character.SetAnim("idle00", 0, 2);
character.Floating = false;
character.StatusEffect = StatusEffects.Normal;
character.StatusTime = 0f;
character.GroundCharacter();
character.SetAnim("idle01", 0, 2);
Game1.stats.inFront = true;
Game1.events.skippable = SkipType.Skippable;
Game1.events.eventType = EventType.None;
Game1.events.anyEvent = Game1.hud.inBoss = false;
Game1.hud.bossLife = Game1.hud.bossMaxLife = 0f;
Game1.SlowTime = 0f;
Game1.pManager.ResetFidget(Game1.character);
for (int i = 0; i < Game1.character.Length; i++)
{
if (Game1.character[i].Exists == CharExists.Exists)
{
Game1.character[i].Holding = false;
Game1.character[i].GrabbedBy = -1;
}
}
Game1.map.leftBlock = Game1.map.rightBlock = 0f;
Game1.worldScale = 1f;
Game1.camera.ResetCamera(Game1.character);
Game1.stats.projectileCost = Game1.stats.GetProjectileCost(Game1.stats.projectileType);
Game1.cManager.ExitScoreBoard(true);
Game1.stats.GetWorldExplored();
}
public void Write(BinaryWriter writer)
{
Character character = Game1.character[0];
int num = (int) Math.Min((float) (character.MaxHP * Game1.stats.bonusHealth), (float) 9999f);
int num2 = (int) Math.Max((float) (num * (1f - ((Game1.stats.gameDifficulty + 1) * 0.25f))), (float) (num * 0.125f));
if (Game1.stats.gameDifficulty == 0)
{
num2 = num;
}
Vector2 location = character.Location;
if (Game1.hud.savePos != Vector2.Zero)
{
location.X = Game1.hud.savePos.X;
}
writer.Write(Game1.Build);
writer.Write(DateTime.Now.Ticks);
writer.Write((int) Game1.stats.Completion);
writer.Write(Game1.stats.gameComplete);
writer.Write(Game1.events.regionDisplayName);
writer.Write(Math.Max(character.HP, num2));
writer.Write(character.MaxHP);
writer.Write(Game1.stats.bonusHealth);
writer.Write(Game1.stats.LEVEL);
writer.Write(Game1.stats.Gold);
writer.Write(Game1.stats.gameDifficulty);
writer.Write(Game1.stats.startDifficulty);
writer.Write(Game1.stats.gameClock);
writer.Write(Game1.stats.XP);
writer.Write(Game1.stats.prevLevelXP);
writer.Write(Game1.stats.nextLevelXP);
writer.Write(Game1.stats.skillPoints);
string gamertag = "noname";
if (Game1.GamerServices && (Game1.xblaManager.MeSignedInGamer() != null))
{
gamertag = Game1.xblaManager.MeSignedInGamer().Gamertag;
}
writer.Write(Game1.stats.canEarnAchievements);
writer.Write(gamertag);
for (int i = 0; i < Game1.stats.upgrade.Length; i++)
{
writer.Write(Game1.stats.upgrade[i]);
}
for (int j = 0; j < Game1.stats.upgradedStat.Length; j++)
{
writer.Write(Game1.stats.upgradedStat[j]);
}
writer.Write(Game1.stats.projectileType);
writer.Write(Game1.stats.curCharge);
for (int k = 0; k < Game1.stats.Equipment.Length; k++)
{
writer.Write(Game1.stats.Equipment[k]);
}
for (int m = 0; m < Game1.stats.EquipBluePrint.Length; m++)
{
writer.Write(Game1.stats.EquipBluePrint[m]);
}
for (int n = 0; n < Game1.stats.shopEquipment.Length; n++)
{
writer.Write(Game1.stats.shopEquipment[n]);
}
for (int num8 = 0; num8 < Game1.stats.Material.Length; num8++)
{
writer.Write(Game1.stats.Material[num8]);
}
for (int num9 = 0; num9 < Game1.stats.shopMaterial.Length; num9++)
{
writer.Write(Game1.stats.shopMaterial[num9]);
}
for (int num10 = 0; num10 < Game1.stats.StructureBuilt.Length; num10++)
{
writer.Write(Game1.stats.StructureBuilt[num10]);
}
writer.Write(Game1.hud.shopRestockTime);
writer.Write(Game1.stats.attack);
writer.Write(Game1.stats.defense);
writer.Write(Game1.stats.fidget);
writer.Write(Game1.stats.luck);
writer.Write(Game1.stats.attackEquip);
writer.Write(Game1.stats.defenseEquip);
writer.Write(Game1.stats.newFidgetEquip);
writer.Write(Game1.stats.luckEquip);
writer.Write(Game1.stats.newHealtRegen);
writer.Write(Game1.stats.currentItem);
writer.Write(Game1.stats.currentPendant);
writer.Write(Game1.stats.currentAugment);
writer.Write(Game1.stats.currentArmor);
writer.Write(Game1.stats.currentRingLeft);
writer.Write(Game1.stats.currentRingRight);
for (int num11 = 0; num11 < Game1.cManager.challengeArenas.Count; num11++)
{
writer.Write(Game1.cManager.challengeArenas[num11].HighScore);
}
writer.Write(Game1.stats.enemiesDefeated);
writer.Write(Game1.stats.longestChain);
writer.Write(Game1.events.currentEvent);
for (int num12 = 0; num12 < Game1.events.sideEventAvailable.Length; num12++)
{
writer.Write(Game1.events.sideEventAvailable[num12]);
}
for (int num13 = 0; num13 < Game1.stats.villagerDialogue.Length; num13++)
{
writer.Write(Game1.stats.villagerDialogue[num13]);
}
for (int num14 = 0; num14 < Game1.events.regionIntroduced.Length; num14++)
{
writer.Write(Game1.events.regionIntroduced[num14]);
}
writer.Write(location.X);
writer.Write((float) (location.Y - ((character.State == CharState.Grounded) ? ((float) 200) : ((float) 0))));
writer.Write(Game1.map.path);
writer.Write(Music.GetMusicName());
writer.Write(Sound.fadeMusic);
writer.Write((int) Game1.wManager.weatherType);
writer.Write((int) Game1.wManager.randomType);
writer.Write(Game1.wManager.weatherTimer);
writer.Write((int) Game1.wManager.weatherAudioType);
Game1.questManager.WriteQuests(writer);
Game1.navManager.WriteSaveFile(writer);
}
}