public void OnHit(HitBoxData hitBox)
 {
     data.AddCancelCondition(hitBox.onHitCancel);
     stopTimer.StartTimer(hitBox.hitstop);
     rb.velocity = FPVector2.zero;
     animator.SetBool("TransitionState", false);
 }
        public HitBoxRootNode(HitBoxRootNode copy)
        {
            HitBoxData = copy.HitBoxData;

            foreach (SimpleRectNode node in copy.Children)
            {
                Children.Add(node);
            }
        }
 public HitBox(HitBoxData data)
 {
     ID = HitBox.nextID;
     HitBox.nextID++;
     angle           = data.angle;
     baseKnockback   = data.baseKnockback;
     knockBackGrowth = data.knockBackGrowth;
     damage          = data.damage;
     priority        = data.priority;
     hitList         = new List <int>();
 }
Esempio n. 4
0
        private HitBoxData CollectHitBoxData()
        {
            HITTYPE    hitType          = (HITTYPE)cmbHitType.SelectedIndex;
            HITRESULT  hitResult        = (HITRESULT)cmbHitResult.SelectedIndex;
            JUGGLETYPE juggleProperties = (JUGGLETYPE)cmbJuggleType.SelectedIndex;

            HitBoxData data = new HitBoxData(
                hitType, (int)numericHitStop.Value, (int)numericHitStun.Value, (int)numericBlockStun.Value, (int)numericDamage.Value,
                hitResult, juggleProperties,
                chkWhiffCancel.Checked,
                chklstCancelRoutes.CheckedItems.Cast <string>().ToList());

            return(data);
        }
Esempio n. 5
0
 public int AddRootHitBox(int keyFrame, HitBoxData data)
 {
     if (collisionFrameData.HitBoxKeyFrameData.ContainsKey(keyFrame))
     {
         collisionFrameData.HitBoxKeyFrameData[keyFrame].Add(new HitBoxRootNode(data));
         return(collisionFrameData.HitBoxKeyFrameData[keyFrame].Count - 1);
     }
     else
     {
         collisionFrameData.HitBoxKeyFrameData.Add(keyFrame, new List <HitBoxRootNode> {
             new HitBoxRootNode(data)
         });
         return(collisionFrameData.HitBoxKeyFrameData[keyFrame].Count - 1);
     }
 }
        private void AddHB(object sender, RoutedEventArgs e)
        {
            //debug stuff
            Console.WriteLine(@"HitBox Count : " + App.OpenedFiles.BACFile.HitboxTable.Count);
            App.OpenedFiles.BACFile.HitboxTable.Add(new HitBoxDataset(BACFile.LoadedHitBoxCount + 1));
            Console.WriteLine(@"HitBox Count : " + App.OpenedFiles.BACFile.HitboxTable.Count);
            BACFile.LoadedHitBoxCount++;
            var dataset = App.OpenedFiles.BACFile.HitboxTable[App.OpenedFiles.BACFile.HitboxTable.Count - 1];

            for (var j = 0; j < 12; j++)
            {
                var data = new HitBoxData(j);
                dataset.Data.Add(data);
                data.Damage       = 0;
                data.Stun         = 0;
                data.Effect       = HitBoxData.HitBoxEffect.HIT;
                data.OnHit        = new Script(0);
                data.SelfHitstop  = 0;
                data.SelfShaking  = 0;
                data.TgtHitstop   = 0;
                data.TgtShaking   = 0;
                data.HitGFX       = -1;
                data.Unknown1     = 0;
                data.Unused       = 0;
                data.HitGFX2      = -1;
                data.Unused2      = 0;
                data.Unused3      = 0;
                data.HitSFX       = -1;
                data.HitSFX2      = -1;
                data.TgtSFX       = -1;
                data.ArcadeScore  = 0;
                data.SelfMeter    = 0;
                data.TgtMeter     = 0;
                data.JuggleStart  = 1;
                data.TgtAnimTime  = 10;
                data.MiscFlag     = HitBoxData.MiscFlags.NONE;
                data.VelX         = 0.05f;
                data.VelY         = 0.05f;
                data.VelZ         = 0;
                data.PushbackDist = 0.5f;
                data.AccX         = 0;
                data.AccY         = -0.005f;
                data.AccZ         = 0;
            }
        }
