public void SubactionGroupChanged()
        {
            if (_scriptType != ScriptType.Subactions)
            {
                return;
            }

            if (comboActionEntry.SelectedIndex == _subActionIndex)
            {
                comboBox1_SelectedIndexChanged(null, null);
            }
            else
            {
                comboActionEntry.SelectedIndex = _subActionIndex;
            }

            SubActionEntry grp = RunTime.CurrentSubaction;

            if (grp != null)
            {
                inTransTime.Value        = grp._inTransTime;
                chkNoOutTrans.Checked    = grp._flags.HasFlag(AnimationFlags.NoOutTransition);
                chkTransOutStart.Checked = grp._flags.HasFlag(AnimationFlags.TransitionOutFromStart);
                chkMovesChar.Checked     = grp._flags.HasFlag(AnimationFlags.MovesCharacter);
                chkLoop.Checked          = grp._flags.HasFlag(AnimationFlags.Loop);
                chkUnk.Checked           = grp._flags.HasFlag(AnimationFlags.Unknown);
                chkFixedScale.Checked    = grp._flags.HasFlag(AnimationFlags.FixedScale);
                chkFixedRot.Checked      = grp._flags.HasFlag(AnimationFlags.FixedRotation);
                chkFixedTrans.Checked    = grp._flags.HasFlag(AnimationFlags.FixedTranslation);
                lblActionName.Text       = grp.Name;
            }
        }
        private void ParseScripts(bint* hdr)
        {
            Script s = null;
            int size, count;
            bint* actionOffset;
            _subActions = new BindingList<SubActionEntry>();
            _actions = new BindingList<ActionEntry>();

            if (hdr[3] > 0)
            {
                ActionEntry ag;
                sActionFlags* aflags = (sActionFlags*)Address(hdr[3]);
                if (hdr[5] > 0)
                {
                    actionOffset = (bint*)Address(hdr[5]);
                    size = _root.GetSize(hdr[5]);
                    for (int z = 0; z < size / 4; z++)
                    {
                        sActionFlags flag = aflags[z];
                        _actions.Add(ag = new ActionEntry(flag, z, z));
                        if (actionOffset[z] > 0)
                            ag._entry = Parse<Script>(actionOffset[z], this);
                        else
                            ag._entry = new Script(this);
                    }
                }
            }
            if (hdr[4] > 0)
            {
                SubActionEntry sg;
                sSubActionFlags* sflags = (sSubActionFlags*)Address(hdr[4]);
                size = _root.GetSize(hdr[6]);
                count = size / 4;
                for (int z = 0; z < count; z++)
                {
                    sSubActionFlags flag = sflags[z];
                    _subActions.Add(sg = new SubActionEntry(flag, flag._stringOffset > 0 ? new String((sbyte*)Address(flag._stringOffset)) : "<null>", z));
                }
                for (int i = 0; i < 3; i++)
                {
                    int x = hdr[6 + i];
                    if (x <= 0)
                        continue;

                    actionOffset = (bint*)Address(x);
                    for (int z = 0; z < count; z++)
                    {
                        if (actionOffset[z] > 0)
                            s = Parse<Script>(actionOffset[z], this);
                        else
                            s = new Script(this);
                        _subActions[z].SetWithType(i, s);
                    }
                }
            }
        }