73 lines
2.0 KiB
C#
73 lines
2.0 KiB
C#
using LibXom.Data;
|
|
using LibXom.Streams;
|
|
using LibXom;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using LibW4M.Data.Stats;
|
|
|
|
namespace LibW4M.PS2
|
|
{
|
|
public static class Ps2Save
|
|
{
|
|
private const int PS2_MAX_SZ = 0x20000;
|
|
|
|
public static void CreateSaveFile(W4SaveFile save, Stream output)
|
|
{
|
|
// Remove all stats ...
|
|
foreach (StatsContainerData stat in save.StatsCollective.ToArray())
|
|
save.StatsCollective.Delete(stat);
|
|
|
|
// Save changes
|
|
save.saveData();
|
|
XomWriter.WriteXom(save.OriginalXom,output);
|
|
Ps2Save.CalcAndWriteChecksum(output);
|
|
}
|
|
public static void CalcAndWriteChecksum(Stream s)
|
|
{
|
|
XomStreamReader reader = new XomStreamReader(s);
|
|
XomStreamWriter writer = new XomStreamWriter(s);
|
|
|
|
// Set size to ps2 save size.
|
|
|
|
s.SetLength(PS2_MAX_SZ);
|
|
s.Seek(0, SeekOrigin.Begin);
|
|
|
|
// Calculate checksum
|
|
|
|
Int64 chk = 0;
|
|
|
|
for (int i = 0; i < (PS2_MAX_SZ - 4); i += 4)
|
|
{
|
|
int c = reader.ReadInt32();
|
|
chk = (chk + c) & UInt32.MaxValue;
|
|
}
|
|
|
|
writer.WriteUInt32(Convert.ToUInt32(chk));
|
|
|
|
s.Seek(0, SeekOrigin.Begin);
|
|
}
|
|
|
|
public static void CreatePSU(W4SaveFile save, Stream output)
|
|
{
|
|
PsuFile psuFile = new PsuFile();
|
|
psuFile.InitalizePSU("BESLES-53096W4MA");
|
|
psuFile.CreateFile("Icon1.ico", SaveResources.IconFile);
|
|
psuFile.CreateFile("icon.sys", SaveResources.IconSys);
|
|
|
|
using(MemoryStream ms = new MemoryStream())
|
|
{
|
|
CreateSaveFile(save, ms);
|
|
ms.Seek(0, SeekOrigin.Begin);
|
|
psuFile.CreateFile("BESLES-53096W4MA", ms.ToArray());
|
|
}
|
|
|
|
psuFile.WritePSU(output);
|
|
}
|
|
|
|
|
|
}
|
|
}
|