Skip to content

Per Combo Innate Skills

Sleys edited this page Sep 14, 2026 · 3 revisions

Per Combo Innate Skills are designed for combat abilities whose animation changes depending on the current animation in the weapon's combo.

Instead of always playing the same skill animation, the skill checks the animation currently being played and selects the corresponding entry from per_combo_list.

This allows a single innate skill to provide different attacks for different combo steps.

For example, a skill can map:

  • uchigatana_auto1 → rushing_tempo1
  • uchigatana_auto2 → rushing_tempo2
  • uchigatana_auto3 → rushing_tempo3

The skill therefore follows the current combo position without requiring a separate innate skill for every attack.


📁 File Locations & Loading Methods

Depending on whether you want users to be able to modify the skills locally or bundle them inside your mod, choose one of the following paths:

⚙️ Option A: Local Config Folder

Use this path if you want the setup to be easily accessible and editable by servers or pack developers.

  • Path: .minecraft/config/epicfight_edp/innate_skill_builder/per_combo_innate_skill/*.json
  • ⚠️ Rule: You MUST explicitly declare the modid field inside the JSON when using this folder.

📦 Option B: In-Jar (Bundled Data-Driven)

Use this path to ship skills natively pre-configured inside your mod jar or data-driven setup.

  • Path: data_driven/<your_modid>/innate_skill_builder/per_combo_innate_skill/*.json
  • 💡 Rule: The modid field can be safely omitted inside the JSON because the directory's namespace acts as the fallback namespace automatically.

📄 JSON Structure & Schema

{
  "modid": "epicfight",
  "name": "per_combo_skill",

  "per_combo_list": [
    {
      "target_animation": "epicfight:biped/combat/uchigatana_auto1",
      "animation": "epicfight:biped/skill/rushing_tempo1",
      "properties": [
        {
          "max_strikes": 1.0,
          "damage_multiplier": 1.2,
          "armor_negation": 20.0,
          "impact": 1.6,
          "stun_type": "long"
        }
      ]
    },
    {
      "target_animation": "epicfight:biped/combat/uchigatana_auto2",
      "animation": "epicfight:biped/skill/rushing_tempo2",
      "properties": [
        {
          "max_strikes": 1.0,
          "damage_multiplier": 1.4,
          "armor_negation": 20.0,
          "impact": 1.6,
          "stun_type": "long"
        }
      ]
    },
    {
      "target_animation": "epicfight:biped/combat/uchigatana_auto3",
      "animation": "epicfight:biped/skill/rushing_tempo3",
      "properties": [
        {
          "max_strikes": 1.0,
          "damage_multiplier": 1.8,
          "armor_negation": 20.0,
          "impact": 1.6,
          "stun_type": "long"
        }
      ]
    }
  ]
}

📋 Parameters & Field Definitions

Field Type Description
modid String The target mod namespace used to register the skill.
name String Unique internal identifier for the custom innate skill.
per_combo_list Array List of animation mappings used to determine which skill animation is executed.
disableTooltipProperties Boolean Prevents animation properties from being displayed in the tooltip.
tooltip Array Optional list of custom tooltip components.

⚔️ Per Combo Mapping

Each entry inside per_combo_list connects a target animation to the animation that the skill should execute.

{
  "target_animation": "epicfight:biped/combat/uchigatana_auto1",
  "animation": "epicfight:biped/skill/rushing_tempo1",
  "properties": [
    {
      "max_strikes": 1.0,
      "damage_multiplier": 1.2,
      "armor_negation": 20.0,
      "impact": 1.6,
      "stun_type": "long"
    }
  ]
}

The relationship is:

Current Animation
       │
       ▼
target_animation
       │
       │ matches
       ▼
animation
       │
       ▼
Execute Skill Animation

For example:

uchigatana_auto1
       │
       ▼
rushing_tempo1

uchigatana_auto2
       │
       ▼
rushing_tempo2

uchigatana_auto3
       │
       ▼
rushing_tempo3

This makes the innate skill follow the current combo animation.


target_animation

The target_animation identifies the animation that must currently be playing for this entry to be selected.

"target_animation": "epicfight:biped/combat/uchigatana_auto1"

This is the input animation of the mapping.

If the currently active animation matches this value, the corresponding animation is selected.


animation

The animation field defines the animation that the innate skill executes when its target_animation matches the current animation.

"animation": "epicfight:biped/skill/rushing_tempo1"

This is the output animation of the mapping.


🔄 Combo Example

Consider a weapon with the following combo:

Auto 1
  │
  ▼
uchigatana_auto1

Auto 2
  │
  ▼
uchigatana_auto2

Auto 3
  │
  ▼
uchigatana_auto3

A Per Combo Innate Skill can map each step to a different skill animation:

┌───────────────────────┐
│ uchigatana_auto1      │
└───────────┬───────────┘
            │
            ▼
┌───────────────────────┐
│ rushing_tempo1        │
└───────────────────────┘


┌───────────────────────┐
│ uchigatana_auto2      │
└───────────┬───────────┘
            │
            ▼
┌───────────────────────┐
│ rushing_tempo2        │
└───────────────────────┘


┌───────────────────────┐
│ uchigatana_auto3      │
└───────────┬───────────┘
            │
            ▼
┌───────────────────────┐
│ rushing_tempo3        │
└───────────────────────┘

The player can therefore activate the same innate skill at different points in the combo and receive a different animation.


⚔️ Combat Properties

Each entry can define its own properties block.

This means every combo step can have independent combat behavior.

For example:

{
  "target_animation": "epicfight:biped/combat/uchigatana_auto3",
  "animation": "epicfight:biped/skill/rushing_tempo3",
  "properties": [
    {
      "max_strikes": 1.0,
      "damage_multiplier": 1.8,
      "armor_negation": 20.0,
      "impact": 1.6,
      "stun_type": "long"
    }
  ]
}

The third combo attack can therefore deal more damage than the first two without requiring a separate skill definition.


📋 Combat Properties Matrix

Property Type Description
max_strikes Float Maximum number of targets/entities that can be hit in a single sweep.
damage_multiplier Float Raw base attack damage scaling factor.
armor_negation Float Percentage value of the victim's armor ignored during damage calculations.
impact Float Stagger intensity and hit-reaction strength forced onto the target.
stun_type String The visual/mechanical stun state applied on hit.
extra_damage Boolean Allows the ability's damage to scale with the Sweeping Edge enchantment.
swing_sound Resource Location Sound played while swinging.
hit_sound Resource Location Sound played when hitting an entity.
particle Resource Location Hit particle spawned on impact.

💥 Valid Hit Stun Types

When defining your stun_type string value, use any of the following standard identifiers:

  • short
  • long
  • hold
  • knockback
  • neutralize
  • fall
  • none

📋 Tooltip (Optional)

The tooltip array defines a list of text components displayed in the skill description.

Each entry is resolved independently and can represent a key binding, localized text, or a dynamically calculated numeric value.

Components are rendered in the order they appear in the array.

Supported Component Types

1. key_binding

Displays the currently assigned key for the specified key mapping.

{
  "argTargetType": "key_binding",
  "translatableKey": "key.mouse.right",
  "colorKey": "aqua"
}

2. scripted_text

Displays a translatable text component.

{
  "argTargetType": "scripted_text",
  "translatableKey": "example.skill.description",
  "colorKey": "gold"
}

3. damage_operation

Displays a numeric value that can be calculated from either a fixed base value or the attack damage of the held item.

{
  "argTargetType": "damage_operation",
  "baseValue": 10.0,
  "operation": "multiplication",
  "modifier": 1.5,
  "format": "%.1f",
  "colorKey": "red"
}

📋 Component Properties

Property Required Description
argTargetType Yes Type of component to render.
translatableKey Depends Translation key or keybinding identifier used by the component.
colorKey No Text color applied to the rendered component.
baseValue No Base numeric value used by damage_operation.
operation No Mathematical operation applied to the value.
modifier No Operand used by the selected operation.
format No Java format string used to display numeric values.

💥 Supported Operations

The following operations are available for damage_operation.

Operation Result
addition base + modifier
subtract base - modifier
multiplication base * modifier
division base / modifier

If baseValue is omitted, the component uses the attack damage of the provided item stack as its starting value.

This allows tooltip values to scale dynamically with weapon attributes.


📋 Disable Tooltip Properties

The disableTooltipProperties field prevents the automatic animation phase properties from being displayed in the skill tooltip.

"disableTooltipProperties": true

By default:

"disableTooltipProperties": false

When enabled, custom tooltip components can still be used normally.


💡 Example: Progressive Combo Skill

A common use case is to make each successive combo attack progressively stronger.

{
  "modid": "epicfight",
  "name": "per_combo_skill",

  "per_combo_list": [
    {
      "target_animation": "epicfight:biped/combat/uchigatana_auto1",
      "animation": "epicfight:biped/skill/rushing_tempo1",
      "properties": [
        {
          "max_strikes": 1.0,
          "damage_multiplier": 1.2,
          "armor_negation": 20.0,
          "impact": 1.6,
          "stun_type": "long"
        }
      ]
    },

    {
      "target_animation": "epicfight:biped/combat/uchigatana_auto2",
      "animation": "epicfight:biped/skill/rushing_tempo2",
      "properties": [
        {
          "max_strikes": 1.0,
          "damage_multiplier": 1.4,
          "armor_negation": 20.0,
          "impact": 1.6,
          "stun_type": "long"
        }
      ]
    },

    {
      "target_animation": "epicfight:biped/combat/uchigatana_auto3",
      "animation": "epicfight:biped/skill/rushing_tempo3",
      "properties": [
        {
          "max_strikes": 1.0,
          "damage_multiplier": 1.8,
          "armor_negation": 20.0,
          "impact": 1.6,
          "stun_type": "long"
        }
      ]
    }
  ]
}

In this example:

Current Combo Animation Executed Skill Animation Damage Multiplier
uchigatana_auto1 rushing_tempo1 1.2
uchigatana_auto2 rushing_tempo2 1.4
uchigatana_auto3 rushing_tempo3 1.8

The same innate skill therefore behaves differently depending on where the player is in the combo.


⚠️ Implementation Note

The target_animation is used to determine which entry should be selected, while animation determines what animation the skill executes.

The two values therefore serve different purposes:

target_animation = Condition / Input
animation        = Result / Output

For example:

{
  "target_animation": "epicfight:biped/combat/uchigatana_auto2",
  "animation": "epicfight:biped/skill/rushing_tempo2"
}

means:

If the current animation is uchigatana_auto2, execute rushing_tempo2.

The mapping is evaluated at the moment the innate skill is activated.

EF: Extended Datapacks

📦 Data

🧰 Core

👁️ Visuals

⚔️ Combat

🗝️ Skill Builder

🛠️ Innate Builder

🗡️ Animation Operations

⚙️ Third-Party

Clone this wiki locally