public WildPokemonInfo(IReadOnlyBinaryDataAccessor accessor) { var sir0 = new Sir0(accessor); int pokemonStatsCount = sir0.SubHeader.ReadInt32(0x00); int pokemonStatsOffset = sir0.SubHeader.ReadInt32(0x08); Stats = new StatsEntry[pokemonStatsCount]; for (int i = 0; i < pokemonStatsCount; i++) { var offset = sir0.Data.ReadInt64(pokemonStatsOffset + i * sizeof(long)); Stats[i] = new StatsEntry(i, sir0.Data.Slice(offset, 16)); } int floorCount = sir0.SubHeader.ReadInt32(0x10); Floors = new FloorInfo[floorCount]; for (int i = 0; i < floorCount; i++) { Floors[i] = new FloorInfo(pokemonStatsCount); var offset = sir0.SubHeader.ReadInt64(0x18 + i * sizeof(long)); for (int j = 0; j < pokemonStatsCount; j++) { Floors[i].Entries[j] = new FloorInfo.Entry(sir0.Data.Slice(offset + j * 16, 16)); } } }
public MessageBinEntry(IReadOnlyBinaryDataAccessor data, ICodeTable?codeTable = null) : this() { var sir0 = new Sir0(data); var entryCount1 = sir0.SubHeader.ReadInt32(0); var entryCount2 = sir0.SubHeader.ReadInt32(4); var entriesOffset = sir0.SubHeader.ReadInt32(8); var hashes = new Dictionary <long, int>(); for (int i = 0; i < entryCount1; i++) { var entryOffset = entriesOffset + (i * EntryLength); var stringOffset = sir0.Data.ReadInt64(entryOffset); var hash = sir0.Data.ReadInt32(entryOffset + 8); var unknown = sir0.Data.ReadInt32(entryOffset + 0xC); var value = sir0.Data.ReadNullTerminatedUnicodeString(stringOffset); if (codeTable != null) { value = codeTable.UnicodeDecode(value); } AddString(new MessageBinString { Value = value, Hash = hash, Unknown = unknown, StringOffset = stringOffset }); hashes.Add(stringOffset, hash); } OrderedHashes = hashes.OrderBy(h => h.Key).Select(h => h.Value).ToArray(); }
public FixedPokemon(byte[] data) { var sir0 = new Sir0(data); var entryCount = sir0.SubHeader.ReadInt32(0); var entries = new List <FixedPokemonEntry>(); for (int i = 0; i < entryCount; i++) { entries.Add(new FixedPokemonEntry(i, data, sir0.SubHeader.ReadInt32((i + 1) * 8))); } this.Entries = entries; }
public PokemonGraphicsDatabase(byte[] data) { var sir0 = new Sir0(data); var indexOffset = BitConverter.ToInt32(data, (int)sir0.SubHeaderOffset + 8); var entryCount = BitConverter.ToInt32(data, (int)sir0.SubHeaderOffset + 16); var entries = new List <PokemonGraphicsDatabaseEntry>(); for (int i = 0; i < entryCount; i++) { entries.Add(new PokemonGraphicsDatabaseEntry(sir0.Data.Slice(indexOffset + (i * entrySize), entrySize), sir0.Data)); } this.Entries = entries; }
public Sir0StringList(byte[] data, Encoding encoding) { this.encoding = encoding; var sir0 = new Sir0(data); var entryCount = sir0.SubHeader.ReadInt32(0); for (int i = 0; i < entryCount; i++) { long stringOffset = sir0.SubHeader.ReadInt32(8 + i * sizeof(long)); string value = sir0.Data.ReadNullTerminatedUnicodeString(stringOffset); Entries.Add(value); } }
public DungeonBalanceDataEntry4(IReadOnlyBinaryDataAccessor accessor) { var sir0 = new Sir0(accessor); int count = sir0.SubHeader.ReadInt32(0x00); Records = new Record[count]; for (int i = 0; i < count; i++) { Records[i] = new Record(); var offset = sir0.SubHeader.ReadInt64(0x08 + i * sizeof(long)); for (int j = 0; j < Records[i].Entries.Length; j++) { Records[i].Entries[j] = new Record.Entry(sir0.Data.Slice(offset + j * 8, 8)); } } }
public FarcFat(byte[] data, long offset, long length) { var sir0 = new Sir0(data, offset, length); var dataOffset = sir0.SubHeader.ReadInt32(0); var entryCount = sir0.SubHeader.ReadInt32(4); var useHashesInsteadOfFilenames = sir0.SubHeader.ReadInt32(8); if (useHashesInsteadOfFilenames != 1) { throw new NotSupportedException("Only FARC files with hashes instead of filenames are supported"); } var entries = new List <FarcFatEntry>(); for (int i = 0; i < entryCount; i++) { entries.Add(new FarcFatEntry(sir0.Data.ReadArray(dataOffset + (i * FarcFatEntry.Length), 0x10))); } this.Entries = entries; }
public MessageBinEntry(IReadOnlyBinaryDataAccessor data) { var sir0 = new Sir0(data); var entryCount = sir0.SubHeader.ReadInt32(0); var entriesOffset = sir0.SubHeader.ReadInt32(4); var strings = new Dictionary <int, string>(); var hashes = new Dictionary <long, int>(); for (int i = 0; i < entryCount; i++) { var entryOffset = entriesOffset + (i * EntryLength); var stringOffset = sir0.Data.ReadInt32(entryOffset); var hash = sir0.Data.ReadInt32(entryOffset + 4); var unknown = sir0.Data.ReadInt32(entryOffset + 8); strings.Add(hash, sir0.Data.ReadNullTerminatedUnicodeString(stringOffset)); hashes.Add(stringOffset, hash); } Strings = strings; OrderedHashes = hashes.OrderBy(h => h.Key).Select(h => h.Value).ToArray(); }
public Entry(IReadOnlyBinaryDataAccessor accessor) { var buffer = Gyu0.Decompress(accessor); Sir0 sir0 = new Sir0(buffer); var offsetHeader = sir0.SubHeader.ReadInt64(0x00); var offsetWildPokemon = sir0.SubHeader.ReadInt64(0x08); var offset3 = sir0.SubHeader.ReadInt64(0x10); var offset4 = sir0.SubHeader.ReadInt64(0x18); var lenHeader = offsetWildPokemon - offsetHeader; var lenWildPokemon = offset3 - offsetWildPokemon; var len3 = offset4 - offset3; var len4 = sir0.SubHeaderOffset - offset4; var headerEntrySize = FloorInfoEntry.Size; var entryCount = lenHeader / headerEntrySize; FloorInfos = new FloorInfoEntry[entryCount]; for (int i = 0; i < lenHeader / headerEntrySize; i++) { FloorInfos[i] = new FloorInfoEntry(sir0.Data.Slice(offsetHeader + i * headerEntrySize, headerEntrySize)); } if (lenWildPokemon > 0) { WildPokemon = new WildPokemonInfo(sir0.Data.Slice(offsetWildPokemon, lenWildPokemon)); } if (len3 > 0) { Data3 = new DungeonBalanceDataEntry3(sir0.Data.Slice(offset3, len3)); } if (len4 > 0) { Data4 = new DungeonBalanceDataEntry4(sir0.Data.Slice(offset4, len4)); } }