Skip to content

Skills

All · 20 min read · No code

A character's skill trees.

A character's skill trees.

Skills are each character's passive upgrades. Every character has a skill tree of branches (five in XC1), each holding five skills learnt strictly top to bottom. Characters earn skill points (SP) from kills; the SP flows into the one branch the player has selected, and the selected branch also grants that branch's trait, a stat bonus that grows as the branch fills. Progress is owned by the same component that owns levels, Game/BP_XenoCore_Progression (UXenoCoreProgressionComponent), and is stored per character, keyed by the member definition. The one idea: a tree is a Data Table and a save only ever stores counts. "Branch row X, 3 skills learnt, 240 SP into the fourth" is the whole record, so you can rewrite, rename or rebalance skills without breaking saves, and every stat a skill gives is re-derived from that record whenever anything changes.

At a glance

In play: the Skills screen (main menu › Skills) shows each character's branches; pick one, and the SP from every kill fills its skills top to bottom.

What you can change, no code:

  • A character's tree, a new branch or a new skill: Add a skill or a skill tree
  • SP costs, trait ladders and SP per kill: the three shared tables in Battle/Skills
  • How fast SP comes in overall: Skill Point Reward Scale on Game/BP_XenoCore_Progression
  • Every setting: What you can change

63 shipped skills are stand-ins

Every one of the 100 shipped skills, and every branch trait, does something. But 63 of the skills keep their Xenoblade Chronicles name, shape, colour, scope and cost while doing a different, simpler thing, because the system their original effect needs is not built yet (tension, visions, chain attacks, counters, equipment weight classes, gem crafting), or is built without the hook the skill needs (aggro modifiers on arts, Party Gauge fill and revive bonuses). Stand-in skills lists each one, what it does, and what it waits on.

How it fits together

Piece Asset or class What it does
Skill tree Battle/Skills/DT_XenoCore_SkillTree_*, rows of XenoCoreSkillBranchRow One row per branch. The row name is the branch's id; row order is the order the branches are drawn in.
The character's tree Skill Tree on the character Blueprint (XenoCore › Skills) Which table this character uses. Read from the class defaults, so a benched character (no body) still has one.
Cost curves Battle/Skills/DT_XenoCore_SkillCostCurves SP to learn each of a branch's five skills. Two rows: Starting (300, 700, 1,000, 2,000, 3,500) and Quest (200, 500, 800, 1,000, 1,500).
Trait ladders Battle/Skills/DT_XenoCore_SkillTraitLadders A trait's value at 0, 1 ... 5 skills learnt. Six rows, for example AgilityFlat 2, 5, 8, 10, 12, 15.
SP per kill Battle/Skills/DT_XenoCore_SkillPointRewards Flat SP by level difference: Trivial 1, Easy 5, Even 10, Strong 15, Dangerous 20.
Stat carrier Battle/Skills/GE_XenoCore_SkillStats One infinite effect per body that carries every stat skill and the trait, one channel per stat.
Skill abilities Battle/Skills/Abilities/GA_XenoCore_Skill_* Behaviour for skills that react to something (battle start, a kill, an ally falling). Blueprint children of XenoCoreSkillAbility_TimedBuff.
Progression component Game/BP_XenoCore_Progression Holds every character's record, awards SP, applies skills to bodies, answers "how big is this bonus?".
Skills screen UserInterface/Skills/W_XenoCore_SkillsScreen (UXenoCoreSkillsScreenBase) The menu screen, opened from the Skills entry of the main menu.
Icon set UserInterface/Skills/DA_XenoCore_SkillIconSet How every skill icon is drawn. No skill has its own icon art.

The shipped trees and who uses them:

Tree Character (pawn) Branches open at start
DT_XenoCore_SkillTree_Shulk Kael (B_XenoCore_Party_VRoid_L) and Blue (Game/B_XenoCore_Player) 3 of 5
DT_XenoCore_SkillTree_Reyn Mira (B_XenoCore_Party_VRoid_K) 3 of 5
DT_XenoCore_SkillTree_Dunban Nia (B_XenoCore_Party_VRoid_S) 3 of 5
DT_XenoCore_SkillTree_Fiora Dorran (B_XenoCore_Party_VRoid_C) 3 of 5
DT_XenoCore_SkillTree_Arcanist Isolde (B_XenoCore_Party_VRoid_M) 3 of 5
DT_XenoCore_SkillTree_Trickster Sabine (B_XenoCore_Party_VRoid_Q) 3 of 5
DT_XenoCore_SkillTree_Medic Tamsin (B_XenoCore_Party_VRoid_Y) 3 of 5

