Ejemplo n.º 1
0
        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;
        }
Ejemplo n.º 2
0
        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 );
        }
Ejemplo n.º 3
0
 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;
 }
Ejemplo n.º 4
0
 public void CopyTo( AIFlags destination )
 {
     Copy( this, destination );
 }
Ejemplo n.º 5
0
        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();
        }