Пример #1
0
        public Arte(byte[] Bytes, uint Location, uint Size, uint refStringStart)
        {
            Data = new uint[Size / 4];
            for (int i = 0; i < Data.Length; ++i)
            {
                Data[i] = BitConverter.ToUInt32(Bytes, (int)(Location + i * 4)).SwapEndian();
            }

            ID       = Data[1];
            InGameID = Data[2];

            uint refStringLocaton = Data[3];             // seems to be identical with Data[4]

            RefString = Util.GetTextAscii(Bytes, (int)(refStringStart + refStringLocaton));

            NameStringDicId = Data[5];
            DescStringDicId = Data[6];
            Type            = (ArteType)Data[7];

            TPUsage         = Data[8];
            ElementFire     = Data[10];
            ElementEarth    = Data[11];
            ElementWind     = Data[12];
            ElementWater    = Data[13];
            ElementLight    = Data[14];
            ElementDarkness = Data[15];


            // for some reason the data order different between versions?
            if (Size == 876)
            {
                LearnRequirementsOtherArtesType = new uint[6];
                for (int i = 0; i < LearnRequirementsOtherArtesType.Length; ++i)
                {
                    LearnRequirementsOtherArtesType[i] = Data[128 + 22 + i];
                }
                LearnRequirementsOtherArtesId = new uint[6];
                for (int i = 0; i < LearnRequirementsOtherArtesId.Length; ++i)
                {
                    LearnRequirementsOtherArtesId[i] = Data[128 + 28 + i];
                }
                LearnRequirementsOtherArtesUsageCount = new uint[6];
                for (int i = 0; i < LearnRequirementsOtherArtesUsageCount.Length; ++i)
                {
                    LearnRequirementsOtherArtesUsageCount[i] = Data[128 + 34 + i];
                }

                AlteredArteRequirementType = new uint[5];
                for (int i = 0; i < AlteredArteRequirementType.Length; ++i)
                {
                    AlteredArteRequirementType[i] = Data[127 + 69 + i];
                }
                AlteredArteRequirementId = new uint[5];
                for (int i = 0; i < AlteredArteRequirementId.Length; ++i)
                {
                    AlteredArteRequirementId[i] = Data[127 + 74 + i];
                }
                //CharacterRelatedField = Data[?];
                Character = Data[21];

                FatalStrikeType = Data[210];

                UsableInMenu = Data[128 + 44];
            }
            else
            {
                LearnRequirementsOtherArtesType = new uint[6];
                for (int i = 0; i < LearnRequirementsOtherArtesType.Length; ++i)
                {
                    LearnRequirementsOtherArtesType[i] = Data[22 + i];
                }
                LearnRequirementsOtherArtesId = new uint[6];
                for (int i = 0; i < LearnRequirementsOtherArtesId.Length; ++i)
                {
                    LearnRequirementsOtherArtesId[i] = Data[28 + i];
                }
                LearnRequirementsOtherArtesUsageCount = new uint[6];
                for (int i = 0; i < LearnRequirementsOtherArtesUsageCount.Length; ++i)
                {
                    LearnRequirementsOtherArtesUsageCount[i] = Data[34 + i];
                }

                AlteredArteRequirementType = new uint[5];
                for (int i = 0; i < AlteredArteRequirementType.Length; ++i)
                {
                    AlteredArteRequirementType[i] = Data[69 + i];
                }
                AlteredArteRequirementId = new uint[5];
                for (int i = 0; i < AlteredArteRequirementId.Length; ++i)
                {
                    AlteredArteRequirementId[i] = Data[74 + i];
                }
                CharacterRelatedField = Data[95];
                Character             = Data[96];

                FatalStrikeType = Data[83];

                UsableInMenu = Data[44];
            }

            // always identical: 16, 17
            // 59 is some sort of status effect field
        }