A tree can be shared: Kael and Blue point at the same table, but each has their own progress, because progress is keyed by the character, not by the table.

A branch

Each row of a tree table is one branch:

Field What it does
Display Name The branch's name on the screen.
Trait Description One line shown when the branch header is focused.
Trait Stat A XenoCore.Stat.* tag: the stat the trait raises. Empty means the branch has no trait.
Trait Operation Add (points, or percentage points for a rate) or Scale (a percentage of the stat).
Trait Ladder A row of DT_XenoCore_SkillTraitLadders.
Cost Curve A row of DT_XenoCore_SkillCostCurves.
Unlocked At Start Open from the start. Otherwise a quest opens it.
First Skill Prelearned The first skill starts learnt, at 0 SP.
Skills Exactly five skills, top to bottom.

A skill

Each of a branch's five Skills is one entry. A skill does its work in up to three ways, all optional and all driven by one number, Value:

Field What it does
Display Name, Description Shown on the screen. The description may contain {Value}, which is replaced with the formatted value ("Reduces equipment weight by {Value}.").
Shape The icon's frame: Circle, Square, Hexagon, Star or Diamond. Only the future Skill Links feature reads it (Diamond means "this character only").
Timing Always (blue icon) or In Battle Party (orange icon): the skill works only while its owner is an active member.
Scope Self, Battle Party (every active member) or Whole Party (everyone, benched included). The icon's glyph.
Value The skill's strength. What Stats add, what a Bonus is worth, what an Ability reads.
Duration Seconds, for a skill with an Ability that applies a timed buff.
Stats Stats raised by Value while the skill reaches the body. Each entry is a Stat tag and an Operation (Add or Scale). A skill can raise several.
Condition, Condition Threshold When the Stats hold: Always, Health At Or Below or Health At Or Above a percentage of max HP, or No Armour (nothing in any armour slot; the weapon does not count).
Chance Percent chance that an Ability's trigger fires. 100 is always.
Bonus A XenoCore.SkillBonus.* tag another system asks about (see below).
Ability A skill ability class, granted to the body while the skill reaches it.
SP Cost Override −1 uses the branch's cost curve. Anything else replaces it for this skill.
Link Cost Reserved for Skill Links, which are not built. Read by nothing.

Lifecycle

Seeding. The first time anything asks about a character's skills, their record is filled in from the tree: every Unlocked At Start branch is opened, a First Skill Prelearned branch starts with one skill learnt, and the first unlocked row in table order becomes the selected branch. Seeding only ever adds: a branch you add to a table later appears for existing saves too, and progress on existing branches is never touched.

Earning SP. When an enemy dies, SP is awarded before the EXP:

  1. The party's level is worked out per Skill Point Level Basis: the active party's average (default), the leader's, the lowest active member's, or each character's own.
  2. The level difference (party level − enemy level) picks a band in the reward table. The first row whose range contains it wins.
  3. The band's SP × Skill Point Reward Scale × the enemy's Skill Point Multiplier is paid to every roster member. Benched members get Reserve Skill Point Rate of it, which the sample sets to 0, like the EXP rate, so a benched character earns nothing (XC1 pays 90%).

Quests do not pay SP. Anything else can, by calling Award Skill Points (see Extending it). After a kill, each party member's HUD plate shows the EXP, AP and SP they earned together.

Spending SP. SP flows into the character's selected branch only. It fills the next unlearnt skill; when the skill's cost is met, the skill is learnt and any remainder carries into the next. The icon on the Skills screen fills from the bottom as SP arrives. On each skill learnt:

  • "Skill Learnt" floats over the character (if they have a body), and
  • XenoCore.Skills.Message.SkillLearnt is broadcast carrying the Member, Branch (row name), Index (0 to 4) and Skill Name.

SP earned by a finished branch is thrown away

Once all five skills of the selected branch are learnt, any further SP for that character is wasted. Nothing warns the player; the screen shows ---- / ---- against the branch. This is deliberate, it is what makes choosing a branch a decision, but test it as a player would.

