public TaeEditTaeHeaderForm(TAE tae)
        {
            Tae = tae;

            //copyOfOriginalHeader = new TAEHeader();

            //copyOfOriginalHeader.FileID = tae.Header.FileID;
            //copyOfOriginalHeader.FileID2 = tae.Header.FileID2;
            //copyOfOriginalHeader.FileID3 = tae.Header.FileID3;
            //copyOfOriginalHeader.Version = tae.Header.Version;
            //copyOfOriginalHeader.IsBigEndian = tae.Header.IsBigEndian;
            //copyOfOriginalHeader.UnknownB00 = tae.Header.UnknownB00;
            //copyOfOriginalHeader.UnknownB01 = tae.Header.UnknownB01;
            //copyOfOriginalHeader.UnknownB02 = tae.Header.UnknownB02;
            //copyOfOriginalHeader.UnknownB03 = tae.Header.UnknownB03;
            //copyOfOriginalHeader.UnknownC = tae.Header.UnknownC;
            //copyOfOriginalHeader.UnknownE00 = tae.Header.UnknownE00;
            //copyOfOriginalHeader.UnknownE01 = tae.Header.UnknownE01;
            //copyOfOriginalHeader.UnknownE02 = tae.Header.UnknownE02;
            //copyOfOriginalHeader.UnknownE03 = tae.Header.UnknownE03;
            //copyOfOriginalHeader.UnknownE04 = tae.Header.UnknownE04;
            //copyOfOriginalHeader.UnknownE07 = tae.Header.UnknownE07;
            //copyOfOriginalHeader.UnknownE08 = tae.Header.UnknownE08;
            //copyOfOriginalHeader.UnknownE09 = tae.Header.UnknownE09;

            //copyOfOriginalHeader.UnknownFlags = new byte[tae.Header.UnknownFlags.Length];
            //for (int i = 0; i < tae.Header.UnknownFlags.Length; i++)
            //{
            //    copyOfOriginalHeader.UnknownFlags[i] = tae.Header.UnknownFlags[i];
            //}

            InitializeComponent();

            //Text = $"Editing Header of {Path.GetFileName(Tae.FilePath ?? Tae.VirtualUri)}";
        }
        void AddFadingAnimations()
        {
            foreach (int chrID in Mod.Characters.Keys)
            {
                if (chrID == 0)
                {
                    continue;
                }

                TAE           enemyTAE = Mod[chrID].GetTAE(chrID);
                TAE.Animation standing = enemyTAE.Animations[0];

                TAE.Animation fadeIn = new TAE.Animation(10, standing.MiniHeader, standing.AnimFileName);
                fadeIn.CloneReference(standing, 0, true);
                TAE.Event fadeInEvent = new TAE.Event(0.0f, 2.0f, 193, 0, false, DS1[0][193]);
                fadeInEvent.Parameters["GhostVal1"] = 0.0f;
                fadeInEvent.Parameters["GhostVal2"] = 1.0f;
                fadeIn.Events.Add(fadeInEvent);
                enemyTAE.Animations.Add(fadeIn);

                TAE.Animation fadeOut = new TAE.Animation(11, standing.MiniHeader, standing.AnimFileName);
                fadeOut.CloneReference(standing, 0, true);
                TAE.Event fadeOutEvent = new TAE.Event(0.0f, 2.0f, 193, 0, false, DS1[0][193]);
                fadeOutEvent.Parameters["GhostVal1"] = 1.0f;
                fadeOutEvent.Parameters["GhostVal2"] = 0.0f;
                TAE.Event invisibleEvent = new TAE.Event(2.0f, 10.0f, 193, 0, false, DS1[0][193]);
                invisibleEvent.Parameters["GhostVal1"] = 0.0f;
                invisibleEvent.Parameters["GhostVal2"] = 0.0f;
                fadeOut.Events.Add(fadeOutEvent);
                fadeOut.Events.Add(invisibleEvent);
                enemyTAE.Animations.Add(fadeOut);
            }
        }
