mirror of
https://github.com/AdAstra-LD/DS-Pokemon-Rom-Editor.git
synced 2026-05-09 21:50:57 -05:00
146 lines
4.7 KiB
C#
146 lines
4.7 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using static DSPRE.RomInfo;
|
|
|
|
namespace DSPRE.ROMFiles
|
|
{
|
|
internal class TradeData : RomFile
|
|
{
|
|
|
|
public int id;
|
|
|
|
// TradeData structure in narc
|
|
public int species;
|
|
public int hpIV;
|
|
public int atkIV;
|
|
public int defIV;
|
|
public int speedIV;
|
|
public int spAtkIV;
|
|
public int spDefIV;
|
|
public int ability; // unused
|
|
public int otID;
|
|
public int cool;
|
|
public int beauty;
|
|
public int cute;
|
|
public int smart;
|
|
public int tough;
|
|
public int pid;
|
|
public int heldItem;
|
|
public int otGender;
|
|
public int sheen;
|
|
public int language;
|
|
public int requestedSpecies;
|
|
public int unknown; // unused?
|
|
|
|
public TradeData(int id, Stream stream)
|
|
{
|
|
this.id = id;
|
|
using (BinaryReader br = new BinaryReader(stream))
|
|
{
|
|
species = br.ReadInt32();
|
|
hpIV = br.ReadInt32();
|
|
atkIV = br.ReadInt32();
|
|
defIV = br.ReadInt32();
|
|
speedIV = br.ReadInt32();
|
|
spAtkIV = br.ReadInt32();
|
|
spDefIV = br.ReadInt32();
|
|
ability = br.ReadInt32(); // appears unused
|
|
otID = br.ReadInt32();
|
|
cool = br.ReadInt32();
|
|
beauty = br.ReadInt32();
|
|
cute = br.ReadInt32();
|
|
smart = br.ReadInt32();
|
|
tough = br.ReadInt32();
|
|
pid = br.ReadInt32();
|
|
heldItem = br.ReadInt32();
|
|
otGender = br.ReadInt32();
|
|
sheen = br.ReadInt32();
|
|
language = br.ReadInt32();
|
|
requestedSpecies = br.ReadInt32();
|
|
|
|
if (RomInfo.gameFamily == GameFamilies.HGSS)
|
|
{
|
|
unknown = br.ReadInt32(); // unused?
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
public TradeData(int id) : this(id, GetStream(id)) { }
|
|
|
|
private static Stream GetStream(int id)
|
|
{
|
|
|
|
if (!File.Exists(RomInfo.gameDirs[DirNames.tradeData].unpackedDir + "\\" + id.ToString("D4")))
|
|
{
|
|
// If the file does not exist, create it with default values
|
|
FileStream fileStream = new FileStream(RomInfo.gameDirs[DirNames.tradeData].unpackedDir + "\\" + id.ToString("D4"), FileMode.Create);
|
|
fileStream.Write(new byte[0x50], 0, 0x50); // create an empty file
|
|
if (RomInfo.gameFamily == GameFamilies.HGSS)
|
|
{
|
|
fileStream.Write(new byte[0x04], 0, 0x04); // HGSS only
|
|
}
|
|
fileStream.Seek(0, SeekOrigin.Begin); // Reset the position to the start of the file
|
|
return fileStream;
|
|
}
|
|
|
|
return new FileStream(RomInfo.gameDirs[DirNames.tradeData].unpackedDir + "\\" + id.ToString("D4"), FileMode.Open);
|
|
|
|
}
|
|
|
|
public override byte[] ToByteArray()
|
|
{
|
|
using (MemoryStream ms = new MemoryStream())
|
|
using (BinaryWriter bw = new BinaryWriter(ms))
|
|
{
|
|
bw.Write(species);
|
|
bw.Write(hpIV);
|
|
bw.Write(atkIV);
|
|
bw.Write(defIV);
|
|
bw.Write(speedIV);
|
|
bw.Write(spAtkIV);
|
|
bw.Write(spDefIV);
|
|
bw.Write(ability); // unused
|
|
bw.Write(otID);
|
|
bw.Write(cool);
|
|
bw.Write(beauty);
|
|
bw.Write(cute);
|
|
bw.Write(smart);
|
|
bw.Write(tough);
|
|
bw.Write(pid);
|
|
bw.Write(heldItem);
|
|
bw.Write(otGender);
|
|
bw.Write(sheen);
|
|
bw.Write(language);
|
|
bw.Write(requestedSpecies);
|
|
|
|
if (RomInfo.gameFamily == GameFamilies.HGSS)
|
|
{
|
|
bw.Write(unknown); // HGSS only
|
|
}
|
|
|
|
return ms.ToArray();
|
|
}
|
|
}
|
|
|
|
public void SaveToFileDefaultDir(int IDtoReplace, bool showSuccessMessage = true)
|
|
{
|
|
SaveToFileDefaultDir(DirNames.tradeData, IDtoReplace, showSuccessMessage);
|
|
}
|
|
public void SaveToFileExplorePath(string suggestedFileName, bool showSuccessMessage = true)
|
|
{
|
|
SaveToFileExplorePath("Gen IV Trade data", "bin", suggestedFileName, showSuccessMessage);
|
|
}
|
|
|
|
public static int GetTradeCount()
|
|
{
|
|
return Directory.GetFiles(RomInfo.gameDirs[DirNames.tradeData].unpackedDir, "*.*").Length;
|
|
}
|
|
|
|
}
|
|
}
|