Skip to content

Stat Formulas

Read from the Arx Libertatis tree at H:\Work\Projects\ArxSharp\ArxLibertatis and the unpacked retail scripts. See Sources for the port-divergence caveat.

Character & progression

Value Formula Source
Starting character All four attributes 6, 16 attribute points, 18 skill points, level 0 Player.cpp
Level up +1 attribute, +15 skill, full life and mana restore Player.cpp
XP thresholds 2,000 / 4,000 / 6,000 / 10,000 / 16,000 / 26,000 / 42,000 / 68,000 / 110,000 / 178,000 Player.cpp
Beyond the table level × 60000 — unreachable; the level-up loop stops at 10 Player.cpp
Lifetime budget 26 attribute points, 168 skill points, no respec derived

Attribute contributions to skills

Skill Attribute contribution
Stealth Dex × 2
Mecanism Dex + Mind
Intuition Mind × 2
Ethereal Link Mind × 2
Object Knowledge Mind × 1.5 + Dex × 0.5 + Str × 0.5
Casting Mind × 2
Projectile Dex × 2 + Str
Close Combat Dex + Str × 2
Defense Con × 3

Mind feeds five of the nine skills — the overload discussed in Tensions & Lessons.

Derived pools & regeneration

Value Formula Source
Max life Con × (level + 2) Player.cpp
Max mana Mind × (level + 1) Player.cpp
Life regen per frame 0.00008 × ms × (Con + Str × 0.5 + Defense) × 0.02 Player.cpp
Mana regen per frame 0.0000008 × ms × (Mind + EtherealLink) × 10 Player.cpp
Hunger decay per frame 0.00008 × ms × (Con + Str × 0.5) × 0.02 × 0.5 Player.cpp
Hunger floor -10; below 0 the life-regen term inverts to a drain at half rate Player.cpp
Poison tick cp = poison × ms × 0.00025, saving throw vs resistPoison + (10 − poison) Player.cpp
Failed poison save deals cp / 3 damage and burns poison off more slowly than a success Player.cpp

Combat

Value Formula Source
Melee attack value max(1, Str × 0.5 − 5) + CloseCombat × 0.1 + equipment Player.cpp
Damage dealt attack × ratioaim × backstab, then − (damage × absorb × 0.01) Equipment.cpp
Hit chance 100 − (targetAC − attackerAttack)rolled after the swing visually connects Equipment.cpp
Armor class floor(max(1, Defense × 0.1 − 1)) Player.cpp
Damage absorb (player) Defense × 0.5 percent — Defense 100 = 50% flat reduction Equipment.cpp
Critical hit chance Dex × 2 + CloseCombat × 0.2 − 18, multiplier × 1.5 Player.cpp
Backstab × 1.5 at Stealth × 0.5 percent, only vs NPCFLAG_BACKSTAB targets, no facing check Equipment.cpp
Aim time weapon aim_time − (Dex − 10) × 20 ms, hard floor 1500 ms Player.cpp
Resist magic floor(Mind × 2 × (1 + Casting × 0.005)) Player.cpp
Resist poison floor(Con × 2 + Defense × 0.25) Player.cpp

Magic

Value Formula Source
Caster level clamp((Casting + Mind) × 0.1, 1, 10) Player.h
Precast buffer 3 slots, FIFO eviction, 1 s global cooldown, ~550 ms cast animation Precast.cpp
Precast mana Checked and charged at launch, not at memorisation Precast.cpp
Rune vocabulary 21 symbols, of which Akbaa is never player-obtainable Rune.h
Spell count 50 across 10 tiers, sequences 2–4 runes, 10 flagged secret SpellData.cpp

Per-spell costs: Spell Data.

Stealth & detection

Value Formula Source
Visibility threshold Seen if ambient light > 15 + Stealth × 0.1 Player.cpp
Unconditional detection A lit torch, or range < 200 units NPC.cpp
Vision cone ± 110° with line of sight, or trace within 25 units NPC.cpp
Hearing — footsteps 600 units NPC.cpp
Hearing — items 800 units NPC.cpp
Events fired DETECTPLAYER / UNDETECTPLAYER / HEAR with distance NPC.cpp

Economy & information

Value Formula Source
Buy price basePrice × shopMultiplier × (durability / maxDurability) Interactive.cpp
Sell value (buyPrice / 3) × count × (1 + Intuition × 0.005) Interactive.cpp
Item identification ObjectKnowledge + Mind ≥ item identify_value, re-evaluated in bulk Inventory.cpp
Lockpick attempt (Mecanism − lockpickability + 20) percent per 3-second attempt lockpick.asl
Lockpick failure Auto-fail and pick damage if Mecanism < lockpickability; rating 100 is impossible lockpick.asl
Lockpick reward +150 XP on success lockpick.asl
Disarm Trap spell casterLevel × 10 ≥ trap_lockpickability — CL 10 clears any trap lever.asl
Lockpick abort Attempt cancels if the player moves > 400 units away lockpick.asl
Stealth pathfinding cost 300 × intensity × mean(rgb) × falloff per ignited light PathFinder.cpp
Pathfinder heuristic 0.0 (distance only) to 0.5 (balanced, default) PathFinder.h

NPC behaviour

Value Formula Source
Behaviour flags NONE FRIENDLY MOVE_TO WANDER_AROUND FLEE SNEAK FIGHT DISTANT MAGIC GO_HOME LOOK_AROUND STARE_AT NPC.cpp
Behaviour stack Pushes flags, param, target, movemode and animation layers; pop re-launches pathfinding NPC.cpp
Melee evade Always inside TOLERANCE − 20, else 3% per check: 10% back / 45% left / 45% right NPC.cpp
Caster evade Always inside 340 units, else 15% per check: 33% / 33% / 33% NPC.cpp
Reaction to player strike Every time: 20% back / 40% strafe left / 40% strafe right NPC.cpp
NPC damage roll damages × ratioaim × Random(0.5, 1.0) Equipment.cpp
Curse on an NPC −5% damage, AC and absorb per caster level Equipment.cpp

Character Build · Combat · Spell Data · Sources