Selecting a branch. On the Skills screen, focus a branch header and press accept (Change Trait), or click it. Switching is free and unlimited. Learnt skills stay active whichever branch is selected; only the trait follows the selection. Selecting a locked or unknown branch is refused with a warning in LogXenoSkills.

Unlocking a branch. A quest opens a branch when it is turned in, through its reward's Skill Branches list (Member plus Branch, the row name). Blueprint can do the same with Unlock Skill Branch. The party member sees a notice over their head (Branch Unlocked Text), and the Skills screen gains a column. The quest offer screen and the turn-in banner both list branch rewards.

Applying skills to a body. Whenever something changes, the progression component re-derives every body's skills from scratch:

  1. It removes the stat effect it applied last time.
  2. For every roster member whose skills reach this body, it adds up each learnt skill's Stats (checking Condition), plus the trait of this body's own selected branch.
  3. It applies one GE_XenoCore_SkillStats carrying the totals, one channel per stat.
  4. It grants any skill Ability that newly reaches the body and removes any that no longer does. Abilities already granted are left running, so a buff counting down or a "once per battle" latch survives a refresh caused by something unrelated.
  5. It keeps HP as the same fraction of max HP, so a Max HP skill never quietly takes HP away.

This runs when a body spawns, when a skill is learnt, when a branch is selected, when the party changes, when equipment changes, after a level-up, and when a body's HP crosses a skill's condition threshold. Nothing about it is saved; it is always rebuilt from the record.

Who a skill reaches. A skill owned by one character applies to a body when:

  • the owner is that body, or the skill's Scope is Battle Party and the body is an active member, or the Scope is Whole Party; and
  • the skill's Timing is Always, or its owner is an active member.

So an orange (In Battle Party) party-wide skill buffs the active party only while its owner fights, and a blue (Always) whole-party skill works even from the bench. The same rule decides who a Bonus counts for.

Level-ups. A level-up re-applies the statline and then refreshes skills, because a Scale skill is a percentage of a stat that has just moved. A level-up still heals to full, including any extra max HP a skill adds.

How a skill takes effect

Stat skills and traits

Most skills are just Stats plus a Value. They arrive through GE_XenoCore_SkillStats, whose twelve channels are the list of stats a skill can raise:

XenoCore.Stat.Strength, .Ether, .Agility, .PhysicalDefence, .EtherDefence, .CriticalRate, .BlockRate, .Weight, .WeaponAttackMin, .WeaponAttackMax, .MaxHealth, .MoveSpeed.

  • Add adds Value as points. For Critical Rate and Block Rate the value is a whole percentage (15 means +15 %). Move Speed is a percentage over the character's authored walk speed.
  • Scale adds Value percent of the stat as it stands without skills (statline plus equipment), so it grows with gear. Timed buffs up at that moment, such as Strength Up, are left out of the price.
  • A negative Value lowers the stat (Weight −5). The screen labels it "Weight Down".

A skill naming a stat the effect has no channel for does nothing and logs a warning naming the skill.

Bonuses other systems ask for

A Bonus skill adds nothing to a character by itself. Instead, a system asks "what is this character's total bonus for this tag?" with Get Skill Bonus and applies it. The answer is the sum of the Value of every learnt skill with that tag that reaches the character, as a percentage. Shipped systems ask with these tags:

Tag Asked by Effect
XenoCore.SkillBonus.QuestExperience Quest turn-in % more EXP from quests
XenoCore.SkillBonus.BattleExperience Enemy kill % more EXP from enemies
XenoCore.SkillBonus.ArtPoints Enemy kill % more Art Points from enemies
XenoCore.SkillBonus.HealingPower Healing arts % more HP restored by the caster
XenoCore.SkillBonus.PhysicalDamageTaken Damage formula % less physical damage taken
XenoCore.SkillBonus.EtherDamageTaken Damage formula % less ether damage taken
XenoCore.SkillBonus.CriticalDamage Damage formula % more damage on a critical hit
XenoCore.SkillBonus.FirstStrike Damage formula % more damage on the attacker's first hit of each battle

Because the answer is read from the record, a bonus works for a benched character too.

Skills with behaviour

