Hashing Algorithms
Picking the wrong hash family for a given context is the single most common reason a property or path "mysteriously" renders as hex. The full spec lives on the LeagueToolkit wiki (with an interactive calculator); this page is just the right-hash-for-the-right-job cheat sheet.
Which hash where
| Algorithm | Width | Used for | Our implementation |
|---|---|---|---|
| FNV-1a | 32-bit | BIN property/class/object path hashes. Per the wiki, also ANM v4/v5 + compressed joint hashes. | OfficialLeagueToolkit/Hashing/Fnv1a.cs — lowercases input. |
| xxHash64 | 64-bit | WAD chunk paths (v3+). Seed 0, over lowercased /-normalized path. | OfficialLeagueToolkit/Hashing/XxHash64Ext.cs. |
| ELF | 32-bit | .skl joint names. Our extractor also uses it for matching animation tracks to joints. | LeagueToolkit/Helpers/Cryptography.cs#ElfHash — lowercases input. |
| SDBM | 32-bit | A few legacy auxiliary formats. Not used for binhashes. | OfficialLeagueToolkit/Hashing/Sdbm.cs. |
Our FNV-1a and ELF helpers lowercase internally — don't pre-lowercase at the call site.
Two things that bite
hashes.binhashes.txtis FNV-1a, not SDBM. Our own docs had this wrong until 2026-04-17. The SDBM implementation in-tree is for a few legacy formats only.- ELF hash is case-insensitive (
ElfHash("Head") == ElfHash("head")). If a skeleton carries both the real bone and a lowercase compatibility stub, the animation track will bind to whichever BFS hits first. The two-pass Influences-preference match inMapAllTracksInOrderexists solely for this. See Skeletons & Animations and the Dark Star Shaco case study.
When a property won't resolve
You'll see 0xDEADBEEF in material dumps instead of a name. Workflow:
- Dump the material with
--dump-materials. - Confirm the hash family for the context (table above).
- Plug the expected name into the wiki's hash calculator — does it produce the hex you're seeing?
- If yes, the name just isn't in the dictionary. Community dictionaries come from CommunityDragon (
hashes.game.txt,hashes.binhashes.txt), fetched inHashTables.TryLoadHashes.
Possible mismatch worth flagging
The upstream wiki documents ANM v4/v5 + compressed joint hashes as FNV-1a. Our extractor's track-to-joint mapping matches animation track hashes against SKL's ELF hashes. That's worked in practice — don't assume it's definitionally correct when chasing a mapping bug.