Пример #2
0
        public Arte( byte[] Bytes, uint Location, uint Size, uint refStringStart )
        {
            Data = new uint[Size / 4];
            for ( int i = 0; i < Data.Length; ++i ) {
                Data[i] = BitConverter.ToUInt32( Bytes, (int)( Location + i * 4 ) ).SwapEndian();
            }

            ID = Data[1];
            InGameID = Data[2];

            uint refStringLocaton = Data[3]; // seems to be identical with Data[4]
            RefString = Util.GetTextAscii( Bytes, (int)( refStringStart + refStringLocaton ) );

            NameStringDicId = Data[5];
            DescStringDicId = Data[6];
            Type = (ArteType)Data[7];

            TPUsage = Data[8];
            ElementFire = Data[10];
            ElementEarth = Data[11];
            ElementWind = Data[12];
            ElementWater = Data[13];
            ElementLight = Data[14];
            ElementDarkness = Data[15];

            // for some reason the data order different between versions?
            if ( Size == 876 ) {
                LearnRequirementsOtherArtesType = new uint[6];
                for ( int i = 0; i < LearnRequirementsOtherArtesType.Length; ++i ) {
                    LearnRequirementsOtherArtesType[i] = Data[128 + 22 + i];
                }
                LearnRequirementsOtherArtesId = new uint[6];
                for ( int i = 0; i < LearnRequirementsOtherArtesId.Length; ++i ) {
                    LearnRequirementsOtherArtesId[i] = Data[128 + 28 + i];
                }
                LearnRequirementsOtherArtesUsageCount = new uint[6];
                for ( int i = 0; i < LearnRequirementsOtherArtesUsageCount.Length; ++i ) {
                    LearnRequirementsOtherArtesUsageCount[i] = Data[128 + 34 + i];
                }

                AlteredArteRequirementType = new uint[5];
                for ( int i = 0; i < AlteredArteRequirementType.Length; ++i ) {
                    AlteredArteRequirementType[i] = Data[127 + 69 + i];
                }
                AlteredArteRequirementId = new uint[5];
                for ( int i = 0; i < AlteredArteRequirementId.Length; ++i ) {
                    AlteredArteRequirementId[i] = Data[127 + 74 + i];
                }
                //CharacterRelatedField = Data[?];
                Character = Data[21];

                FatalStrikeType = Data[210];

                UsableInMenu = Data[128 + 44];
            } else {
                LearnRequirementsOtherArtesType = new uint[6];
                for ( int i = 0; i < LearnRequirementsOtherArtesType.Length; ++i ) {
                    LearnRequirementsOtherArtesType[i] = Data[22 + i];
                }
                LearnRequirementsOtherArtesId = new uint[6];
                for ( int i = 0; i < LearnRequirementsOtherArtesId.Length; ++i ) {
                    LearnRequirementsOtherArtesId[i] = Data[28 + i];
                }
                LearnRequirementsOtherArtesUsageCount = new uint[6];
                for ( int i = 0; i < LearnRequirementsOtherArtesUsageCount.Length; ++i ) {
                    LearnRequirementsOtherArtesUsageCount[i] = Data[34 + i];
                }

                AlteredArteRequirementType = new uint[5];
                for ( int i = 0; i < AlteredArteRequirementType.Length; ++i ) {
                    AlteredArteRequirementType[i] = Data[69 + i];
                }
                AlteredArteRequirementId = new uint[5];
                for ( int i = 0; i < AlteredArteRequirementId.Length; ++i ) {
                    AlteredArteRequirementId[i] = Data[74 + i];
                }
                CharacterRelatedField = Data[95];
                Character = Data[96];

                FatalStrikeType = Data[83];

                UsableInMenu = Data[44];
            }

            // always identical: 16, 17
            // 59 is some sort of status effect field
        }
