Skip to content

Tune levelling

Designer · 20 min · No code

Result: the party levels at the pace you want. You control how much experience each level costs, how much a kill is worth against enemies above or below the party, how much benched characters earn, the Art Points a kill pays, the starting gold and the level cap.

Before you start

Where levelling is set

Progression is one component on the player controller: Game/BP_XenoCore_Progression. Open it and click Class Defaults.

Setting Category Default What it does
Default Experience Curve XenoCore › Progression DT_XenoCore_ExperienceCurves, row XC1 The EXP curve for any character whose member definition names none. XC1 is XC1's own table
Experience Curve Member definition › XenoCore › Progression e.g. DT_XenoCore_ExperienceCurves, row Kael The EXP curve this character levels on. Empty uses the default above
Reward Multiplier Curve XenoCore › Progression CT_XenoCore_RewardLevelDiff Row Reward.LevelDiffMultiplier: multiplier on a kill's reward, keyed by party level minus enemy level
Reserve Experience Rate XenoCore › Progression 0 (C++ default 0.9, XC1's) Share of every EXP award, and of a kill's AP, a benched character gets. The sample sets 0: everyone who joins fights (up to seven), and a recruit joins at the party's level instead of catching up from the bench
Gold XenoCore › Progression 3000 The purse a new game starts with
Default Art Level Cap XenoCore › Arts 4 Highest level an Art can be trained to before a manual raises it
Art Level Cost Multipliers XenoCore › Arts 11 values, 1 to 65 AP to reach Art levels II to XII, as multiples of each Art's Base Level Up Cost
Art Points Base XenoCore › Arts 2.0 The flat part of a kill's AP
Art Points Per Enemy Level XenoCore › Arts 2.0 AP per level of the defeated enemy, added to Art Points Base
Art Slot Unlock Levels XenoCore › Arts 1,1,1,12,20,28,34,40 Level each slot opens, in unlock order (the bar fills centre-out); keep it ascending. See Set palette slots and unlocks

Both curve tables are in Battle/Attributes. The experience a kill is worth is set on each enemy, as Experience Reward (XenoCore › Enemy), scaled by the enemy's level through its Experience Level Scale curve row (same category; the minions use CT_XenoCore_EnemyStats row Minion.ExperienceScale, so a same-level kill is worth a steady share of a level all the way up). Empty Experience Level Scale pays the flat reward at every level. An enemy's Art Point Reward (same category, default -1) replaces the AP formula for that enemy when it is 0 or more.

Skill Points have their own settings under XenoCore › Skills; see Skills.

How a kill is paid

  1. The enemy's Experience Reward, scaled by its Experience Level Scale at its level, is multiplied by the Reward Multiplier Curve at party level − enemy level. The party level is the level of the character you control. A positive difference (you out-level the enemy) should pay less; a negative one more.
  2. Every active member receives the result. Every reserve member receives it times Reserve Experience Rate.
  3. Each character banks it towards their own next level. A character can gain several levels from one award.
  4. Each character also banks Art Points: Art Points Base + Art Points Per Enemy Level × the enemy's level, times the same reward multiplier, and times Reserve Experience Rate for reserves. AP is spent on the Arts menu's Level Up tab. Quest rewards and XenoAwardExp pay experience only, never AP.
  5. Each character's selected skill branch fills with Skill Points (Skills).

A level-up re-applies the character's statline at the new level, which also heals them to full.

Steps

Make levels faster or slower

EXP-to-next-level is a Data Table, Game/DT_XenoCore_ExperienceCurves, with row structure XenoCoreExperienceCurveRow. Each row is one curve: Experience To Next Level is a list where entry 0 is the cost of level 1 to 2, entry 1 is level 2 to 3, and so on. Past the last entry the character is at the level cap. Note says where the numbers came from.

Row Who uses it Level 1 to 2
XC1 Anyone with no curve of their own (the Default Experience Curve). XC1's own table 40
Kael, Mira, Nia, Dorran, Isolde, Sabine, Tamsin That character, through Experience Curve on its member definition 90 to 120

The character rows are XC1's table × 2.5, each character between ×0.9 and ×1.2 of that, so the party levels at different rates. That is a deliberate change from XC1, which levels everyone on one table. Nothing else holds these numbers: the table is the only copy.

To change the pace:

  1. Open DT_XenoCore_ExperienceCurves and select a row.
  2. Edit Experience To Next Level. Halving every value halves the grind.
  3. Save. Data Validation runs on save: an empty list, or an entry of 0 or less, is an error, because a character on that curve would stop levelling with nothing logged.

To give a character a curve of its own, add a row (or duplicate one), then open the character's member definition and set Experience Curve to that table and row. To have two characters level together, point both at the same row. For many rows at once, export the table to JSON or CSV, edit, and reimport.

Why a Data Table

It matches the project's other per-level numbers: skill cost curves, trait ladders and SP rewards are Data Tables of the same shape. Earlier versions used a curve table row whose name was written into C++; nothing is named in code any more.

Reward fighting up, punish farming down

  1. Duplicate CT_XenoCore_RewardLevelDiff and edit Reward.LevelDiffMultiplier. Its keys are the level difference, from negative (the enemy is higher) to positive.
  2. Set Reward Multiplier Curve to your copy.

Change how many Art Points a kill pays

Set Art Points Per Enemy Level and Art Points Base. To make one enemy (a boss) pay a fixed amount, set its Art Point Reward instead; the reward multiplier still applies.

Change what benched characters earn

Set Reserve Experience Rate: 1.0 means no penalty, 0 (the sample) means reserves never level, 0.9 is XC1. The same rate applies to a kill's AP. Skill Points use Reserve Skill Point Rate instead (0 in the sample, C++ default 0.9).

A character recruited mid-game is raised to the party's level when Join At Party Level is on for the NPC or trigger that recruits them (Recruit a party member), so a 0 rate does not leave late joiners behind.

Change the level cap

The cap is not on this component, and not in Project Settings. It is MaxCharacterLevel on the stat set, and the only way to change it is to add two lines to your project's Config/DefaultGame.ini with a text editor, with the editor closed:

[/Script/XenoCoreRuntime.XenoCoreStatSet]
MaxCharacterLevel=60

Reopen the editor. A character at the cap stops earning experience. If you raise the cap above 99, lengthen every row of DT_XenoCore_ExperienceCurves and extend every stat curve to the new level first, or the new levels cannot be reached and add nothing. Data Validation warns about a row shorter than the cap.

Change the starting gold

Set Gold. It is the starting purse only; after that the saved value is used.

Test it

  1. Open Maps/L_XenoCore_Gym and press Play.
  2. Open the console (~) and type XenoAwardExp 500. The level-up banner shows who levelled.
  3. Open the Party screen. Every member had the same award, but each needs a different amount: with 500 EXP, Tamsin is further along than Sabine.
  4. Kill a minion and compare the award against one of a different level. Enemy levels are set per placement: Your first enemy.

XenoAwardExp pays no AP; kill a minion to see AP arrive. Other console helpers: XenoAwardGold 1000, XenoGiveAP 500, XenoGiveSP 500.

If it doesn't work

Nobody levels, and an error names BP_XenoCore_Progression

Default Experience Curve is empty or names a row the table does not have, and the character has no curve of its own. The Output Log says "has no DefaultExperienceCurve".

A character levels at the wrong pace, and a warning names its curve

Its member definition's Experience Curve names a row that does not exist. It falls back to the default curve (XC1) and logs "ExperienceCurve row '...' does not resolve". Data Validation marks the member definition with an error for the same reason.

Kills give no experience

The enemy's Experience Reward is 0, or the reward curve returns 0 at that level difference. Check the enemy first.

Continue ignores my changes

Levels, experience and gold are in the save. Test new tuning with Play in the editor or New Game.

Going further