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); } } } } }
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); }
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 } }
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 } }
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; }