A skill that reacts ("when an ally falls", "at the start of a battle") names an Ability: a Blueprint child of UXenoCoreGameplayAbility_Skill. It is passive: granted while the skill reaches the body, active from the moment it is granted, removed when the skill stops reaching it. It can read its own skill with Get Skill, Get Skill Value and Get Skill Duration.

The shipped behaviour skills all use one ready-made class, UXenoCoreSkillAbility_TimedBuff: when this happens, apply that buff for the skill's Duration. A Blueprint child with two fields set is a new skill; there is no graph.

Setting (XenoCore › Skills) What it does
Trigger Ally Incapacitated (another active member goes down), Battle Start, Battle Start Vs Higher Level (the battle is against an engaged enemy at least Level Gap levels above), On Kill, On Miss (this body's attack is evaded), On Critical.
Buff The status effect to apply, a GE_XenoCore_Status_*.
Additional Buffs More statuses applied at the same time, with the same strength and duration.
Level Gap For Battle Start Vs Higher Level. Default 3.
Battle Start Window How long after the battle starts an engaged enemy still counts as "starting a battle against it". Default 1.5 s.

The skill's Value is sent to the buff as its strength (a status that reads a percentage turns 20 into +20 %), its Duration as the buff's length, and its Chance is rolled each time the trigger fires. A battle-start trigger fires at most once per battle; a failed roll is that battle's answer. Because the buff is an ordinary status, it shows on the HUD and over the character like any art's buff.

The On Kill, On Miss and On Critical triggers listen for gameplay events on the character: XenoCore.Event.Combat.Kill (sent by a dying enemy to whoever damaged it last), XenoCore.Event.Combat.Miss and XenoCore.Event.Combat.Critical (sent by the damage formula).

Your own attacks must send the combat events

If you add an attack that does not use XenoCore's damage execution, on-miss and on-critical skills never fire for it, and nothing reports it. Send XenoCore.Event.Combat.Miss or .Critical to the attacker with Send Gameplay Event To Actor and they will.

Condition gates Stats only

Condition decides whether a skill's Stats hold. It does not gate a Bonus or an Ability. A skill with a condition and no stats does nothing more than an unconditional one; Data Validation warns about it.

Stand-in skills

All 100 shipped skills have an effect. Each character's tree mixes three kinds:

  • Faithful skills (37) do what the original game's skill does.
  • Stand-ins (63) keep the original skill's name, shape, colour, scope and SP cost, and use an effect that already works in XenoCore. Each is the nearest live effect in the spirit of the name: a taunt raises defence, a tension skill gives a combat buff at a similar moment, an equipment-class skill reduces Weight.
  • Traits all work. Three branches whose original trait was counter rate (_Reyn Impatience, _Dunban Bravery, _Fiora Rashness) raise Block Rate or Critical Rate instead, on the same ladder.

A stand-in is ordinary data. To give a slot the original effect once its system exists, or any effect of your own, edit the skill's entry in its tree table (see Changing a shipped tree).

Every stand-in (63)
Tree Branch · slot Skill What it does XC1's effect Waits on
_Shulk Bravery 1 Fate Evasion EXP from enemies +10 % EXP when a vision tag breaks Visions
_Shulk Bravery 2 Hero's Privilege AP from enemies +20 %, whole party Trades 20 % more generous a trade hook
_Shulk Bravery 5 Glorious Future Strength Up 15 %, 30 s, at the start of a battle vs. a stronger enemy Talent Gauge fills after a vision Visions
_Shulk Humanity 2 Kind Encouragement Healing arts +10 % Encouraging heals Encourage
_Shulk Humanity 3 Friendship Heals Battle party healing arts +10 % Party heals after a Chain Attack Chain Attack
_Shulk Humanity 4 Cheer of a Friend Battle party: Strength Up 20 %, 20 s, when an ally falls Burst Affinity fills the Party Gauge Party Gauge
_Shulk Humanity 5 Chain of Friendship Critical rate +5 % Chain link chance +15 % Chain Attack
_Shulk Integrity 1 Medium Equipment Weight −2 Medium armour allowed weight classes
_Shulk Integrity 2 Secret of Life Battle party Max HP +5 % Revived allies +10 % HP Party Gauge revive
_Shulk Integrity 5 Ultimate Teamwork Critical damage +25 % Chain Attack damage +25 % Chain Attack
_Shulk Intuition 1 Battle Cry Battle party: Strength Up 15 %, 20 s, at battle start Tension +20 at battle-start affinity Tension
_Shulk Intuition 4 Fever Pitch Quest EXP +10 %, whole party Gem-crafting Fever Gem crafting
_Shulk Intuition 5 Element of Surprise First strike +30 % Positional art bonuses improved positional arts
_Shulk Pessimism 1 Fight the Future Battle party: Phys. Def Up 20 %, 30 s, vs. a stronger enemy Visions warn 4 s earlier Visions
_Shulk Pessimism 2 Stealth Warrior Agility +10 % Arts draw 10 % less aggro Aggro
_Shulk Pessimism 3 Epic Evasion Agility +10 % at half HP or below Burst Affinity after evading Affinity
_Shulk Pessimism 4 Forced Mercy Physical damage taken −10 % Sheds 25 % more aggro when hit Aggro
_Shulk Pessimism 5 Immunisation Ether damage taken −10 % Immune to stat-lowering debuffs debuff immunity
_Reyn Camaraderie 1 Ties of Friendship Block rate +5 % Chain link +5 % Chain Attack
_Reyn Camaraderie 2 Shoulder to Shoulder Battle party Max HP +5 % Party heals 10 % after a Chain Attack Chain Attack
_Reyn Camaraderie 3 Flying Start Battle party Haste 15 %, 30 s, at battle start — only the affinity condition is dropped Battle party Haste 15 %, 30 s at battle-start affinity Affinity
_Reyn Camaraderie 5 Friends Forever EXP from enemies +10 % Affinity +30 on encourage Affinity
_Reyn Enthusiasm 1 Heavy Equipment Weight −4 Heavy armour allowed weight classes
_Reyn Enthusiasm 2 Courageous Taunt Physical defence +10 % Taunt arts +10 % Aggro
_Reyn Enthusiasm 3 Healing Inspiration Healing arts +10 % Encouraged ally heals 10 % Encourage
_Reyn Enthusiasm 5 Heroic Taunt Physical damage taken −15 % Taunt arts +15 % Aggro
_Reyn Impatience 1 Ultimate Taunt Phys. & Ether defence +10 % Non-targeted taunt arts +20 % Aggro
_Reyn Impatience 3 Rampage Strength Up 20 %, 30 s, on a kill Double-attack rate +10 % Counters / double attacks (parked)
_Reyn Impatience 5 Channelled Pain Strength +15 % at half HP or below Talent Gauge when hurt an on-damage talent hook
_Reyn Spirit 1 Medium Equipment Weight −2 Medium armour allowed weight classes
_Reyn Spirit 3 Unrelenting Spirit Phys. Def Up 20 %, 30 s, when an ally falls No low tension when an ally falls Tension
_Reyn Spirit 4 Feel the Heat Agility +10 % at 75 % HP or below Tension +5 when hurt Tension
_Dunban Bravery 1 Medium Equipment Weight −2 Medium armour allowed weight classes
_Dunban Bravery 3 Warrior's Ambition Battle party Agility Up 15 %, 20 s, at battle start Tension +25 at battle-start affinity Tension
_Dunban Bravery 4 Overwhelming Strength +10 % More aggro from damage dealt Aggro
_Dunban Enthusiasm 2 Counter Rage Critical rate +5 % Counter rate +10 % Counters (parked)
_Dunban Enthusiasm 3 Ardent Strike Strength Up 10 %, 10 s, on a crit Tension +10 on a crit Tension
_Dunban Enthusiasm 4 Deadly Determination Agility Up 15 %, 20 s, on a kill Tension +10 on an art Tension
_Dunban Enthusiasm 5 Blazing Aura Battle party Strength +5 % Party Gauge on aura use Party Gauge + auras
_Dunban Obstinance 3 Heavy Equipment Weight −4 Heavy armour allowed weight classes
_Dunban Obstinance 5 Solid Foundation Physical defence +15 % Blow-down immunity knockback / Topple resist
_Dunban Prudence 1 Sustained Spirit Haste 10 %, 20 s, at battle start Auras last +10 s Auras
_Dunban Prudence 2 Steel Protection Ether damage taken −10 % Spike damage −20 % Spikes
_Dunban Prudence 3 Mind of the Warrior Battle party Agility +5 % Party Gauge kept between fights Party Gauge
_Dunban Prudence 4 Lightweight Expert Phys. & Ether defence +10 % Light armour's defences +15 % weight classes
_Dunban Prudence 5 Critical Drain Haste 15 %, 10 s, on a crit Heal 2 % max HP on a crit an on-crit heal
_Dunban Wisdom 1 Spiritual Awakening Strength +15 % with no armour More aggro with no armour Aggro
_Dunban Wisdom 3 Twin Swords Critical rate +5 % Double-attack rate +5 % Double attacks (parked)
_Fiora Courage 1 Mechonis Equipment Weight −3 Mechonis gear allowed weight classes
_Fiora Courage 2 Desperate Daggers Critical rate +15 % at half HP or below Counter rate +15 % at half HP Counters (parked)
_Fiora Courage 3 Second Wind Battle party Haste 20 %, 20 s, when an ally falls Revived allies +20 % HP Party Gauge revive
_Fiora Courage 5 Unwavering Courage Battle party Phys. Def Up 30 %, 30 s, when an ally falls Party Gauge +50 with two allies down Party Gauge
_Fiora Innocence 1 Maiden's Power Critical damage +20 % Chain damage +50 % with Shulk Chain Attack
_Fiora Innocence 2 Maiden's Courage Strength Up 30 %, 20 s, vs. a stronger enemy Attack arts +50 % when Shulk warns Visions
_Fiora Innocence 3 Maiden's Blessing Physical damage taken −10 % 10 % chance to heal on hit, with Shulk Damage Heal
_Fiora Innocence 4 Maiden's Zeal Ether damage taken −10 % Cancels very low tension, with Shulk Tension
_Fiora Innocence 5 Maiden's Miracle All Stats Up 25 %, 20 s, when an ally falls All Stats Up 25 %, 20 s when Shulk encourages Encourage
_Fiora Rashness 1 Vision Mode Strength Up 25 %, 20 s, on a kill Attack arts +25 % when warned Visions
_Fiora Rashness 2 Ultimate Counter Critical rate +10 % Counters always crit Counters (parked)
_Fiora Rashness 3 Vital Force Agility +20 % at 25 % HP or below 2 % chance of a full Talent Gauge when hurt an on-damage talent hook
_Fiora Rashness 4 Critical Combo Haste 20 %, 10 s, on a crit Double attacks always crit Double attacks (parked)
_Fiora Rashness 5 Explosion of Energy Haste 20 %, 20 s, at battle start Tension +1 level on talent arts Tension
_Fiora Zeal 5 Strong Links Battle party Haste 20 %, 15 s, at battle start — only the affinity condition is dropped Battle party Haste 20 %, 15 s at Burst Affinity Affinity

The pre-learnt first skills are stand-ins

Each character's free first skill is an equipment-class skill (Medium or Mechonis Equipment). Until equipment weight classes exist, it reduces Weight, so every character starts with a learnt skill that works. Weight is subtracted from Agility when hits are rolled, so less of it means better evasion and accuracy (see Stats and damage).

The Skills screen

The screen is opened by the main menu's Skills entry (Open Skills Screen). It shows one character at a time, starting with whoever you are controlling:

  • L / R step through the whole roster, benched members included, with a strip of portraits.
  • The card shows the character's portrait over one column per unlocked branch, in table row order; locked branches are left out, not greyed. Each column is a header over five icons.
  • An icon is composed from the skill's data: Shape is the frame, Timing the colour (blue Always, orange In Battle Party), Scope the glyph (one figure, three figures, ALL). An unlearnt skill is a dark silhouette; the one being learnt fills from the bottom.
  • The selected branch's header is drawn in the button style's Selected state (the same blue as every selected row in the project) and shows a second line, SP 200 / 700, or Complete. That line is the character's SP: there is no SP balance, only progress into the next skill.
  • The cursor is XC1's: a yellow frame with an arrow on each side, the same on a branch header and on a skill icon, so it never looks like the selection. Its colour and sizes are Cursor Colour, Cursor Frame Width, Cursor Arrow Size and Cursor Arrow Gap on the header and icon classes.
  • Focusing a branch header shows its trait, the trait's current value, Selected or Not selected, skills learnt, and SP into / cost for the next skill (or ---- / ---- when the branch is complete).
  • Focusing a skill shows its stat and value, SP cost or Learnt, Active (Always / In battle party), Affects (Self / Battle party / Whole party) and Effect Time if it has a duration.
  • Change Trait appears on the action bar only while the cursor is on a branch that is not already selected.

The screen derives from UXenoCoreCharacterMenuScreenBase, a shared base for any menu screen about one character. The Arts screen uses the same base. It owns roster cycling (benched included), the portrait strip, the bumper glyphs, an optional pair of tab triggers (ZL / ZR), and Menu input mode. A screen built on it overrides On Member Shown to paint, and always reads records by member definition, never from a pawn, because the shown character may be benched.

What you can change

Setting Where it lives What it does
Skill Tree Character Blueprint › XenoCore › Skills The character's tree. Empty means no skills; the screen shows "No skill tree".
Skill Point Reward Table BP_XenoCore_Progression › XenoCore › Skills SP bands per kill.
Skill Point Reward Scale BP_XenoCore_Progression › XenoCore › Skills One multiplier over all kill SP. 1.0 by default; raise it for a shorter game instead of editing the bands.
Reserve Skill Point Rate BP_XenoCore_Progression › XenoCore › Skills Benched members' share of kill SP: 0 in the sample (the C++ default is XC1's 0.9). A separate setting from the EXP rate, so the two can differ.
Skill Point Level Basis BP_XenoCore_Progression › XenoCore › Skills Whose level sets the band: Party Average (default), Leader, Lowest, Own.
Skill Stats Effect BP_XenoCore_Progression › XenoCore › Skills The stat carrier, GE_XenoCore_SkillStats.
Skill Learnt Text, Branch Unlocked Text, Skill Learnt Colour, Skill Feedback Scale BP_XenoCore_Progression › XenoCore › Skills › Feedback The line floated over a character. Empty text turns it off.
Skill Point Multiplier Enemy Blueprint or placed enemy › XenoCore › Enemy Scales the SP this enemy pays. 1.0.
Skill Branches Quest definition › Reward Branches the quest opens on turn-in.
Costs, ladders, bands DT_XenoCore_SkillCostCurves, _SkillTraitLadders, _SkillPointRewards Shared by every branch that points at them.
Icon Set, Icon Class, Header Class, Header Style, Accept Action, Show Skill Links Tab, sizes and colours W_XenoCore_SkillsScreen class defaults › XenoCore › Skills The screen. Header Style is the branch headers' button style, ButtonStyle_XenoCore_Menu; restyle that asset and the headers follow. Empty falls back to the header's own plate colours. Leave Show Skill Links Tab off; Skill Links are not built.
Portrait Size, Unselected Portrait Opacity, Max Visible Portraits, the four actions W_XenoCore_SkillsScreen class defaults › XenoCore › Menu The character strip and bumpers, from the shared base.
Shape Textures, Glyph Textures, Always Colour, In Battle Party Colour, Unlearnt Colour DA_XenoCore_SkillIconSet Every icon. Restyling all skills is a texture swap here.

