Skills, class skills, potion and ammo effects
script\BulletItemEffect.dat, script\ClassSkill.dat …
Total 54 Known 53 Derived 0 Unused 1Characters and creatures
Five effect tables, mastery limits, SkillForce.edf
Skills, force, class skills and potion and ammo effects are five server tables with two schemas (Skill.dat, ClassSkill.dat, BulletItemEffect.dat, PotionItemEffect.dat share one schema, Force.dat has its own). The client SkillForce.edf and NDSkillForce.edf are derived from the server tables: the same order and record count in every block, the code as a hex number; the conversion rules were verified byte for byte. Mastery limits are the four *MasteryLimit.dat tables ↔ block 5 of Character.edf.
*MasteryLimit.dat by class and level, in points by the level ↔ points formula.m_nAttackable ≠ 0, attack shape 0–7, weapon types in m_strFixWeapon and a projectile for ammo weapons; attack force is used only with a staff.m_nTempEffectType (−1, 0–57, 70–75; anything else crashes the server), continuous effect and whom it affects m_nContAreaType (0, 1, 2, 3, 10; values 2 and 3 work as 0), aura — a kind 4 skill with radius m_nBonusDistance.BulletItemEffect with codes 15 and 16 (otherwise the server does not start), 17 — for instant effect 46.Skill.dat.ForceItem.m_strForce_Codekey points to an existing Force.dat code; a class skill must be in the list of a class of the right type.The client SkillForce.edf is assembled from the server Force.dat, Skill.dat, ClassSkill.dat, BulletItemEffect.dat, PotionItemEffect.dat by the generator R&D\disasm\skillforce\gen.py; on the AoP pair the result matched byte for byte (sfcheck.py, skills.md §17). Therefore all fields of the client record are derived; bytes the generator does not write are constant 0.
| File | Side | Format | Level | Corpora | Record | Digest | Note |
|---|---|---|---|---|---|---|---|
script\BulletItemEffect.dat | server | dat | ready for full | AoP ✓, GU ✓, Sirin ✓ | AoP 1168, GU 1168, Sirin 1168 | skills.md, items.md | skill schema (Skill.strs); items.md §11.3, skills.md §9 |
script\ClassSkill.dat | server | dat | ready for full | AoP ✓, GU ✓, Sirin ✓ | AoP 1168, GU 1168, Sirin 1168 | skills.md | skills.md §9–10 |
script\Force.dat | server | dat | ready for full | AoP ✓, GU ✓, Sirin ✓ | AoP 1088, GU 1088, Sirin 1088 | skills.md | skills.md §9: its own schema, 0x50 shorter than Skill |
script\PotionItemEffect.dat | server | dat | ready for full | AoP ✓, GU ✓, Sirin ✓ | AoP 1168, GU 1168, Sirin 1168 | skills.md, items.md | skill schema (Skill.strs); items.md §11.3, skills.md §9 |
script\RangerMasteryLimit.dat | server | dat | ready for full | AoP ✓, GU ✓, Sirin ✓ | AoP 232, GU 232, Sirin 232 | skills.md | skills.md §6.1–6.2 |
script\Skill.dat | server | dat | ready for full | AoP ✓, GU ✓, Sirin ✓ | AoP 1168, GU 1168, Sirin 1168 | skills.md | skills.md §9–10 |
script\SpecialistMasteryLimit.dat | server | dat | ready for full | AoP ✓, GU ✓, Sirin ✓ | AoP 232, GU 232, Sirin 232 | skills.md | skills.md §6.1–6.2 |
script\SpiritualistMasteryLimit.dat | server | dat | ready for full | AoP ✓, GU ✓, Sirin ✓ | AoP 232, GU 232, Sirin 232 | skills.md | skills.md §6.1–6.2 |
script\WarriorMasteryLimit.dat | server | dat | ready for full | AoP ✓, GU ✓, Sirin ✓ | AoP 232, GU 232, Sirin 232 | skills.md | skills.md §6.1–6.2 |
DataTable\<language>\NDSkillForce.edf | client | edf | derived | AoP ✓ (en-ph, ru-ru), GU ✓ (en-gb, ru-ru), Sirin ✓ (en-gb, ru-ru) | AoP 5 sections: 544×5, GU 5 sections: 544×5,… | skills.md, localization.md | Derived from: names and descriptions of skills, force, effects. skills.md §17 |
DataTable\SkillForce.edf | client | edf | derived | AoP ✓, GU ✓, Sirin ✓ | AoP 5 sections: 1096/1120×4, GU 5 sections: … | skills.md, items.md | Derived from: Force.dat, Skill.dat, ClassSkill.dat, BulletItemEffect.dat, PotionItemEffect.dat. skills.md §17 |
“ready for full” — the format is understood and the fields are described; “derived” — the file is assembled from another; “opaque” — the format is not fully known; “postponed” and “out of scope” — the studio does not edit the file.
The files of the category are split into groups; every group and subgroup has its own page with the fields of its files only.
script\BulletItemEffect.dat, script\ClassSkill.dat …
Total 54 Known 53 Derived 0 Unused 1script\RangerMasteryLimit.dat, script\SpecialistMasteryLimit.dat …
Total 10 Known 8 Derived 0 Unused 2DataTable\<language>\NDSkillForce.edf; DataTable\SkillForce.edf
Total 110 Known 0 Derived 110 Unused 0Fields that neither the server nor the client reads. For each: why it was decided so and where that was established. The editor keeps their bytes as they are.
script\BulletItemEffect.dat, script\ClassSkill.dat, script\PotionItemEffect.dat, script\Skill.dat server file| Offset | Field | Why unused | Data |
|---|---|---|---|
+0x378 | m_nTempParamCode | unused: the server does not read the field; the client receives it as the instant effect block code, but there is no reader of the code; the potion tooltip with code 0/1/2 is identical (game, G110, 29.10.2026); keep as imported, 0 for new records skills.md §17.3; game-checks.md G110 | 4 values; most often -1 (87%) |
script\Force.dat server file| Offset | Field | Why unused | Data |
|---|---|---|---|
+0x344 | m_nTempParamCode | unused: the server does not read the field; the client receives it as the instant effect block code, but there is no reader of the code; the potion tooltip with code 0/1/2 is identical (game, G110, 29.10.2026); keep as imported, 0 for new records skills.md §17.3; game-checks.md G110 | 3 values; most often -1 (92%) |
script\RangerMasteryLimit.dat, script\SpecialistMasteryLimit.dat, script\SpiritualistMasteryLimit.dat, script\WarriorMasteryLimit.dat server file| Offset | Field | Why unused | Data |
|---|---|---|---|
+0x000 | m_dwIndex | never read skills.md §6.1: digest — “0x00 | m_dwIndex | — | never read”; does not go to the client file (block 4 of Character.edf is fully mapped, skills.md §6.6) | 66 values; most often 0 (2%) |
+0x004 | m_strCode | never read ( 0 everywhere in AoP)skills.md §6.1: digest — “0x04 | m_strCode (64) | — | never read (0 everywhere in AoP)”; does not go to the client file (block 4 of Character.edf is fully mapped, skills.md §6.6) | always 0 |