Repository navigation
Per Combo Innate Skills
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.
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:
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 themodidfield inside the JSON when using this folder.
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
modidfield can be safely omitted inside the JSON because the directory's namespace acts as the fallback namespace automatically.
{
"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"
}
]
}
]
}| 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. |
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.
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.
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.
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.
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.
| 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. |
When defining your stun_type string value, use any of the following standard identifiers:
shortlongholdknockbackneutralizefallnone
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.
Displays the currently assigned key for the specified key mapping.
{
"argTargetType": "key_binding",
"translatableKey": "key.mouse.right",
"colorKey": "aqua"
}Displays a translatable text component.
{
"argTargetType": "scripted_text",
"translatableKey": "example.skill.description",
"colorKey": "gold"
}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"
}| 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. |
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.
The disableTooltipProperties field prevents the automatic animation phase properties from being displayed in the skill tooltip.
"disableTooltipProperties": trueBy default:
"disableTooltipProperties": falseWhen enabled, custom tooltip components can still be used normally.
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.
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, executerushing_tempo2.
The mapping is evaluated at the moment the innate skill is activated.
EF: Extended Datapacks
📦 Data
🧰 Core
👁️ Visuals
- Zoom Types
- Weapon Models per Style
- Advanced Swing Trails
- Weapons Passive Particles
- Shader Effects I
- Shader Effects II
- Shader Effects III
⚔️ Combat
🗝️ Skill Builder
🛠️ Innate Builder
- Simple Innate Skills
- Holdable Innate Skills
- Conditional Innate Skills
- Conditional Data Innate Skills
- Conditional Holdable Innate Skills
- Sequential Innate Skills
- Per Combo Innate Skills
- Combo Innate Skills
🗡️ Animation Operations
- Animation Operations
- Animation Properties
⚙️ Third-Party