Every table checks itself when saved or validated. You get a Data Validation error for a branch without exactly five skills, a branch with no Cost Curve, a trait stat with no Trait Ladder, a skill with no name or a Stats entry with no stat, a cost curve without five costs, a ladder without six values, or an SP band whose minimum is above its maximum. You get a warning for a skill with no Stats, Bonus or Ability (it does nothing) and for a Condition on a skill with no Stats.

The row name is the save's id

A save stores branches by row name. Renaming a branch row after players have saves resets that branch for them: the old progress is kept under the old name and never shown, and the new row starts fresh. Nothing is logged. Choose final row names before release, and change Display Name instead.

Reordering skills changes what a save has learnt

A save stores how many skills of a branch are learnt, not which. Swap skills 2 and 4 and every save with three learnt now has the old skill 4 instead of skill 2. That is how skills stay editable, so reorder only before release, or accept the change.

Save

On load, each record is re-seeded from the current table (additively), so new branches appear. If the saved selected branch no longer exists or is locked, the first unlocked row is selected instead. Skill effects are never saved; they are rebuilt when the bodies spawn. See Save and front end.

For programmers: the saved fields

Each member's saved record carries:

Field Meaning
bSkillsSaved False for a save made before skills existed; that character is seeded fresh on load.
SelectedSkillBranch Row name of the selected branch.
SkillBranches One entry per branch: Branch (row name), bUnlocked, SkillsLearnt (0–5), SkillPointsIntoNext.