Esempio n. 7
0
        public void SetBoxData(HitBoxData boxData, bool facingRight)
        {
            data = boxData;
            int facing = 1;

            if (!facingRight)
            {
                facing = -1;
            }

            boxCollider.offset = new Vector2(data.offset.x * facing, data.offset.y);
            boxCollider.size   = data.size;

            timer.StartTimer(data.duration);

            //refreshes list to prepare for collision queries
            curColliding.Clear();
            wasColliding.Clear();
            diffColliders.Clear();
        }
Esempio n. 8
0
        private void RefreshHitboxRootData()
        {
            DisableHitboxRootEvents();

            HitBoxData data = renderPreview.GetHitboxRootData();

            cmbHitType.SelectedIndex = (int)data.HitType;
            numericHitStop.Value     = data.HitStop;
            numericHitStun.Value     = data.HitStun;
            numericBlockStun.Value   = data.BlockStun;
            numericDamage.Value      = data.Damage;

            cmbHitResult.SelectedIndex  = (int)data.HitResult;
            cmbJuggleType.SelectedIndex = (int)data.JuggleType;

            chkWhiffCancel.Checked = data.WhiffCancel;
            // todo populate this list with moves
            //chklstCancelRoutes.Items ...

            EnableHitboxRootEvents();
        }
