Skip to content

Ability Text

abilitydb is not a registry. It ships no canonical artifact and no consumer decodes it as data — the English name and description of every ability still live inline on npc.NpcAbility inside npcdb, exactly where Unity, the arpg Rust server, cryptothrone and Godot already read them.

What it ships is translations. An ability such as tackle appears on 19 different NPCs with the same name and the same sentence; authoring Spanish for it inside each of those 19 NPC entries would mean writing the same line 19 times and watching the copies drift. One file here holds it once, and the generator emits abilitydb.<locale>.binpb — a kbve.common.LocaleTable keyed by ability id, the same shape and the same loader as every other translated database.

The English name and description in these files are a contract, not a second source of truth. gen-abilitydb-data.mjs refuses to build unless every npcdb use of that ability id carries exactly the same English, which is what makes “translate it once” a sound claim rather than an assumption.

An ability only needs a file here when it is worth sharing. Anything without one is untouched and stays English.