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);
 }
Ejemplo n.º 3
0
            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();
                }
            }
Ejemplo n.º 4
0
 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);
 }
Ejemplo n.º 5
0
 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);
 }
Ejemplo n.º 7
0
 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');
            }
Ejemplo n.º 10
0
 public override (byte, int)? ReadByte(IReadOnlyBinaryDataAccessor data, long position)
 {
     return((byteCount-- <= 0) ? null : ((byte, int)?)(data.ReadByte(position), 1));
 }
Ejemplo n.º 11
0
        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;
                }
                }
            }
        }