예제 #1
0
        /// <summary>
        /// Builds an actual character from its binary data
        /// </summary>
        /// <param name="charData"></param>
        private void BuildCharacter(byte[] charData)
        {
            spriteSet = SpriteSet.AllSprites[charData[0]];
            isPresent = (charData[1] != 0xFF);

            if (!Class.ClassDictionary.TryGetValue(charData[2], out job))
            {
                job = Class.ClassDictionary[0x4A];
            }
            unknownOffset03 = charData[3];
            gender = (Gender)(charData[4] & 0xE0);
            unknownOffset05 = charData[5];
            zodiacSign = (Zodiac)(charData[6] & 0xF0);

            if (gender == Gender.Monster)
            {
                secondaryAction = SecondaryAction.ActionDictionary[0x00];
                supportAbility = Ability.AbilityList[0];
                reactAbility = Ability.AbilityList[0];
                movementAbility = Ability.AbilityList[0];
                head = Item.ItemList[0];
                body = Item.ItemList[0];
                accessory = Item.ItemList[0];
                rightHand = Item.ItemList[0];
                rightShield = Item.ItemList[0];
                leftHand = Item.ItemList[0];
                leftShield = Item.ItemList[0];
            }
            else
            {
                secondaryAction = SecondaryAction.ActionDictionary[charData[7]];
                reactAbility = Ability.GetAbilityFromOffset(TwoBytesToUShort(charData[8], charData[9]));
                supportAbility = Ability.GetAbilityFromOffset(TwoBytesToUShort(charData[10], charData[11]));
                movementAbility = Ability.GetAbilityFromOffset(TwoBytesToUShort(charData[12], charData[13]));
                head = Item.GetItemAtOffset(TwoBytesToUShort(charData[14], charData[15]));
                body = Item.GetItemAtOffset(TwoBytesToUShort(charData[16], charData[17]));
                accessory = Item.GetItemAtOffset(TwoBytesToUShort(charData[18], charData[19]));
                rightHand = Item.GetItemAtOffset(TwoBytesToUShort(charData[20], charData[21]));
                rightShield = Item.GetItemAtOffset(TwoBytesToUShort(charData[22], charData[23]));
                leftHand = Item.GetItemAtOffset(TwoBytesToUShort(charData[24], charData[25]));
                leftShield = Item.GetItemAtOffset(TwoBytesToUShort(charData[26], charData[27]));
            }

            experience = charData[28];
            level = charData[29];
            bravery = charData[30];
            faith = charData[31];

            rawHP = ThreeBytesToUInt(charData[32], charData[33], charData[34]);
            rawMP = ThreeBytesToUInt(charData[35], charData[36], charData[37]);
            rawSP = ThreeBytesToUInt(charData[38], charData[39], charData[40]);
            rawPA = ThreeBytesToUInt(charData[41], charData[42], charData[43]);
            rawMA = ThreeBytesToUInt(charData[44], charData[45], charData[46]);

            byte[] jaBytes = new byte[173];

            Savegame.CopyArray(charData, jaBytes, 0x4BB - 0x48C, 173);
            jobsAndAbilities = new JobsAndAbilities(jaBytes);

            for (int i = 0; i < 15; i++)
            {
                rawName[i] = charData[0xDC + i];
            }

            for (int k = 0; k < 21; k++)
            {
                afterName[k] = charData[0xEB + k];
            }
        }
예제 #2
0
        /// <summary>
        /// Builds a character with "default" stats
        /// </summary>
        private void BuildDummyCharacter()
        {
            accessory = Item.GetItemAtOffset(0);
            body = Item.GetItemAtOffset(0);
            bravery = 0;
            experience = 0;
            faith = 0;

            gender = ((rng.Next() % 2) == 0) ? Gender.Male : Gender.Female;
            Name = string.Empty;

            head = Item.GetItemAtOffset(0);
            isPresent = false;
            job = Class.ClassDictionary[0x00];

            jobLevels = new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
            jobsUnlocked = new byte[] { 0x00, 0x00, 0x00 };
            jp = new ushort[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
            totalJP = new ushort[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };

            jobsAndAbilities = new JobsAndAbilities(new byte[173]);

            leftHand = Item.GetItemAtOffset(0);
            leftShield = Item.GetItemAtOffset(0);
            level = 0;
            movementAbility = Ability.GetAbilityFromOffset(0);
            rawHP = Job.GetRawHPFromActualHP(0);
            rawMA = Job.GetRawMAFromActualMA(0);
            rawMP = Job.GetRawMPFromActualMP(0);
            rawPA = Job.GetRawPAFromActualPA(0);
            rawSP = Job.GetRawSPFromActualSP(0);
            reactAbility = Ability.GetAbilityFromOffset(0);
            rightHand = Item.GetItemAtOffset(0);
            rightShield = Item.GetItemAtOffset(0);
            secondaryAction = SecondaryAction.ActionDictionary[0x00];
            for (int i = 0; i < 22; i++)
            {
                for (int j = 0; j < 3; j++)
                {
                    skillsUnlocked[i, j] = 0x00;
                }
            }

            spriteSet = SpriteSet.AllSprites[0x00];
            supportAbility = Ability.GetAbilityFromOffset(0);
            unknownOffset03 = 0x00;
            unknownOffset05 = 0x00;
            zodiacSign = (Zodiac)0;
            OnProposition = false;
            Kills = 0;

            isDummy = true;
        }