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¶
- Your first enemy: an enemy's Experience Reward.
- Author a character's statline if you change the level cap.
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¶
- 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.
- Every active member receives the result. Every reserve member receives it times Reserve Experience Rate.
- Each character banks it towards their own next level. A character can gain several levels from one award.
- 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
XenoAwardExppay experience only, never AP. - 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:
- Open
DT_XenoCore_ExperienceCurvesand select a row. - Edit Experience To Next Level. Halving every value halves the grind.
- Save. Data Validation runs on save: an empty list, or an entry of
0or 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¶
- Duplicate
CT_XenoCore_RewardLevelDiffand editReward.LevelDiffMultiplier. Its keys are the level difference, from negative (the enemy is higher) to positive. - 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¶
- Open
Maps/L_XenoCore_Gymand press Play. - Open the console (~) and type
XenoAwardExp 500. The level-up banner shows who levelled. - 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.
- 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¶
- Progression: per-character records, and why a benched character keeps its level with no body in the world.
- Author a character's statline
- Set palette slots and unlocks