public AIFlags( IList<byte> bytes, AIFlags defaults ) { Default = defaults; PatcherLib.Utilities.Utilities.CopyByteToBooleans( bytes[0], ref HP, ref MP, ref CancelStatus, ref AddStatus, ref Stats, ref Unequip, ref TargetEnemies, ref TargetAllies ); PatcherLib.Utilities.Utilities.CopyByteToBooleans( bytes[1], ref IgnoreRange, ref Reflectable, ref UndeadReverse, ref Unknown1, ref RandomHits, ref Unknown2, ref Unknown3, ref Silence ); Silence = !Silence; PatcherLib.Utilities.Utilities.CopyByteToBooleans( bytes[2], ref Blank, ref DirectAttack, ref LineAttack, ref VerticalIncrease, ref TripleAttack, ref TripleBracelet, ref MagicDefenseUp, ref DefenseUp ); VerticalIncrease = !VerticalIncrease; }
private Ability( string name, UInt16 offset, IList<byte> first ) { Name = name; Offset = offset; JPCost = PatcherLib.Utilities.Utilities.BytesToUShort( first[0], first[1] ); LearnRate = first[2]; bool dummy = false; PatcherLib.Utilities.Utilities.CopyByteToBooleans( first[3], ref learnWithJP, ref action, ref learnOnHit, ref blank1, ref dummy, ref dummy, ref dummy, ref dummy ); learnWithJP = !learnWithJP; AbilityType = (AbilityType)(first[3] & 0x0F); AIFlags = new AIFlags( first.Sub( 4, 6 ) ); PatcherLib.Utilities.Utilities.CopyByteToBooleans( first[7], ref unknown1, ref unknown2, ref unknown3, ref blank2, ref blank3, ref blank4, ref blank5, ref unknown4 ); }
public static void Copy( AIFlags source, AIFlags destination ) { destination.AddStatus = source.AddStatus; destination.Blank = source.Blank; destination.CancelStatus = source.CancelStatus; destination.DefenseUp = source.DefenseUp; destination.DirectAttack = source.DirectAttack; destination.HP = source.HP; destination.IgnoreRange = source.IgnoreRange; destination.LineAttack = source.LineAttack; destination.MagicDefenseUp = source.MagicDefenseUp; destination.MP = source.MP; destination.RandomHits = source.RandomHits; destination.Reflectable = source.Reflectable; destination.Silence = source.Silence; destination.Stats = source.Stats; destination.TargetAllies = source.TargetAllies; destination.TargetEnemies = source.TargetEnemies; destination.TripleAttack = source.TripleAttack; destination.TripleBracelet = source.TripleBracelet; destination.UndeadReverse = source.UndeadReverse; destination.Unequip = source.Unequip; destination.Unknown1 = source.Unknown1; destination.Unknown2 = source.Unknown2; destination.Unknown3 = source.Unknown3; destination.VerticalIncrease = source.VerticalIncrease; }
public void CopyTo( AIFlags destination ) { Copy( this, destination ); }
protected override void ReadXml(XmlReader reader) { reader.MoveToAttribute("Name"); Name = reader.ReadContentAsString(); reader.MoveToAttribute("Offset"); Offset = (UInt16)reader.ReadContentAsInt(); reader.MoveToElement(); reader.ReadStartElement(); JPCost = (ushort)reader.ReadElementContentAsInt(); LearnRate = (byte)reader.ReadElementContentAsInt(); AbilityType = (AbilityType)Enum.Parse(typeof(AbilityType), reader.ReadElementContentAsString(), true); LearnWithJP = reader.ReadElementContentAsBoolean(); Action = reader.ReadElementContentAsBoolean(); LearnOnHit = reader.ReadElementContentAsBoolean(); Blank1 = reader.ReadElementContentAsBoolean(); Unknown1 = reader.ReadElementContentAsBoolean(); Unknown2 = reader.ReadElementContentAsBoolean(); Unknown3 = reader.ReadElementContentAsBoolean(); Blank2 = reader.ReadElementContentAsBoolean(); Blank3 = reader.ReadElementContentAsBoolean(); Blank4 = reader.ReadElementContentAsBoolean(); Blank5 = reader.ReadElementContentAsBoolean(); Unknown4 = reader.ReadElementContentAsBoolean(); AIFlags = new AIFlags(); ((IXmlSerializable)AIFlags).ReadXml(reader); IsNormal = ((Offset >= 0x000) && (Offset <= 0x16F)); IsItem = ((Offset >= 0x170) && (Offset <= 0x17D)); IsThrowing = ((Offset >= 0x17E) && (Offset <= 0x189)); IsJumping = ((Offset >= 0x18A) && (Offset <= 0x195)); IsCharging = ((Offset >= 0x196) && (Offset <= 0x19D)); IsArithmetick = ((Offset >= 0x19E) && (Offset <= 0x1A5)); IsOther = (Offset >= 0x1A6); bool IsReaction = Offset >= 422 && Offset <= 453; if (IsNormal || IsItem || IsReaction) { reader.MoveToAttribute("value"); ushort effectIndex = (ushort)reader.ReadElementContentAsInt(); reader.MoveToElement(); reader.ReadStartElement(); reader.ReadEndElement(); if (IsItem) { effectIndex &= (ushort)~ItemEffectPrefixValue; } Effect = ourContext == Context.US_PSP ? Effect.PSPEffects[effectIndex] : Effect.PSXEffects[effectIndex]; } if (IsNormal) { Attributes = new AbilityAttributes(ourContext); ((IXmlSerializable)Attributes).ReadXml(reader); } else if (IsItem) { //ItemOffset = (ushort)reader.ReadElementContentAsInt(); SetItemOffset((ushort)reader.ReadElementContentAsInt(), ourContext); } else if (IsThrowing) { Throwing = (ItemSubType)Enum.Parse(typeof(ItemSubType), reader.ReadElementContentAsString(), true); } else if (IsJumping) { reader.ReadStartElement(); JumpHorizontal = (byte)reader.ReadElementContentAsInt(); JumpVertical = (byte)reader.ReadElementContentAsInt(); reader.ReadEndElement(); } else if (IsCharging) { reader.ReadStartElement(); ChargeCT = (byte)reader.ReadElementContentAsInt(); ChargeBonus = (byte)reader.ReadElementContentAsInt(); reader.ReadEndElement(); } else if (IsArithmetick) { ArithmetickSkill = (byte)reader.ReadElementContentAsInt(); } else if (IsOther) { OtherID = (byte)reader.ReadElementContentAsInt(); } else { throw new InvalidOperationException("Invalid item type"); } reader.ReadEndElement(); }