{
  "AbilityMixins": [
    {
      "$type": "AttachStateWithModifierMixin",
      "ConfigList": [
        {
          "AnimatorStateName": "SwitchIn_Attack",
          "FrameCountHigh": 0,
          "FrameCountLow": 0,
          "IsLoop": false,
          "LayerIndex": 0,
          "MaxFrameCountHigh": true,
          "MaxFrameCountLow": false,
          "ModifierNameList": [
            "AttachPointModifier"
          ]
        },
        {
          "AnimatorStateName": "SwitchIn_Attack",
          "FrameCountHigh": 60,
          "FrameCountLow": 48,
          "IsLoop": false,
          "LayerIndex": 0,
          "MaxFrameCountHigh": false,
          "MaxFrameCountLow": false,
          "ModifierNameList": [
            "QTEWarnEffectModifier"
          ]
        }
      ]
    },
    {
      "$type": "AttachStateWithModifierMixin",
      "ConfigList": [
        {
          "AnimatorStateName": "SwitchIn_Attack_Ex",
          "FrameCountHigh": 0,
          "FrameCountLow": 0,
          "IsLoop": false,
          "LayerIndex": 0,
          "MaxFrameCountHigh": true,
          "MaxFrameCountLow": false,
          "ModifierNameList": [
            "AttachPointModifier"
          ]
        },
        {
          "AnimatorStateName": "SwitchIn_Attack_Ex",
          "FrameCountHigh": 21,
          "FrameCountLow": 0,
          "IsLoop": false,
          "LayerIndex": 0,
          "MaxFrameCountHigh": false,
          "MaxFrameCountLow": false,
          "ModifierNameList": [
            "ExQTEWarnEffectModifier"
          ]
        }
      ]
    },
    {
      "$type": "ActwithStateFrameMixin",
      "ConfigList": [
        {
          "ActionList": [
            {
              "$type": "ApplyModifier",
              "ModifierName": "ExQTEMusicModifier",
              "Target": "Self"
            }
          ],
          "AnimatorStateName": "SwitchIn_Attack_Ex_Start",
          "ForceTriggerOnTransitionIn": true,
          "ForceTriggerOnTransitionOut": false,
          "Frame": 0,
          "IsLoop": false,
          "LayerIndex": 0
        },
        {
          "ActionList": [
            {
              "$type": "ApplyModifier",
              "ModifierName": "ExQTEMusicModifier",
              "Target": "Self"
            }
          ],
          "AnimatorStateName": "SwitchIn_Attack_Ex_Start_02",
          "ForceTriggerOnTransitionIn": true,
          "ForceTriggerOnTransitionOut": false,
          "Frame": 0,
          "IsLoop": false,
          "LayerIndex": 0
        }
      ]
    }
  ],
  "AbilityName": "Astra_SwitchIn_Attack_AttackPoint",
  "AbilitySpecials": {
    "AS_QTERemianTimes": {
      "Value": 0,
      "ValueType": "Integer"
    }
  },
  "AbilityStacking": "Unique",
  "Modifiers": {
    "ApplyAstraExQTE02Modifier": {
      "Duration": 5,
      "ModifierStacking": "Replace",
      "OnAttackLanded": [
        {
          "$type": "ApplyModifier",
          "ModifierName": "AstraExQTE02Modifier",
          "Predicates": [
            {
              "$type": "ByIsLocalAvatar",
              "IsLocalAvatar": true,
              "Target": "Self"
            },
            {
              "$type": "ByCauseStun",
              "IsCauseStun": true
            },
            {
              "$type": "ByAnimTagList",
              "TagList": [
                "NormalQTE"
              ]
            }
          ],
          "Target": "Caster"
        }
      ]
    },
    "AstraExQTE02Modifier": {
      "Duration": 3,
      "ModifierStacking": "Replace",
      "OnAdded": [
        {
          "$type": "PopMuteAidAttackSwitchTypeAction",
          "Tag": "Astra_Singing_CommonAid",
          "Target": "Self"
        },
        {
          "$type": "HandleAnimatorZoneTagsAction",
          "AnimatorStateTags": [
            "AidAttack_Astra"
          ],
          "IsAdd": true,
          "Target": "Self"
        }
      ],
      "OnRemoved": [
        {
          "$type": "HandleAnimatorZoneTagsAction",
          "AnimatorStateTags": [
            "AidAttack_Astra"
          ],
          "IsAdd": false,
          "Target": "Self"
        },
        {
          "$type": "PushMuteAidAttackSwitchTypeAction",
          "SwitchTypeList": [
            "CommonAid"
          ],
          "Tag": "Astra_Singing_CommonAid",
          "Target": "Self"
        }
      ],
      "OnSwitchInBegin": [
        {
          "$type": "RemoveModifier",
          "ModifierName": "AstraExQTE02Modifier",
          "Predicates": [
            {
              "$type": "ByAvatarSwitchType",
              "SwitchType": "AidAttack",
              "Target": "Self"
            }
          ],
          "Target": "Self"
        }
      ]
    },
    "AttachPointModifier": {
      "Duration": -1,
      "ModifierMixins": [
        {
          "$type": "AttachPointFollowMixin",
          "AttachPointName": "AstraSwitchInAttackPoint",
          "FollowPosRot": {
            "CoordsOption": "ReferTarget",
            "NeedRaycastGround": true,
            "Offset": {
              "AngleOffset": {
                "x": 0,
                "y": 0,
                "z": 0
              },
              "BackupPositionOffset": {
                "x": 0,
                "y": 0,
                "z": 6
              },
              "IsUseRotationXZ": false,
              "IsUseRotationY": true,
              "PositionOffset": {
                "x": 0,
                "y": 0,
                "z": 0
              }
            },
            "RaycastGroundOffset": 0,
            "TargetOption": {
              "$type": "ConfigPosRotReferTarget",
              "AttachPoint": "MiddlePoint",
              "BackupOffsetReferTarget": "Self",
              "IsUseAttachPointPos": true,
              "IsUseAttachPointRotation": false,
              "OffsetReferTarget": "SelfAttackTarget"
            }
          },
          "PolarAngleRatio": 5,
          "PolarHeightRatio": 8,
          "PolarRadiusRatio": 15,
          "PosType": "Instant",
          "RotRatio": 8,
          "RotType": "Lerp",
          "TransitionDuration": 0.3
        }
      ],
      "ModifierStacking": "Unique",
      "OnAdded": [
        {
          "$type": "ProcessAttachPointAction",
          "AttachPointName": "AstraSwitchInAttackPoint",
          "HierarchyType": "World",
          "PosRot": {
            "CoordsOption": "Self",
            "NeedRaycastGround": true,
            "Offset": {
              "AngleOffset": {
                "x": 0,
                "y": 0,
                "z": 0
              },
              "BackupPositionOffset": {
                "x": 0,
                "y": 0,
                "z": 6
              },
              "IsUseRotationXZ": false,
              "IsUseRotationY": true,
              "PositionOffset": {
                "x": 0,
                "y": 0,
                "z": 0
              }
            },
            "RaycastGroundOffset": 0,
            "TargetOption": {
              "$type": "ConfigPosRotReferTarget",
              "AttachPoint": "MiddlePoint",
              "BackupOffsetReferTarget": "Self",
              "IsUseAttachPointPos": true,
              "IsUseAttachPointRotation": false,
              "OffsetReferTarget": "SelfAttackTarget"
            }
          },
          "ProcessType": "Create",
          "Target": "Self"
        }
      ]
    },
    "CommonAidToQTEModifier": {
      "Duration": -1,
      "ModifierStacking": "Replace",
      "OnAdded": [
        {
          "$type": "SetAbilitySpecialAction",
          "ModifyFunction": "Replace",
          "Param": 2,
          "ParamName": "AS_QTERemianTimes",
          "ParamType": "Integer",
          "Target": "Caster"
        },
        {
          "$type": "PushOverrideSwitchInAttackAction",
          "SourceSwitchInIndex": 30,
          "SourceSwitchType": "AidAttack",
          "Tag": "Astra_AidToQTE",
          "Target": "Self",
          "TargetSwitchType": "QTE"
        },
        {
          "$type": "SetTargetAbilitySpecialAction",
          "Params": [
            {
              "AbilityName": "Astra_Branch_Singing",
              "AbilitySpecials": [
                {
                  "ModifyFunction": "Replace",
                  "Param": "%AS_QTERemianTimes",
                  "ParamName": "AS_QTERemianTimes",
                  "ParamType": "Float"
                }
              ]
            }
          ],
          "Target": "Caster"
        },
        {
          "$type": "AttachModifier",
          "ModifierName": "OverrideAidAttackBtnUIModifier",
          "Predicates": [
            {
              "$type": "ByAbilitySpecial",
              "CompareType": "Greater",
              "Param": 0,
              "ParamName": "AS_QTERemianTimes",
              "ParamType": "Integer",
              "Target": "Caster"
            }
          ],
          "Target": "Self"
        }
      ],
      "OnRemoved": [
        {
          "$type": "PopOverrideSwitchInAttackAction",
          "SourceSwitchInIndex": 30,
          "SourceSwitchType": "AidAttack",
          "Tag": "Astra_AidToQTE",
          "Target": "Self"
        }
      ],
      "OnSwitchInBegin": [
        {
          "$type": "BranchOperator",
          "Conditions": [
            {
              "$type": "ByAvatarSwitchType",
              "CheckOverrideSwitch": "Override",
              "OverrideSourceType": "AidAttack",
              "SwitchType": "QTE",
              "Target": "Self"
            }
          ],
          "SuccessActions": [
            {
              "$type": "ApplyModifier",
              "ModifierName": "UnlimitQTEChainOnlyOnceModifier",
              "Target": "Self"
            },
            {
              "$type": "SetAbilitySpecialAction",
              "ModifyFunction": "Add",
              "Param": -1,
              "ParamName": "AS_QTERemianTimes",
              "ParamType": "Integer",
              "Target": "Caster"
            },
            {
              "$type": "SetTargetAbilitySpecialAction",
              "Params": [
                {
                  "AbilityName": "Astra_Branch_Singing",
                  "AbilitySpecials": [
                    {
                      "ModifyFunction": "Replace",
                      "Param": "%AS_QTERemianTimes",
                      "ParamName": "AS_QTERemianTimes",
                      "ParamType": "Float"
                    }
                  ]
                }
              ],
              "Target": "Caster"
            },
            {
              "$type": "RemoveModifier",
              "ModifierName": "CommonAidToQTEModifier",
              "Predicates": [
                {
                  "$type": "ByAbilitySpecial",
                  "CompareType": "LessEqual",
                  "Param": 0,
                  "ParamName": "AS_QTERemianTimes",
                  "ParamType": "Integer",
                  "Target": "Caster"
                }
              ],
              "Target": "TeamAvatars"
            }
          ]
        }
      ]
    },
    "ExQTEMusicModifier": {
      "Duration": 60,
      "ModifierStacking": "Replace",
      "OnAdded": [
        {
          "$type": "HandleAnimatorZoneTagsAction",
          "AnimatorStateTags": [
            "ExQTE"
          ],
          "IsAdd": true,
          "Target": "Self"
        },
        {
          "$type": "SetAnimCtrlerParamAction",
          "BoolVal": true,
          "ParamName": "Bool_ExQTE_Music",
          "ParamType": 2,
          "Target": "Self"
        }
      ],
      "OnRemoved": [
        {
          "$type": "HandleAnimatorZoneTagsAction",
          "AnimatorStateTags": [
            "ExQTE"
          ],
          "IsAdd": false,
          "Target": "Self"
        },
        {
          "$type": "SetAnimCtrlerParamAction",
          "BoolVal": false,
          "ParamName": "Bool_ExQTE_Music",
          "ParamType": 2,
          "Target": "Self"
        }
      ]
    },
    "ExQTEReleaseAttackModifier": {
      "DelayHandlers": [
        {
          "DelayTime": 0.1,
          "TimeUpActions": [
            {
              "$type": "HandleAnimEvent",
              "AnimEventID": "Astra_SwitchIn_Attack_Ex_AttackProperty_02",
              "Target": "Self"
            },
            {
              "$type": "AttackCameraShakeAction",
              "ShakeConfigKey": "Astra_Attack_SwitchIn_Attack_Ex_CamShake_E_02",
              "Target": "Self"
            },
            {
              "$type": "GamepadRumbleAction",
              "GamepadRumbleKey": "Astra_GamepadRumble_E_ExQTE_02"
            }
          ]
        },
        {
          "DelayTime": 0.2,
          "TimeUpActions": [
            {
              "$type": "HandleAnimEvent",
              "AnimEventID": "Astra_SwitchIn_Attack_Ex_AttackProperty_02",
              "Target": "Self"
            },
            {
              "$type": "AttackCameraShakeAction",
              "ShakeConfigKey": "Astra_Attack_SwitchIn_Attack_Ex_CamShake_E_02",
              "Target": "Self"
            },
            {
              "$type": "GamepadRumbleAction",
              "GamepadRumbleKey": "Astra_GamepadRumble_E_ExQTE_02"
            }
          ]
        },
        {
          "DelayTime": 0.4,
          "TimeUpActions": [
            {
              "$type": "HandleAnimEvent",
              "AnimEventID": "Astra_SwitchIn_Attack_Ex_AttackProperty_03",
              "Target": "Self"
            },
            {
              "$type": "AttackCameraShakeAction",
              "ShakeConfigKey": "Astra_Attack_SwitchIn_Attack_Ex_CamShake_E_03",
              "Target": "Self"
            },
            {
              "$type": "GamepadRumbleAction",
              "GamepadRumbleKey": "Astra_GamepadRumble_E_ExQTE_03"
            }
          ]
        }
      ],
      "Duration": 1,
      "IgnoreTimeScale": false,
      "ModifierStacking": "Replace",
      "NotIgnoreList": [
        "World",
        "Owner"
      ],
      "OnAdded": [
        {
          "$type": "ApplyModifier",
          "ModifierName": "CommonAidToQTEModifier",
          "Target": "TeamAvatars"
        },
        {
          "$type": "TriggerAbilityAction",
          "AbilityName": "Astra_Branch_Singing",
          "Target": "Self"
        },
        {
          "$type": "ProcessAttachPointAction",
          "AttachPointName": "AstraSwitchInAttackPoint",
          "HierarchyType": "World",
          "PosRot": {
            "CoordsOption": "Self",
            "NeedRaycastGround": true,
            "Offset": {
              "AngleOffset": {
                "x": 0,
                "y": 0,
                "z": 0
              },
              "BackupPositionOffset": {
                "x": 0,
                "y": 0,
                "z": 6
              },
              "IsUseRotationXZ": true,
              "IsUseRotationY": true,
              "PositionOffset": {
                "x": 0,
                "y": 0,
                "z": 0
              }
            },
            "TargetOption": {
              "$type": "ConfigPosRotReferTarget",
              "BackupOffsetReferTarget": "Self",
              "IsUseAttachPointPos": true,
              "IsUseAttachPointRotation": false,
              "OffsetReferTarget": "SelfAttackTarget"
            }
          },
          "Target": "Self"
        },
        {
          "$type": "FireEffect",
          "AttachPointName": "AstraSwitchInAttackPoint",
          "EffectPattern": "Eff_Astra_Attack_Branch_01_Release_03_ShockWave",
          "Target": "Self"
        },
        {
          "$type": "HandleAnimEvent",
          "AnimEventID": "Astra_SwitchIn_Attack_Ex_AttackProperty_01",
          "Target": "Self"
        },
        {
          "$type": "AttackCameraShakeAction",
          "ShakeConfigKey": "Astra_Attack_SwitchIn_Attack_Ex_CamShake_E_01",
          "Target": "Self"
        },
        {
          "$type": "GamepadRumbleAction",
          "GamepadRumbleKey": "Astra_GamepadRumble_E_ExQTE_01"
        }
      ]
    },
    "ExQTEWarnEffectModifier": {
      "Duration": -1,
      "ModifierStacking": "MultipleAllRefresh",
      "OnAdded": [
        {
          "$type": "AttachEffect",
          "AttachPointName": "AstraSwitchInAttackPoint",
          "EffectPattern": "Eff_Astra_Attack_Normal_03_04_Warn",
          "Target": "Self"
        }
      ],
      "OnRemoved": [
        {
          "$type": "ApplyModifier",
          "ModifierName": "ExQTEReleaseAttackModifier",
          "Target": "Self"
        },
        {
          "$type": "TriggerAbilityAction",
          "AbilityName": "Astra_ExQTE_RecoverHP",
          "Target": "Self"
        }
      ]
    },
    "OverrideAidAttackBtnUIModifier": {
      "Duration": -1,
      "ModifierStacking": "Unique",
      "Properties": {
        "Actor_OverrideAidAttackBtnUI": 1
      }
    },
    "QTEReleaseAttackModifier": {
      "Duration": 1,
      "ModifierStacking": "Replace",
      "OnAdded": [
        {
          "$type": "TriggerAbilityAction",
          "AbilityName": "Astra_Branch_Singing",
          "Target": "Self"
        },
        {
          "$type": "ProcessAttachPointAction",
          "AttachPointName": "AstraSwitchInAttackPoint",
          "HierarchyType": "World",
          "PosRot": {
            "CoordsOption": "Self",
            "NeedRaycastGround": true,
            "Offset": {
              "AngleOffset": {
                "x": 0,
                "y": 0,
                "z": 0
              },
              "BackupPositionOffset": {
                "x": 0,
                "y": 0,
                "z": 6
              },
              "IsUseRotationXZ": true,
              "IsUseRotationY": true,
              "PositionOffset": {
                "x": 0,
                "y": 0,
                "z": 0
              }
            },
            "TargetOption": {
              "$type": "ConfigPosRotReferTarget",
              "BackupOffsetReferTarget": "Self",
              "IsUseAttachPointPos": true,
              "IsUseAttachPointRotation": false,
              "OffsetReferTarget": "SelfAttackTarget"
            }
          },
          "Target": "Self"
        },
        {
          "$type": "FireEffect",
          "AttachPointName": "AstraSwitchInAttackPoint",
          "EffectPattern": "Eff_Astra_Attack_AssaultAid_03_ShockWave",
          "Target": "Self"
        },
        {
          "$type": "HandleAnimEvent",
          "AnimEventID": "Astra_SwitchIn_Attack_AttackProperty_01",
          "Target": "Self"
        },
        {
          "$type": "AttackCameraShakeAction",
          "ShakeConfigKey": "Astra_SwitchIn_Attack_CamShake_E_01",
          "Target": "Self"
        },
        {
          "$type": "GamepadRumbleAction",
          "GamepadRumbleKey": "Astra_GamepadRumble_E_SwitchIn_Attack_01"
        },
        {
          "$type": "TriggerAbilityAction",
          "AbilityName": "Astra_Charge",
          "Target": "Self"
        }
      ]
    },
    "QTEWarnEffectModifier": {
      "Duration": -1,
      "ModifierStacking": "MultipleAllRefresh",
      "OnAdded": [
        {
          "$type": "AttachEffect",
          "AttachPointName": "AstraSwitchInAttackPoint",
          "EffectPattern": "Eff_Astra_Attack_Normal_03_04_Warn",
          "Target": "Self"
        }
      ],
      "OnRemoved": [
        {
          "$type": "ApplyModifier",
          "ModifierName": "QTEReleaseAttackModifier",
          "Target": "Self"
        }
      ]
    },
    "UnlimitQTEChainOnlyOnceModifier": {
      "Duration": 5,
      "ModifierStacking": "Replace",
      "OnAdded": [
        {
          "$type": "PushQTEChainOnlyOnceLimitAction",
          "Target": "Self"
        },
        {
          "$type": "HandleAnimatorZoneTagsAction",
          "AnimatorStateTags": [
            "PushQTEChainOnlyOnceLimit"
          ],
          "IsAdd": true,
          "Target": "Self"
        }
      ],
      "OnAttackLanded": [
        {
          "$type": "RemoveModifier",
          "ModifierName": "UnlimitQTEChainOnlyOnceModifier",
          "Predicates": [
            {
              "$type": "ByOriginalCauseStun",
              "IsCauseStun": true,
              "Target": "Self"
            },
            {
              "$type": "ByAnimTagList",
              "TagList": [
                "NormalQTE"
              ],
              "Target": "Self"
            }
          ],
          "Target": "Self"
        }
      ],
      "OnRemoved": [
        {
          "$type": "PopQTEChainOnlyOnceLimitAction",
          "Target": "Self"
        },
        {
          "$type": "HandleAnimatorZoneTagsAction",
          "AnimatorStateTags": [
            "PushQTEChainOnlyOnceLimit"
          ],
          "IsAdd": false,
          "Target": "Self"
        },
        {
          "$type": "TriggerSoundAction",
          "Predicates": [
            {
              "$type": "ByAbilitySpecial",
              "CompareType": "LessEqual",
              "Param": 0,
              "ParamName": "AS_QTERemianTimes",
              "ParamType": "Integer",
              "Target": "Caster"
            }
          ],
          "Target": "Caster",
          "soundActionKey": "SA_Astra_SpecialSwitchInQTE_Finish"
        }
      ],
      "OnSkillStart": [
        {
          "$type": "RemoveModifier",
          "ModifierName": "UnlimitQTEChainOnlyOnceModifier",
          "Predicates": [
            {
              "$type": "ByNot",
              "Predicates": [
                {
                  "$type": "ByFromSkillType",
                  "SkillType": "QTE",
                  "Target": "Self"
                }
              ]
            }
          ],
          "Target": "Self"
        }
      ],
      "OnSwitchTriggered": [
        {
          "$type": "RemoveModifier",
          "ModifierName": "UnlimitQTEChainOnlyOnceModifier",
          "Target": "Self"
        }
      ]
    }
  }
}