Esempio n. 9
0
        public static void ToFilename(string name, BACFile bac, BCMFile bcm)
        {
            bac.Scripts.Remove(Script.NullScript);
            bac.VFXScripts.Remove(Script.NullScript);

            bac.Scripts    = new ObservableCollection <Script>(bac.Scripts.OrderBy(x => x.Index));
            bac.VFXScripts = new ObservableCollection <Script>(bac.VFXScripts.OrderBy(x => x.Index));

            using (var ms = new MemoryStream())
                using (var outFile = new BinaryWriter(ms))
                {
                    outFile.Write(1128350243);
                    outFile.Write(2686974);
                    outFile.Write(65537);

                    outFile.Write((short)(bac.Scripts.Last().Index + 1));
                    if (bac.VFXScripts.Count > 0)
                    {
                        outFile.Write((short)(bac.VFXScripts.Last().Index + 1));
                    }
                    else
                    {
                        outFile.Write((short)0);
                    }
                    outFile.Write(bac.HitboxTable.Last().Index + 1);

                    int OffsetOffset = (int)outFile.BaseStream.Position;

                    outFile.Write(0);
                    outFile.Write(0);
                    outFile.Write(0);
                    outFile.Write(0);
                    outFile.Write(0);
                    foreach (ObservableCollection <float> list in bac.UnknownFloatData)
                    {
                        foreach (float entry in list)
                        {
                            outFile.Write(entry);
                        }
                    }

                    /* Scripts */
                    int ScriptOffset = (int)outFile.BaseStream.Position;
                    for (int i = 0; i < bac.Scripts.Last().Index + 1; i++)
                    {
                        outFile.Write(0);
                    }
                    /* VFX Scripts */
                    int VFXScriptOffset = (int)outFile.BaseStream.Position;
                    if (bac.VFXScripts.Count != 0)
                    {
                        for (int i = 0; i < bac.VFXScripts.Last().Index + 1; i++)
                        {
                            outFile.Write(0);
                        }
                    }
                    else
                    {
                        VFXScriptOffset = 0;
                    }

                    /* Script Name Offsets */
                    int ScriptNameOffset = (int)outFile.BaseStream.Position;
                    for (int i = 0; i < bac.Scripts.Last().Index + 1; i++)
                    {
                        outFile.Write(0);
                    }

                    /* VFX Script Name Offsets */
                    int VFXScriptNameOffset = (int)outFile.BaseStream.Position;
                    if (bac.VFXScripts.Count == 0)
                    {
                        VFXScriptNameOffset = 0;
                    }
                    else
                    {
                        for (int i = 0; i < bac.VFXScripts.Last().Index + 1; i++)
                        {
                            outFile.Write(0);
                        }
                    }
                    /* Hitbox Table */
                    int HitboxTableOffset = (int)outFile.BaseStream.Position;
                    for (int i = 0; i < bac.HitboxTable.Last().Index + 1; i++)
                    {
                        outFile.Write(0);
                    }
                    outFile.BaseStream.Seek(0, SeekOrigin.End);

                    foreach (Script script in bac.Scripts)
                    {
                        int tmp = (int)outFile.BaseStream.Position;
                        writeScript(bac, bcm, outFile, script);
                        outFile.BaseStream.Seek(ScriptOffset + script.Index * 4);
                        outFile.Write(tmp);
                        outFile.Seek(0, SeekOrigin.End);
                    }
                    foreach (Script script in bac.VFXScripts)
                    {
                        int tmp = (int)outFile.BaseStream.Position;
                        writeScript(bac, bcm, outFile, script);
                        outFile.BaseStream.Seek(VFXScriptOffset + script.Index * 4);
                        outFile.Write(tmp);
                        outFile.Seek(0, SeekOrigin.End);
                    }
                    /* Hitbox Table */
                    foreach (HitBoxDataset dataset in bac.HitboxTable)
                    {
                        int tmp = (int)outFile.BaseStream.Position;
                        outFile.BaseStream.Seek(HitboxTableOffset + dataset.Index * 4);
                        outFile.Write(tmp);
                        outFile.Seek(0, SeekOrigin.End);
                        foreach (HitBoxData data in dataset.Data)
                        {
                            outFile.Write(data.Damage);
                            outFile.Write(data.Stun);
                            outFile.Write((ushort)data.Effect);
                            if (data.OnHit != null)
                            {
                                outFile.Write((short)(data.OnHit.Index - HitBoxData.getIndexOffset(data.Effect)));
                            }
                            else
                            {
                                outFile.Write((short)-1);
                            }
                            //0x8
                            outFile.Write(data.SelfHitstop);
                            outFile.Write(data.SelfShaking);
                            outFile.Write(data.TgtHitstop);
                            outFile.Write(data.TgtShaking);
                            //0x10
                            outFile.Write(data.HitGFX);
                            outFile.Write(data.Unknown1);
                            outFile.Write((short)data.Unused);
                            //0x18
                            outFile.Write(data.HitGFX2);
                            outFile.Write((int)data.Unused2);
                            outFile.Write((short)data.Unused3);
                            //0x20
                            outFile.Write(data.HitSFX);
                            outFile.Write(data.HitSFX2);
                            outFile.Write(data.TgtSFX);

                            outFile.Write(data.ArcadeScore);
                            outFile.Write(data.SelfMeter);
                            outFile.Write(data.TgtMeter);
                            outFile.Write(data.JuggleStart);
                            outFile.Write(data.TgtAnimTime);
                            outFile.Write((int)data.MiscFlag);
                            outFile.Write(data.VelX);
                            outFile.Write(data.VelY);

                            outFile.Write(data.VelZ);
                            outFile.Write(data.PushbackDist);
                            outFile.Write(data.AccX);
                            outFile.Write(data.AccY);
                            outFile.Write(data.AccZ);
                        }
                    }
                    /* Script Names+Offsets */

                    List <string> strings = new List <string>();
                    int           index   = 0;
                    foreach (Script tmp in bac.Scripts)
                    {
                        while (index != tmp.Index)
                        {
                            strings.Add(null);
                            index++;
                        }
                        index++;
                        if (tmp.Name != "null")
                        {
                            strings.Add(tmp.Name);
                        }
                        else
                        {
                            strings.Add(null);
                        }
                    }
                    Util.writeStringTable(outFile, ScriptNameOffset, strings);

                    strings.Clear();
                    index = 0;
                    foreach (Script tmp in bac.VFXScripts)
                    {
                        while (index != tmp.Index)
                        {
                            strings.Add(null);
                            index++;
                        }
                        index++;
                        strings.Add(tmp.Name);
                    }
                    Util.writeStringTable(outFile, VFXScriptNameOffset, strings);

                    outFile.BaseStream.Seek(0x14);
                    outFile.Write(ScriptOffset);
                    outFile.Write(VFXScriptOffset);
                    outFile.Write(ScriptNameOffset);
                    outFile.Write(VFXScriptNameOffset);
                    outFile.Write(HitboxTableOffset);

                    using (var fs = File.Create(name))
                    {
                        ms.WriteTo(fs);
                    }
                }
        }