Console commands

Command Effect
XenoGiveSP 2000 Pour SP into the leader's selected branch, then print the tree. SP past a complete branch is wasted, as in play.
XenoSkills Print the leader's tree, selected branch, and each branch's state, learnt count and SP into the next skill.

Both are cheat-manager commands, so they work in PIE and development builds. Output is under the LogXenoSkills log category; skill abilities log under LogXenoSkillAbility.

Extending it

  • Give a character a tree, or add skills: see Add a skill or a skill tree.
  • Award SP from anything else (a landmark, a cutscene): call Award Skill Points on Get Party Progression with the member and amount. Tick Apply Reserve Rate to pay benched members the reserve share.
  • Open a branch from script: Unlock Skill Branch (Member, Branch row name). Safe to call twice.
  • Make your own system skill-aware: add a tag under XenoCore.SkillBonus in your own gameplay tag config, set it as a skill's Bonus, and in your system call Get Skill Bonus (member) or Get Skill Bonus For Actor (a body; returns 0 for anything that is not a party member). No skill code changes.
  • Let skills raise a new stat: add a modifier to GE_XenoCore_SkillStats for the attribute, with magnitude Set By Caller and your XenoCore.Stat.* tag as its data tag (copy an existing channel). The channel list is the effect's modifier list, and the screen labels it from the tag. This edits a shipped asset; note it for template updates.

