using System.IO; using static DSPRE.RomInfo; namespace DSPRE.ROMFiles { /// /// Class to store area data in Pokémon NDS games /// public class AreaData : RomFile { internal static readonly byte TYPE_INDOOR = 0; internal static readonly byte TYPE_OUTDOOR = 1; #region Fields (2) public ushort buildingsTileset; public ushort mapTileset; public ushort dynamicTextureType; public ushort unknown1; public byte areaType = TYPE_OUTDOOR; //HGSS ONLY public ushort lightType; //using an overabundant size. HGSS only needs a byte #endregion #region Constructors (1) public AreaData(Stream data) { using (BinaryReader reader = new BinaryReader(data)) { buildingsTileset = reader.ReadUInt16(); mapTileset = reader.ReadUInt16(); if (RomInfo.gameFamily == gFamEnum.HGSS) { dynamicTextureType = reader.ReadUInt16(); areaType = reader.ReadByte(); lightType = reader.ReadByte(); } else { unknown1 = reader.ReadUInt16(); lightType = reader.ReadUInt16(); } } } public AreaData (byte ID) : this(new FileStream(RomInfo.gameDirs[DirNames.areaData].unpackedDir + "//" + ID.ToString("D4"), FileMode.Open)) {} #endregion #region Methods (1) public override byte[] ToByteArray() { MemoryStream newData = new MemoryStream(); using (BinaryWriter writer = new BinaryWriter(newData)) { writer.Write(buildingsTileset); writer.Write(mapTileset); if (RomInfo.gameFamily == gFamEnum.HGSS) { writer.Write(dynamicTextureType); writer.Write(areaType); writer.Write((byte)lightType); } else { writer.Write(unknown1); writer.Write((ushort)lightType); } } return newData.ToArray(); } public void SaveToFileDefaultDir(int IDtoReplace, bool showSuccessMessage = true) { SaveToFileDefaultDir(DirNames.areaData, IDtoReplace, showSuccessMessage); } public void SaveToFileExplorePath(string suggestedFileName, bool showSuccessMessage = true) { SaveToFileExplorePath("Gen IV Area Data File", "bin", suggestedFileName, showSuccessMessage); } #endregion } }