Пример #3
0
        public Arte(System.IO.Stream stream, uint refStringStart, EndianUtils.Endianness endian, BitUtils.Bitness bits)
        {
            uint Size = stream.PeekUInt32().FromEndian(endian);

            if ((Size % 4) != 0)
            {
                throw new Exception("Arte data size not divisble by 4.");
            }

            Size -= (bits.NumberOfBytes() - 4) * 2;               // just hack this so i don't have to rewrite this mess...
            Data  = new uint[Size / 4];
            for (int i = 0; i < Data.Length; ++i)
            {
                if (i == 3 || i == 4)
                {
                    Data[i] = (uint)stream.ReadUInt(bits, endian);                       // just hack this so i don't have to rewrite this mess...
                }
                else
                {
                    Data[i] = stream.ReadUInt32().FromEndian(endian);
                }
            }

            ID       = Data[1];
            InGameID = Data[2];

            uint refStringLocaton = Data[3];             // seems to be identical with Data[4]

            RefString = stream.ReadAsciiNulltermFromLocationAndReset(refStringStart + refStringLocaton);

            NameStringDicId = Data[5];
            DescStringDicId = Data[6];
            Type            = (ArteType)Data[7];

            TPUsage         = Data[8];
            ElementFire     = Data[10];
            ElementEarth    = Data[11];
            ElementWind     = Data[12];
            ElementWater    = Data[13];
            ElementLight    = Data[14];
            ElementDarkness = Data[15];


            // for some reason the data order different between versions?
            if (Size == 876)
            {
                LearnRequirementsOtherArtesType = new uint[6];
                for (int i = 0; i < LearnRequirementsOtherArtesType.Length; ++i)
                {
                    LearnRequirementsOtherArtesType[i] = Data[128 + 22 + i];
                }
                LearnRequirementsOtherArtesId = new uint[6];
                for (int i = 0; i < LearnRequirementsOtherArtesId.Length; ++i)
                {
                    LearnRequirementsOtherArtesId[i] = Data[128 + 28 + i];
                }
                LearnRequirementsOtherArtesUsageCount = new uint[6];
                for (int i = 0; i < LearnRequirementsOtherArtesUsageCount.Length; ++i)
                {
                    LearnRequirementsOtherArtesUsageCount[i] = Data[128 + 34 + i];
                }

                AlteredArteRequirementType = new uint[5];
                for (int i = 0; i < AlteredArteRequirementType.Length; ++i)
                {
                    AlteredArteRequirementType[i] = Data[127 + 69 + i];
                }
                AlteredArteRequirementId = new uint[5];
                for (int i = 0; i < AlteredArteRequirementId.Length; ++i)
                {
                    AlteredArteRequirementId[i] = Data[127 + 74 + i];
                }
                //CharacterRelatedField = Data[?];
                Character = Data[21];

                FatalStrikeType = Data[210];

                UsableInMenu = Data[128 + 44];
            }
            else
            {
                LearnRequirementsOtherArtesType = new uint[6];
                for (int i = 0; i < LearnRequirementsOtherArtesType.Length; ++i)
                {
                    LearnRequirementsOtherArtesType[i] = Data[22 + i];
                }
                LearnRequirementsOtherArtesId = new uint[6];
                for (int i = 0; i < LearnRequirementsOtherArtesId.Length; ++i)
                {
                    LearnRequirementsOtherArtesId[i] = Data[28 + i];
                }
                LearnRequirementsOtherArtesUsageCount = new uint[6];
                for (int i = 0; i < LearnRequirementsOtherArtesUsageCount.Length; ++i)
                {
                    LearnRequirementsOtherArtesUsageCount[i] = Data[34 + i];
                }

                AlteredArteRequirementType = new uint[5];
                for (int i = 0; i < AlteredArteRequirementType.Length; ++i)
                {
                    AlteredArteRequirementType[i] = Data[69 + i];
                }
                AlteredArteRequirementId = new uint[5];
                for (int i = 0; i < AlteredArteRequirementId.Length; ++i)
                {
                    AlteredArteRequirementId[i] = Data[74 + i];
                }
                CharacterRelatedField = Data[95];
                Character             = Data[96];

                FatalStrikeType = Data[83];

                UsableInMenu = Data[44];
            }

            // always identical: 16, 17
            // 59 is some sort of status effect field
        }