Esempio n. 10
0
        public static BACFile FromFilename(string name, BCMFile bcm)
        {
            using (var fs = File.OpenRead(name))
                using (var tracker = new TrackingStream(fs))
                    using (var inFile = new BinaryReader(tracker))
                    {
                        AELogger.Log(AELogger.O_SEPARATOR, false);
                        tracker.SetLabel("Header");

                        if (new String(inFile.ReadChars(4)) != "#BAC")
                        {
                            throw new IOException("Not a valid BAC file");
                        }
                        tracker.IgnoreBytes(8);
                        inFile.BaseStream.Seek(12);

                        ushort ScriptCount         = inFile.ReadUInt16();
                        ushort VFXScriptCount      = inFile.ReadUInt16();
                        uint   HitboxTableSize     = inFile.ReadUInt32();
                        int    ScriptOffset        = inFile.ReadInt32();
                        int    VFXScriptOffset     = inFile.ReadInt32();
                        int    ScriptNameOffset    = inFile.ReadInt32();
                        int    VFXScriptNameOffset = inFile.ReadInt32();
                        int    HitboxTableOffset   = inFile.ReadInt32();

                        AELogger.Log("Header done, reading floats");

                        var bac = new BACFile();
                        for (int i = 0; i < 0x1c; i++)
                        {
                            var list = new ObservableCollection <float>();
                            for (int j = 0; j < 6; j++)
                            {
                                list.Add(inFile.ReadSingle());
                            }
                            bac.UnknownFloatData.Add(list);
                        }
                        AELogger.Log("floats done, reading scripts");

                        for (int i = 0; i < ScriptCount; i++)
                        {
                            bac.Scripts.Add(new Script(i));
                        }
                        for (int i = 0; i < VFXScriptCount; i++)
                        {
                            bac.VFXScripts.Add(new Script(i));
                        }
                        for (int i = 0; i < HitboxTableSize; i++)
                        {
                            bac.HitboxTable.Add(new HitBoxDataset(i));
                        }

                        //Link BCM
                        if (bcm != null)
                        {
                            foreach (BCM.Move move in bcm.Moves)
                            {
                                if (move.ScriptIndex != -1)
                                {
                                    move.Script = bac.Scripts[move.ScriptIndex];
                                }
                            }
                        }
                        //Read Scripts
                        readScripts(inFile, bac.Scripts, bcm, ScriptCount, ScriptOffset, ScriptNameOffset, bac);
                        readScripts(inFile, bac.VFXScripts, bcm, VFXScriptCount, VFXScriptOffset, VFXScriptNameOffset, bac);
                        AELogger.Log("scripts done, reading hitboxtable");
                        //Read Hitbox Table
                        for (int i = 0; i < HitboxTableSize; i++)
                        {
                            tracker.SetLabel("HitboxTable#" + i.ToString());
                            inFile.BaseStream.Seek(HitboxTableOffset + i * 4);
                            inFile.BaseStream.Seek(inFile.ReadUInt32());
                            if (inFile.BaseStream.Position == 0)
                            {
                                continue;
                            }
                            var dataset = bac.HitboxTable[i];
                            LoadedHitBoxCount = i;
                            for (int j = 0; j < 12; j++)
                            {
                                HitBoxData data = new HitBoxData(j);
                                dataset.Data.Add(data);
                                data.Damage = inFile.ReadInt16();
                                data.Stun   = inFile.ReadInt16();
                                data.Effect = (HitBoxData.HitBoxEffect)inFile.ReadUInt16();
                                Util.LogUnkEnum(data.Effect, "Hitbox #" + dataset.Index, "hitboxdataset", j);

                                var index = inFile.ReadInt16() + HitBoxData.getIndexOffset(data.Effect);
                                if (index > -1)
                                {
                                    data.OnHit = bac.Scripts.Where(x => x.Index == index).First();
                                }
                                else
                                {
                                    data.OnHit = new Script(index);
                                    if (index <= -1)
                                    {
                                        AELogger.Log("negative index " + index + " in hitboxdata #" + i);
                                    }
                                }

                                data.SelfHitstop = inFile.ReadUInt16();
                                data.SelfShaking = inFile.ReadUInt16();
                                data.TgtHitstop  = inFile.ReadUInt16();
                                data.TgtShaking  = inFile.ReadUInt16();
                                data.HitGFX      = inFile.ReadInt16();
                                data.Unknown1    = inFile.ReadInt32();
                                data.Unused      = (Unused16)inFile.ReadInt16();
                                data.HitGFX2     = inFile.ReadInt16();
                                data.Unused2     = (Unused32)inFile.ReadInt32();
                                data.Unused3     = (Unused16)inFile.ReadInt16();
                                data.HitSFX      = inFile.ReadInt16();
                                data.HitSFX2     = inFile.ReadInt16();
                                data.TgtSFX      = inFile.ReadInt16();

                                data.ArcadeScore = inFile.ReadUInt16();
                                data.SelfMeter   = inFile.ReadInt16();
                                data.TgtMeter    = inFile.ReadInt16();
                                data.JuggleStart = inFile.ReadInt16();
                                data.TgtAnimTime = inFile.ReadInt16();
                                data.MiscFlag    = (HitBoxData.MiscFlags)inFile.ReadInt32();
                                data.VelX        = inFile.ReadSingle();
                                data.VelY        = inFile.ReadSingle();

                                data.VelZ         = inFile.ReadSingle();
                                data.PushbackDist = inFile.ReadSingle();
                                data.AccX         = inFile.ReadSingle();
                                data.AccY         = inFile.ReadSingle();
                                data.AccZ         = inFile.ReadSingle();
                            }
                        }
                        AELogger.Log("hitbox done");
                        List <HitBoxDataset> nullHitboxData = bac.HitboxTable.Where(x => x.Data.Count() == 0).ToList();
                        foreach (HitBoxDataset tmp in nullHitboxData)
                        {
                            bac.HitboxTable.Remove(tmp);
                        }
                        FilterScripts(bac.Scripts);
                        FilterScripts(bac.VFXScripts);
                        AELogger.Log(AELogger.O_SEPARATOR, false);

                        return(bac);
                    }
        }
