Exemple #1
0
        private void Load(string fullPath)
        {
            using (var stream = new FileStream(fullPath, FileMode.Open, FileAccess.Read))
            {
                using (var reader = new BinaryReader(stream))
                {
                    _pps = reader.ReadUInt32();
                    _gems = reader.ReadUInt32();
                    _jewels = reader.ReadUInt32();
                    _itemsInVault = reader.ReadInt16();
                    var scratch = reader.ReadUInt16();

                    for (int i = 0; i < 50; i++)
                    {
                        var pointer = reader.ReadByte();
                        var first = reader.ReadByte();
                        var second = reader.ReadByte();
                        var third = reader.ReadByte();
                        var item = new FruaItem(first, second, third);
                        // TODO not reading full item here
                        var tmp = reader.ReadBytes(14);
                        if (pointer != 255 && _itemsInVault > i)
                        {
                            _items.Add(item);
                        }
                    }
                }
            }
        }
Exemple #2
0
        private static FruaItem ReadItemRecord(BinaryReader reader, bool isFrua)
        {
            var pointerToItemsRecord = reader.ReadByte();
            var thirdNameCode        = reader.ReadByte();
            var secondNameCode       = reader.ReadByte();
            var firstNameCode        = reader.ReadByte();

            var item = new FruaItem(firstNameCode, secondNameCode, thirdNameCode)
            {
                Pointer               = pointerToItemsRecord,
                Encumbrance           = reader.ReadInt16(),
                Price                 = reader.ReadInt16(),
                MagicBonus            = reader.ReadByte(),
                SecondaryCode         = reader.ReadByte(),
                IsReady               = reader.ReadByte() == 1,
                Identified            = reader.ReadByte(),
                IsCursed              = reader.ReadByte() == 1,
                NumberOfItemsInBundle = reader.ReadByte(),
                Charges               = reader.ReadByte(),
                MagicalEffectCode     = reader.ReadByte(),
                SpecialCode           = GetSpecialCode(reader.ReadByte()),
            };

            if (isFrua)
            {
                reader.ReadByte(); // always 0
            }

            return(item);
        }
Exemple #3
0
        private static void ReadItemDetails(string path, FruaItem item)
        {
            var itemsFile = Path.Combine(path, "ITEMS.DAT");

            using (var reader = new BinaryReader(File.Open(itemsFile, FileMode.Open, FileAccess.Read)))
            {
                reader.BaseStream.Seek(ItemRecordSize * item.Pointer, SeekOrigin.Begin);

                item.Location      = reader.ReadByte();
                item.Hands         = reader.ReadByte();
                item.DamageVsLarge = new FruaItemDamageDice
                {
                    Number = reader.ReadByte(),
                    Type   = reader.ReadByte(),
                    Bonus  = reader.ReadByte(),
                };
                item.Rate           = reader.ReadByte();
                item.Protection     = reader.ReadByte();
                item.WeaponClass    = GetWeaponClass(reader.ReadByte());
                item.MeleeClass     = GetMeleeType(reader.ReadByte());
                item.DamageVsMedium = new FruaItemDamageDice
                {
                    Number = reader.ReadByte(),
                    Type   = reader.ReadByte(),
                    Bonus  = reader.ReadByte(),
                };
                item.Range       = reader.ReadByte();
                item.ClassUsage  = reader.ReadByte();
                item.MissileType = reader.ReadByte();
                reader.ReadByte(); // unused byte
            }
        }
Exemple #4
0
        private static void ReadItemDetails(string path, FruaItem item)
        {
            var itemsFile = Path.Combine(path, "ITEMS.DAT");

            using (var reader = new BinaryReader(File.Open(itemsFile, FileMode.Open, FileAccess.Read)))
            {
                reader.BaseStream.Seek(ItemRecordSize*item.Pointer, SeekOrigin.Begin);

                item.Location = reader.ReadByte();
                item.Hands = reader.ReadByte();
                item.DamageVsLarge = new FruaItemDamageDice
                {
                    Number = reader.ReadByte(),
                    Type = reader.ReadByte(),
                    Bonus = reader.ReadByte(),
                };
                item.Rate = reader.ReadByte();
                item.Protection = reader.ReadByte();
                item.WeaponClass = GetWeaponClass(reader.ReadByte());
                item.MeleeClass = GetMeleeType(reader.ReadByte());
                item.DamageVsMedium = new FruaItemDamageDice
                {
                    Number = reader.ReadByte(),
                    Type = reader.ReadByte(),
                    Bonus = reader.ReadByte(),
                };
                item.Range = reader.ReadByte();
                item.ClassUsage = reader.ReadByte();
                item.MissileType = reader.ReadByte();
                reader.ReadByte(); // unused byte
            }
        }
Exemple #5
0
        private static FruaItem ReadItemRecord(BinaryReader reader, bool isFrua)
        {
            var pointerToItemsRecord = reader.ReadByte();
            var thirdNameCode = reader.ReadByte();
            var secondNameCode = reader.ReadByte();
            var firstNameCode = reader.ReadByte();

            var item = new FruaItem(firstNameCode, secondNameCode, thirdNameCode)
                {
                    Pointer = pointerToItemsRecord,
                    Encumbrance = reader.ReadInt16(),
                    Price = reader.ReadInt16(),
                    MagicBonus = reader.ReadByte(),
                    SecondaryCode = reader.ReadByte(),
                    IsReady = reader.ReadByte() == 1,
                    Identified = reader.ReadByte(),
                    IsCursed = reader.ReadByte() == 1,
                    NumberOfItemsInBundle = reader.ReadByte(),
                    Charges = reader.ReadByte(),
                    MagicalEffectCode = reader.ReadByte(),
                    SpecialCode = GetSpecialCode(reader.ReadByte()),
                };

            if (isFrua)
            {
                reader.ReadByte(); // always 0
            }

            return item;
        }