public static void Write(Stream output, Party instance, Endian endian) { output.WriteBytes(instance.Unknown0000Bytes); output.WriteBytes(instance.NameBytes); ArrayHelper.ForEach(instance.Units, e => Unit.Write(output, e, endian), UnitCount); int itemQuantityIndex = 0; if (instance.ItemQuantities != null) { if (instance.ItemQuantities.Length > ItemQuantityCount) { throw new InvalidOperationException("too many item quantities to write"); } var itemQuantityCount = Math.Min(instance.ItemQuantities.Length, ItemQuantityCount); output.Write(instance.ItemQuantities, 0, itemQuantityCount); itemQuantityIndex += itemQuantityCount; } if (itemQuantityIndex < ItemQuantityCount) { output.Write(DummyItemQuantities, 0, ItemQuantityCount - itemQuantityIndex); } ArrayHelper.ForEach(instance.CursedWeapons, e => CursedWeapon.Write(output, e), CursedWeaponCount); output.WriteValueU32(instance.Unknown2CB8, endian); output.WriteValueU32(instance.Unknown2CBC, endian); }
public static void Write(Stream output, CursedWeapon instance) { output.WriteValueU8(instance.Unknown00); output.WriteBytes(instance.NameBytes); output.WriteValueU8(instance.RecoveryTimeBonus); output.WriteValueU8(instance.Attack); output.WriteValueU8(instance.Defense); output.WriteValueU8(instance.HealthPoints); output.WriteValueU8(instance.MagicPoints); output.WriteValueU8(instance.Strength); output.WriteValueU8(instance.Vitality); output.WriteValueU8(instance.Dexterity); output.WriteValueU8(instance.Agility); output.WriteValueU8(instance.Avoidance); output.WriteValueU8(instance.Intelligence); output.WriteValueU8(instance.Mind); output.WriteValueU8(instance.Resistance); output.WriteValueU8(instance.Unknown33); output.WriteValueU8(instance.Unknown34); output.WriteValueU8(instance.Unknown35); output.WriteValueU8(instance.Unknown36); output.WriteValueU8(instance.Unknown37); output.WriteValueU8(instance.Unknown38); output.WriteValueU8(instance.Unknown39); }
public static Party Read(Stream input, Endian endian) { Party instance; instance.Unknown0000Bytes = input.ReadBytes(Unknown0000Length); instance.NameBytes = input.ReadBytes(NameLength); instance.Units = new Unit[UnitCount]; for (int i = 0; i < UnitCount; i++) { instance.Units[i] = Unit.Read(input, endian); } instance.ItemQuantities = input.ReadBytes(ItemQuantityCount); instance.CursedWeapons = new CursedWeapon[CursedWeaponCount]; for (int i = 0; i < CursedWeaponCount; i++) { instance.CursedWeapons[i] = CursedWeapon.Read(input); } instance.Unknown2CB8 = input.ReadValueU32(endian); instance.Unknown2CBC = input.ReadValueU32(endian); return(instance); }