Esempio n. 11
0
 private void InstallHitBox3(HitBoxData data)
 {
 }
Esempio n. 12
0
 private void InstallHitBox(HitBoxData data)
 {
     hitbox.hitData       = new HitBox(data);
     hitbox.hitData.angle = HelperFunctions.CorrectAngle(hitbox.hitData.angle, facing);
 }
Esempio n. 13
0
        public static List <HitViewModel> ProcessMoveHits(Move move)
        {
            List <float> frameList = new List <float>();

            Script script = move.Script;

            ObservableCollection <SpeedCommand> speedList =
                (ObservableCollection <SpeedCommand>)script.CommandLists[(int)CommandListType.SPEED];

            if (!speedList.Any() || speedList.First().StartFrame != 0)
            {
                speedList.Insert(0, new SpeedCommand {
                    StartFrame = 0, EndFrame = 1, Multiplier = 1
                });
            }


            frameList.Add(0);
            for (int i = 0; i <= script.TotalFrames; i++)
            {
                frameList.Add(
                    frameList.LastOrDefault() + Math.Max(0, 1 / speedList.Last(speed => i >= speed.StartFrame).Multiplier));
            }

            List <int> postSpeedFrameList = frameList.ConvertAll <int>(f => (int)Math.Ceiling(f));

            List <HitViewModel> hits = new List <HitViewModel>();

            ObservableCollection <HitboxCommand> hitBoxList =
                (ObservableCollection <HitboxCommand>)script.CommandLists[(int)CommandListType.HITBOX];

            foreach (HitboxCommand hitBox in hitBoxList)
            {
                // Exclude proximity boxes
                if (hitBox.Type != HitboxCommand.HitboxType.PROXIMITY)
                {
                    HitBoxData hitBoxDataStanding = hitBox.HitboxDataSet.Data[0];
                    HitViewModel.BlockTypeEnum tmpBlock;
                    switch (hitBox.HitLevel)
                    {
                    case HitboxCommand.HitLevelType.UNBLOCKABLE:
                        tmpBlock = HitViewModel.BlockTypeEnum.Unblockable;
                        break;

                    case HitboxCommand.HitLevelType.OVERHEAD:
                        tmpBlock = HitViewModel.BlockTypeEnum.Overhead;
                        break;

                    case HitboxCommand.HitLevelType.MID:
                        tmpBlock = HitViewModel.BlockTypeEnum.Mid;
                        break;

                    case HitboxCommand.HitLevelType.LOW:
                        tmpBlock = HitViewModel.BlockTypeEnum.Low;
                        break;

                    default:
                        tmpBlock = HitViewModel.BlockTypeEnum.Mid;
                        break;
                    }

                    int startup = postSpeedFrameList[script.FirstHitboxFrame];
                    int active  = postSpeedFrameList[script.LastHitboxFrame]
                                  - postSpeedFrameList[script.FirstHitboxFrame];
                    int recovery;

                    if (script.IASAFrame != 0 && script.IASAFrame < script.TotalFrames)
                    {
                        recovery = postSpeedFrameList[script.IASAFrame];
                    }
                    else
                    {
                        recovery = postSpeedFrameList[script.TotalFrames];
                    }

                    recovery -= postSpeedFrameList[script.LastHitboxFrame] - 1;

                    int onBlock = hitBox.HitboxDataSet.Data[4].TgtHitstop - recovery;
                    int onHit   = hitBox.HitboxDataSet.Data[0].OnHit.IASAFrame - active + 1 - recovery;

                    HitViewModel hit = new HitViewModel(
                        tmpBlock,
                        hitBoxDataStanding.Damage,
                        0,
                        hitBoxDataStanding.Stun,
                        0,
                        hitBoxDataStanding.SelfMeter,
                        new HitViewModel.CancelAbilityEnum[] { },
                        startup,
                        active,
                        recovery,
                        onBlock,
                        onHit,
                        string.Empty);

                    hits.Add(hit);
                }
            }

            return(hits);
        }
Esempio n. 14
0
 public void ReInitHitBoxRoot(HitBoxData newData)
 {
     collisionFrameData.HitBoxKeyFrameData[selectedKeyFrame][selectedRootIndex].HitBoxData = newData;
 }
 public HitBoxRootNode(HitBoxData hitBoxData)
 {
     HitBoxData = hitBoxData;
 }