public Entry(IReadOnlyBinaryDataAccessor accessor) { PokemonIndex = accessor.ReadInt16(0x00); SpawnRate = accessor.ReadByte(0x02); RecruitmentLevel = accessor.ReadByte(0x0A); Byte0B = accessor.ReadByte(0x0B); }
public PokemonEvolutionBranch(IReadOnlyBinaryDataAccessor accessor) { Evolution = (CreatureIndex)accessor.ReadInt16(4); EvolutionItem = (ItemIndex)accessor.ReadInt16(6); ItemsRequired = accessor.ReadInt16(8); MinimumLevel = accessor.ReadByte(0x10); flags = (Requirements)accessor.ReadByte(0x11); }
public static (Command Command, int BytesRead) Decode(IReadOnlyBinaryDataAccessor data, long offset, RingBuffer <byte> backrefBuffer) { var cur = data.ReadByte(offset); if (cur < 0x80) { var next = data.ReadByte(offset + 1); if (cur == 0x7F && next == 0xFF) { return(new EOFCommand(), 2); } return(new BackreferenceCommand((cur >> 2) + 2, 0x400 - ((cur & 3) * 0x100 + next), backrefBuffer), 2); } var op = (Opcode)((cur >> 5) - 4); var arg = cur & 0x1F; switch (op) { case Opcode.Copy: return(new CopyCommand(arg + 1), 1); case Opcode.SplitCopy: { var separator = data.ReadByte(offset + 1); return(new SplitCopyCommand(2 * (arg + 2), separator), 2); } case Opcode.Fill: { var value = data.ReadByte(offset + 1); return(new FillCommand(arg + 2, value), 2); } case Opcode.Skip: { var byteCount = arg + 1; if (byteCount == 0x20) { return(new SkipCommand(byteCount + data.ReadByte(offset + 1)), 2); } return(new SkipCommand(byteCount), 1); } default: // Should be unreachable, but we need to throw an exception to please the compiler throw new InvalidDataException(); } }
public Level(IReadOnlyBinaryDataAccessor data) { MinimumExperience = data.ReadInt32(0); HitPointsGained = data.ReadByte(5); AttackGained = data.ReadByte(6); DefenseGained = data.ReadByte(7); SpecialAttackGained = data.ReadByte(8); SpecialDefenseGained = data.ReadByte(9); SpeedGained = data.ReadByte(0xA); LevelsGained = data.ReadByte(0xB); }
public override (byte, int)? ReadByte(IReadOnlyBinaryDataAccessor data, long position) { if (byteCount <= 0) { return(null); } else if (byteCount-- % 2 == 0) { return(separator, 0); } else { return(data.ReadByte(position), 1); } }
public StatsEntry(int index, IReadOnlyBinaryDataAccessor accessor) { Index = index; CreatureIndex = (CreatureIndex)(index + 1); XPYield = accessor.ReadInt32(0x00); HitPoints = accessor.ReadInt16(0x04); Attack = accessor.ReadByte(0x06); Defense = accessor.ReadByte(0x07); SpecialAttack = accessor.ReadByte(0x08); SpecialDefense = accessor.ReadByte(0x09); Speed = accessor.ReadByte(0x0A); StrongFoe = accessor.ReadByte(0x0B); Level = accessor.ReadByte(0x0C); }
public Entry(IReadOnlyBinaryDataAccessor data) { Features = (Feature)data.ReadInt32(0x00); Index = data.ReadInt32(0x04); Short08 = data.ReadInt16(0x08); Short0A = data.ReadInt16(0x0A); SortKey = data.ReadInt32(0x0C); DungeonBalanceIndex = data.ReadByte(0x12); Byte13 = data.ReadByte(0x13); MaxItems = data.ReadByte(0x14); MaxTeammates = data.ReadByte(0x15); Byte17 = data.ReadByte(0x17); Byte18 = data.ReadByte(0x18); Byte19 = data.ReadByte(0x19); // All unread bytes are zero }
public FloorInfoEntry(IReadOnlyBinaryDataAccessor data) { Index = data.ReadInt16(0x00); Short02 = data.ReadInt16(0x02); Event = data.ReadString(0x04, 32, Encoding.ASCII).Trim('\0'); Short24 = data.ReadInt16(0x24); Short26 = data.ReadInt16(0x26); Short28 = data.ReadInt16(0x28); Short2A = data.ReadInt16(0x2A); Byte2C = data.ReadByte(0x2C); Byte2D = data.ReadByte(0x2D); Byte2E = data.ReadByte(0x2E); Byte2F = data.ReadByte(0x2F); Short30 = data.ReadInt16(0x30); Short32 = data.ReadInt16(0x32); Byte34 = data.ReadByte(0x34); Byte35 = data.ReadByte(0x35); Byte36 = data.ReadByte(0x36); InvitationIndex = data.ReadByte(0x54); Bytes37to53 = data.ReadArray(0x37, 0x53 - 0x37 + 1); Bytes55to61 = data.ReadArray(0x55, 0x61 - 0x55 + 1); }
public PokemonDataInfoEntry(CreatureIndex id, IReadOnlyBinaryDataAccessor data) { this.Id = id; Unknown00 = data.ReadInt64(0); Unknown08 = data.ReadInt64(8); var levelupLearnset = new List <LevelUpMove>(26); for (int i = 0; i < 26; i++) { WazaIndex move = (WazaIndex)data.ReadInt16(0x10 + i * sizeof(short)); byte level = data.ReadByte(0x44 + i); levelupLearnset.Add(new LevelUpMove(level, move)); } this.LevelupLearnset = levelupLearnset; Unknown5E = data.ReadInt16(0x5E); Unknown60 = data.ReadInt32(0x60); PokedexNumber = data.ReadInt16(0x64); Unknown66 = data.ReadInt16(0x66); Taxon = data.ReadInt16(0x68); Unknown6A = data.ReadInt16(0x6A); Unknown6C = data.ReadInt32(0x6C); Unknown70 = data.ReadInt32(0x70); BaseHitPoints = data.ReadInt16(0x74); BaseAttack = data.ReadInt16(0x76); BaseSpecialAttack = data.ReadInt16(0x78); BaseDefense = data.ReadInt16(0x7A); BaseSpecialDefense = data.ReadInt16(0x7C); BaseSpeed = data.ReadInt16(0x7E); Unknown80 = data.ReadInt32(0x80); ExperienceEntry = data.ReadInt32(0x84); Unknown88 = data.ReadInt64(0x88); Ability1 = (AbilityIndex)data.ReadByte(0x90); Ability2 = (AbilityIndex)data.ReadByte(0x91); HiddenAbility = (AbilityIndex)data.ReadByte(0x92); Type1 = (PokemonType)data.ReadByte(0x93); Type2 = (PokemonType)data.ReadByte(0x94); Unknown95 = data.ReadByte(0x95); Unknown96 = data.ReadByte(0x96); Unknown97 = data.ReadByte(0x97); Unknown98 = data.ReadByte(0x98); Unknown99 = data.ReadByte(0x99); Unknown9A = data.ReadByte(0x9A); RecruitPrereq = data.ReadString(0x9B, 69, Encoding.ASCII).TrimEnd('\0'); }
public override (byte, int)? ReadByte(IReadOnlyBinaryDataAccessor data, long position) { return((byteCount-- <= 0) ? null : ((byte, int)?)(data.ReadByte(position), 1)); }
public static IBinaryDataAccessor Decompress(IReadOnlyBinaryDataAccessor data) { var Magic = data.ReadInt32(0); var Length = data.ReadInt32(4); IBinaryDataAccessor dest = new BinaryFile(new byte[Length]); var dataIndex = 8; var destIndex = 0; while (true) { byte cur = data.ReadByte(dataIndex++); if (cur < 0x80) { var next = data.ReadByte(dataIndex++); // EOF marker if (cur == 0x7F && next == 0xFF) { return(dest); } var offset = 0x400 - ((cur & 3) * 0x100 + next); var bytes = dest.ReadSpan(destIndex - offset, (cur >> 2) + 2); dest.Write(destIndex, bytes); destIndex += bytes.Length; continue; } var op = (Opcode)((cur >> 5) - 4); var arg = cur & 0x1F; switch (op) { case Opcode.Copy: { var bytes = data.ReadSpan(dataIndex, arg + 1); dataIndex += bytes.Length; dest.Write(destIndex, bytes); destIndex += bytes.Length; break; } case Opcode.SplitCopy: { var sep = data.ReadByte(dataIndex++); var bytes = data.ReadSpan(dataIndex, arg + 2); dataIndex += bytes.Length; foreach (byte x in bytes) { dest.Write(destIndex++, sep); dest.Write(destIndex++, x); } break; } case Opcode.Fill: { var fill = data.ReadByte(dataIndex++); for (int i = 0; i < arg + 2; i++) { dest.Write(destIndex++, fill); } break; } case Opcode.Skip: { var count = arg < 0x1F ? arg + 1 : 0x20 + data.ReadByte(dataIndex++); destIndex += count; break; } } } }