A new percentage stat added as a channel is 100 times too strong

The conversion from a whole percentage in the data to a 0–1 fraction on the attribute is applied only to Critical Rate and Block Rate. If you add a channel for another attribute stored as a 0–1 fraction, a skill's +15 lands as +15.0, which usually clamps to 100 %. Store such a stat as a whole percentage, or ask a programmer to add it to the conversion in XenoCoreProgressionComponent_Skills.cpp (AddStat).

  • Behaviour that TimedBuff cannot express: create a Blueprint child of XenoCoreGameplayAbility_Skill. Set Evaluate Interval to poll and override On Evaluate, or listen for gameplay events in Activate Ability. Use Apply Buff To Self to apply a status with the skill's value and duration. Keep the base empty: no tags or effects of its own.
  • React to a skill being learnt: listen for XenoCore.Skills.Message.SkillLearnt. Refresh anything that shows SP or skill counts on XenoCore.Progression.Message.Changed, which is sent on every SP award and branch change. See Events you can listen to.
  • A new menu screen about one character (programmers): subclass UXenoCoreCharacterMenuScreenBase in C++ and override On Member Shown, Reset For Show and, if the screen has tabs, the tab handlers.
  • Never edit DT_XenoCore_SkillPointRewards' bands to make a demo faster; change Skill Point Reward Scale instead, so the reference numbers stay intact.