Exemple #3
0
        public AnimHandler(int m, TAE t, AnimationRef a)
        {
            MoveSet = m;
            TAE     = t;
            Anim    = a;

            OriginalEvents = GUI.CloneEventList(Anim.EventList);
        }
Exemple #4
0
 public TAE.Animation GetAnimInTAE(TAE tae, long id)
 {
     foreach (var a in tae.Animations)
     {
         if (a.ID == id)
         {
             return(a);
         }
     }
     return(null);
 }
        public static void SetIsModified(this TAE tae, bool v, bool updateGui = true)
        {
            lock (isModified_TAE)
            {
                if (!isModified_TAE.ContainsKey(tae))
                {
                    isModified_TAE.Add(tae, false);
                }

                isModified_TAE[tae] = v;
            }
        }
        public static bool GetIsModified(this TAE tae)
        {
            lock (isModified_TAE)
            {
                if (!isModified_TAE.ContainsKey(tae))
                {
                    isModified_TAE.Add(tae, false);
                }

                return(isModified_TAE[tae]);
            }
        }
Exemple #7
0
        public void LoadFromPath(string file)
        {
            ReloadType = TaeFileContainerReloadType.None;

            containerBND3 = null;
            containerBND4 = null;

            taeInBND.Clear();
            hkxInBND.Clear();

            if (BND3.Is(file))
            {
                ContainerType = TaeFileContainerType.BND3;
                containerBND3 = BND3.Read(file);
                foreach (var f in containerBND3.Files)
                {
                    if (TAE.Is(f.Bytes))
                    {
                        taeInBND.Add(f.Name, TAE.Read(f.Bytes));
                    }
                    else if (f.Name.ToUpper().EndsWith(".HKX"))
                    {
                        hkxInBND.Add(f.Name, f.Bytes);
                    }
                }
            }
            else if (BND4.Is(file))
            {
                ContainerType = TaeFileContainerType.BND4;
                containerBND4 = BND4.Read(file);
                foreach (var f in containerBND4.Files)
                {
                    if (TAE.Is(f.Bytes))
                    {
                        taeInBND.Add(f.Name, TAE.Read(f.Bytes));
                    }
                    else if (f.Name.ToUpper().EndsWith(".HKX"))
                    {
                        hkxInBND.Add(f.Name, f.Bytes);
                    }
                }
            }
            else if (TAE.Is(file))
            {
                ContainerType = TaeFileContainerType.TAE;
                taeInBND.Add(file, TAE.Read(file));
            }

            filePath = file;

            //SFTODO
            ReloadType = TaeFileContainerReloadType.None;
        }
        static void Main(string[] args)
        {
            const string basePath = @"D:\Program Files (x86)\Steam\steamapps\common\DARK SOULS III\Game";

            const string actionSetupPath = "Res/TaeToWeaponKind.yml";

            TAEAnalyzerData analyzerData = new YamlDotNet.Serialization.Deserializer().Deserialize <TAEAnalyzerData>(new System.IO.StreamReader(actionSetupPath));

            var reader = new BND4Reader(System.IO.Path.Combine(basePath, "chr/c0000.anibnd.dcx"));


            const int jumpTableEventType = 0;

            const int attackEventType = 1;

            int[] comboBehSubIds = new[] { 4, 116 };

            var taeTemplate = TAE.Template.ReadXMLFile(@"Res/TAE.Template.DS3.xml");

            var jumpTableEventTemplate = taeTemplate[21][jumpTableEventType];
            var attackEventTemplate    = taeTemplate[21][attackEventType];

            var analyzedWeapons = analyzerData.weapons.Select(weaponKvp => (kvp: weaponKvp, taeFileHeader: reader.Files
                                                                            // get all TAE headers
                                                                            .Where(header => header.Name.EndsWith("tae"))
                                                                            .Single(header => System.IO.Path.GetFileName(header.Name) == $"a{weaponKvp.Key}.tae")))
                                  .Select(weaponData => (weaponData: weaponData, fileContents: reader.ReadFile(weaponData.taeFileHeader)))
                                  .Where(weaponData => TAE.Is(weaponData.fileContents))
                                  .Select((weaponData) => (kvp: weaponData.weaponData.kvp, weaponTae: TAE.Read(weaponData.fileContents)))
                                  .SelectMany(myTuple => analyzerData.animKind.Select(animKindKvp => (weaponKindKvp: myTuple.kvp, animKindKvp: animKindKvp, weaponTae: myTuple.weaponTae)))
                                  .SelectMany(myTuple =>
            {
                var attackTimings = myTuple.weaponTae.Animations.Select(anim => {
                    bool didFind = myTuple.animKindKvp.Value.TryGetDetails(myTuple.animKindKvp.Key, anim, out string details);

                    return(found: didFind, myTuple: myTuple, anim, details);
                })
                                    .Where(d => d.found)
                                    .Select(anim => (anim, events: anim.anim.Events.Where(taeEvent => taeEvent.Type == attackEventType || taeEvent.Type == jumpTableEventType)))
                                    .Where(events => events.events.Any())
                                    .Select(anim => anim.events.Aggregate(new AttackInfo(), (attackInfo, taeEvent) =>
                {
                    attackInfo.anim    = anim.anim.anim;
                    attackInfo.details = anim.anim.details;
                    if (taeEvent.Type == attackEventType)
                    {
                        taeEvent.ApplyTemplate(false, attackEventTemplate);
                        if (taeEvent.Parameters["Unk04"].Equals(0))
                        {
                            attackInfo.Attacks.Add((attackStart: taeEvent.StartTime, attackEnd: taeEvent.EndTime));
                        }
                    }
 void ResetSpeedInDeathAnimations()
 {
     foreach (int chrID in Mod.Characters.Keys)
     {
         if (chrID != 0)
         {
             TAE enemyTAE = Mod[chrID].GetTAE(chrID);
             foreach (TAE.Animation deathAnim in enemyTAE.Animations.Where(anim => 2200 >= anim.ID && anim.ID < 2210))
             {
                 deathAnim.ApplyEffect(SpeedEffects[1.0f], 0.0f, 1.0f);
             }
         }
     }
 }
Exemple #10
0
        /// <summary>
        /// Returns an enumerable containing all distinct FFX IDs referenced in the TAE.
        /// </summary>
        public static IEnumerable <int> GetAllFFXIDs(this TAE tae, int variation, GameParamHandler gParam)
        {
            List <int> FFX = new List <int>();

            foreach (Animation anim in tae.Animations)
            {
                foreach (Event evt in anim.Events)
                {
                    if (evt.Type >= 96 && evt.Type <= 121 && evt.Type != 116 && evt.Type != 120)
                    {
                        FFX.Add(Convert.ToInt32(evt.Parameters["FFXID"]));
                    }
                    else if (evt.Type == 2)
                    {
                        int subID = Convert.ToInt32(evt.Parameters["BehaviorSubID"]);
                        int behID = 200000000 + (variation * 1000) + subID;
                        if (!gParam.BehaviorsNPC.ContainsKey(behID))
                        {
                            continue;
                        }
                        Behavior beh = gParam.BehaviorsNPC[behID];
                        if (beh.ReferenceType != 1)
                        {
                            continue;
                        }
                        if (!gParam.Bullets.ContainsKey(beh.RefID))
                        {
                            continue;
                        }
                        Bullet bullet = gParam.Bullets[beh.RefID];
                        FFX.Add(bullet.FlickFX);
                        FFX.Add(bullet.ImpactFX);
                        FFX.Add(bullet.ProjectileFX);
                        while (bullet.BulletOnHit != -1)
                        {
                            if (!gParam.Bullets.ContainsKey(bullet.BulletOnHit))
                            {
                                break;  // missing child bullet
                            }
                            bullet = gParam.Bullets[bullet.BulletOnHit];
                            FFX.Add(bullet.FlickFX);
                            FFX.Add(bullet.ImpactFX);
                            FFX.Add(bullet.ProjectileFX);
                        }
                    }
                }
            }
            return(FFX.Distinct().Where(i => i > -1));
        }
        void RandomizeEnemySpeed(int enemyID)
        {
            // Randomizes speeds of relevant animations in enemy TAE. Also adjusts attack damage based on new speed (excludes Bullets).
            if (enemyID == 0)
            {
                throw new ArgumentException("`RandomizeEnemySpeed` is not for the player.");
            }
            TAE tae = Mod[enemyID].GetTAE(enemyID);

            foreach (var animation in tae.Animations)
            {
                var info = new NPCAnimationInfo(animation, enemyID, Mod);
                if (info.HasInvokeBehaviorEvent && 3000 <= animation.ID && animation.ID <= 3999)
                {
                    RandomizeBehaviorAnimationSpeed(animation, info);
                }
            }
        }
Exemple #12
0
        private void saveANIBNDToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (ANIBND == null)
            {
                return;
            }

            try
            {
                TAE.Save();
                ANIBND.Write(FilePath);
                UTIL.WriteLog(Path.GetFileName(FilePath) + " saved.");
                forceInGameReloadToolStripMenuItem_Click(sender, e);
            }
            catch (Exception ex)
            {
                UTIL.LogException("Error saving ANIBND", ex);
            }
        }
Exemple #13
0
        public static void SetIsModified(this TAE tae, bool v, bool updateGui = true)
        {
            lock (isModified_TAE)
            {
                if (!isModified_TAE.ContainsKey(tae))
                {
                    isModified_TAE.Add(tae, false);
                }

                //if (v)
                //{
                //    Console.WriteLine("REEE");
                //}

                isModified_TAE[tae] = v;

                if (updateGui)
                {
                    Main.TAE_EDITOR.UpdateIsModifiedStuff();
                }
            }
        }
Exemple #14
0
 private void AnimDataGrid_PropertyValueChanged(object s, PropertyValueChangedEventArgs e)
 {
     TAE.Save();
 }
Exemple #15
0
        public void LoadFromPath(string file)
        {
            filePath = file;

            containerANIBND = null;

            taeInBND.Clear();
            hkxInBND.Clear();



            if (BND3.Is(file))
            {
                ContainerType   = TaeFileContainerType.ANIBND;
                containerANIBND = BND3.Read(file);
            }
            else if (BND4.Is(file))
            {
                ContainerType   = TaeFileContainerType.ANIBND;
                containerANIBND = BND4.Read(file);
            }
            else if (TAE.Is(file))
            {
                CheckGameVersionForTaeInterop(file);

                ContainerType = TaeFileContainerType.TAE;
                taeInBND.Add(file, TAE.Read(file));
            }

            void DoBnd(IBinder bnd)
            {
            }

            if (ContainerType == TaeFileContainerType.ANIBND)
            {
                LoadingTaskMan.DoLoadingTaskSynchronous("TaeFileContainer_ANIBND", "Loading all TAE files in ANIBND...", innerProgress =>
                {
                    double i = 0;
                    foreach (var f in containerANIBND.Files)
                    {
                        innerProgress.Report(++i / containerANIBND.Files.Count);

                        CheckGameVersionForTaeInterop(f.Name);
                        if (BND3.Is(f.Bytes))
                        {
                            ContainerType          = TaeFileContainerType.OBJBND;
                            containerOBJBND        = containerANIBND;
                            containerANIBND        = BND3.Read(f.Bytes);
                            anibndPathInsideObjbnd = f.Name;
                            break;
                        }
                        else if (BND4.Is(f.Bytes))
                        {
                            ContainerType          = TaeFileContainerType.OBJBND;
                            containerOBJBND        = containerANIBND;
                            containerANIBND        = BND4.Read(f.Bytes);
                            anibndPathInsideObjbnd = f.Name;
                            break;
                        }
                        else if (TAE.Is(f.Bytes))
                        {
                            taeInBND.Add(f.Name, TAE.Read(f.Bytes));
                        }
                        else if (f.Name.ToUpper().EndsWith(".HKX"))
                        {
                            hkxInBND.Add(f.Name, f.Bytes);
                        }
                    }
                    innerProgress.Report(1);

                    if (ContainerType == TaeFileContainerType.OBJBND)
                    {
                        i = 0;
                        foreach (var f in containerANIBND.Files)
                        {
                            innerProgress.Report(++i / containerANIBND.Files.Count);

                            CheckGameVersionForTaeInterop(f.Name);
                            if (TAE.Is(f.Bytes))
                            {
                                taeInBND.Add(f.Name, TAE.Read(f.Bytes));
                            }
                            else if (f.Name.ToUpper().EndsWith(".HKX"))
                            {
                                hkxInBND.Add(f.Name, f.Bytes);
                            }
                        }
                        innerProgress.Report(1);
                    }
                });
            }
        }
Exemple #16
0
        public void LoadFromPath(string file)
        {
            StandardTAE = null;
            PlayerTAE   = null;

            file = file.ToUpper();
            var fileNoDcx = file;

            IsDcx = false;
            if (file.EndsWith(".DCX"))
            {
                IsDcx     = true;
                fileNoDcx = file.Substring(0, file.Length - 4);
            }

            if (fileNoDcx.EndsWith(".ANIBND"))
            {
                if (IsDcx)
                {
                    dataANIBND = DataFile.LoadFromFile <ANIBND>(file, loadDcxVersion: true);
                }
                else
                {
                    dataANIBND = DataFile.LoadFromFile <ANIBND>(fileNoDcx);
                }

                StandardTAE = dataANIBND.StandardTAE;
                PlayerTAE   = dataANIBND.PlayerTAE;

                ContainerType = TaeFileContainerType.Anibnd;
            }
            else if (fileNoDcx.EndsWith(".OBJBND"))
            {
                if (IsDcx)
                {
                    dataEntityBND = DataFile.LoadFromFile <EntityBND>(file, loadDcxVersion: true);
                }
                else
                {
                    dataEntityBND = DataFile.LoadFromFile <EntityBND>(fileNoDcx);
                }

                StandardTAE = new Dictionary <int, TAE>();
                PlayerTAE   = new Dictionary <int, TAE>();

                foreach (var m in dataEntityBND.Models)
                {
                    if (m.AnimContainer != null)
                    {
                        foreach (var tae in m.AnimContainer.StandardTAE)
                        {
                            StandardTAE.Add(tae.Key, tae.Value);
                        }
                        foreach (var tae in m.AnimContainer.PlayerTAE)
                        {
                            PlayerTAE.Add(tae.Key, tae.Value);
                        }
                    }
                }

                ContainerType = TaeFileContainerType.Objbnd;
            }
            else if (file.EndsWith(".REMOBND"))
            {
                if (IsDcx)
                {
                    dataREMOBND = DataFile.LoadFromFile <REMOBND>(file, loadDcxVersion: true);
                }
                else
                {
                    dataREMOBND = DataFile.LoadFromFile <REMOBND>(fileNoDcx);
                }
                ContainerType = TaeFileContainerType.Remobnd;
            }
            else if (fileNoDcx.EndsWith(".TAE"))
            {
                if (IsDcx)
                {
                    dataTAE = DataFile.LoadFromFile <TAE>(file, loadDcxVersion: true);
                }
                else
                {
                    dataTAE = DataFile.LoadFromFile <TAE>(fileNoDcx);
                }
                ContainerType = TaeFileContainerType.Tae;
            }
        }