void ReadFile(BinaryReader reader) { // Read class resist, etc. flags DFCareer.CFGData cfg = new DFCareer.CFGData(); cfg.ResistanceFlags = reader.ReadByte(); cfg.ImmunityFlags = reader.ReadByte(); cfg.LowToleranceFlags = reader.ReadByte(); cfg.CriticalWeaknessFlags = reader.ReadByte(); // Read class special ability and spell point bitfield cfg.AbilityFlagsAndSpellPointsBitfield = reader.ReadUInt16(); // Read rapid healing flags cfg.RapidHealing = reader.ReadByte(); // Read regeneration flags cfg.Regeneration = reader.ReadByte(); // Unknown value cfg.Unknown1 = reader.ReadByte(); // Spell absorption flags cfg.SpellAbsorptionFlags = reader.ReadByte(); // Attack modifier against major enemy groups cfg.AttackModifierFlags = reader.ReadByte(); // Read forbidden material flags cfg.ForbiddenMaterialsFlags = reader.ReadUInt16(); // Read weapon, armor, shields bitfield Byte a = reader.ReadByte(); Byte b = reader.ReadByte(); Byte c = reader.ReadByte(); cfg.WeaponArmorShieldsBitfield = (UInt32)((a << 16) | (c << 8) | b); // Read primary skills cfg.PrimarySkill1 = reader.ReadByte(); cfg.PrimarySkill2 = reader.ReadByte(); cfg.PrimarySkill3 = reader.ReadByte(); // Read major skills cfg.MajorSkill1 = reader.ReadByte(); cfg.MajorSkill2 = reader.ReadByte(); cfg.MajorSkill3 = reader.ReadByte(); // Read minor skills cfg.MinorSkill1 = reader.ReadByte(); cfg.MinorSkill2 = reader.ReadByte(); cfg.MinorSkill3 = reader.ReadByte(); cfg.MinorSkill4 = reader.ReadByte(); cfg.MinorSkill5 = reader.ReadByte(); cfg.MinorSkill6 = reader.ReadByte(); // Read class name cfg.Name = file.ReadCStringSkip(reader, 0, 16); // Read 8 unknown bytes cfg.Unknown2 = reader.ReadBytes(8); // Hit points per level cfg.HitPointsPerLevelOrMonsterLevel = reader.ReadUInt16(); // Read advancement multiplier cfg.AdvancementMultiplier = reader.ReadUInt32(); // Read attributes cfg.Attributes = new UInt16[8]; for (int i = 0; i < 8; i++) { cfg.Attributes[i] = reader.ReadUInt16(); } // Structure data career = new DFCareer(cfg); }