Why it's built this way

For programmers: the design reasons
  • Data Tables, not one data asset per skill, because a designer sees a whole character in one asset, tables round-trip CSV and JSON in the editor, and they can be filled from script. The trade is that a row cannot hold a Blueprint graph, which is why behaviour lives in a separate ability class the row points at, the same "data pointing at behaviour" split as an art definition and its ability.
  • Saves store counts, never skill ids, because skills are learnt strictly in order. Designers can rename, rewrite and rebalance skills freely.
  • One stat effect per body, rebuilt from scratch, following GE_XenoCore_EquipmentStats: no stat name is hard-coded, the effect's channels are the list, and "remove, sum, re-apply" cannot drift the way incremental adds and removes would. It is additive on top of the statline, never an override, so it survives a level-up re-stat.
  • Bonuses are asked for, not pushed, so the damage formula, the quest turn-in and the healing art each read one number when they need it, a benched character's bonus works without a body, and a new bonus is a new tag rather than new skill code.
  • Skill abilities are diffed, not re-granted, so a refresh caused by an SP award or a gear change never restarts a buff that is counting down.
  • The record lives on the progression component, beside levels and Art Points, for the same reason those are there: progress is per character and half the roster has no body at any moment. No new component was added.
  • The Skills screen and Arts screen share a base because they were the second and first screens of the kind; the base holds only what both need.