本文へスキップ
Hash Calculator

Hash Calculator

Turn RDR2 names into joaat hashes one at a time or as a list, and look a hash up against the names and game text read from RDR2's own files.

このドキュメントは今のところ英語です。

Open the tool Last updated

The Hash Calculator turns a name into the 32 bit joaat hash RDR2 uses for it, shows that hash as unsigned, signed and hex, and goes the other way too: paste a hash and it tells you which RDR2 name or game text label it belongs to, when it knows one.

What it is for

RedM natives take model names, weapons, controls, scenarios and blip styles as hashes, and dumps and logs print them in whatever form they like. 3369743360, -925223936 and 0xC8DA3400 are the same horse. This page gives you every form of a hash at once, a table of hashes for a whole list of names, and a way to put a name back on a number you found in someone else’s script.

RDR2 uses the same joaat as GTA V, hashed on the lower case name. In RedM that is GetHashKey(name), joaat(name) or the Lua backtick shorthand `name`. What differs between the two games is which names exist, so the reverse lookup here searches RDR2 names, not GTA V ones.

Quick start

  1. Pick a tab: Single, Bulk or Reverse lookup.
  2. In Single, type a name in String. The Result panel shows Unsigned, Signed (int32), Hex and Lua backtick. Click any value to copy it.
  3. In Bulk, paste one name per line. The table lists each name with its signed and hex hash, and the code block under it is a ready Lua table.
  4. In Reverse lookup, paste a hash or a name into Look up and read the matches.

Single

Type any string. It is hashed lower cased, exactly like GetHashKey, so A_C_HORSE_ARABIAN_WHITE and a_c_horse_arabian_white give the same result. The page opens on a_c_horse_arabian_white:

Row Value
Unsigned 3369743360
Signed (int32) -925223936
Hex 0xC8DA3400
Lua backtick `a_c_horse_arabian_white`

The Lua backtick row is the name lower cased between backticks. RedM’s Lua turns that into the hash when the script loads, so you never have to paste the number into code.

Bulk

One string per line, blank lines are ignored. The panel title counts the hashes, the table shows Name, Signed and Hex, and Export format (Hex, Signed or Unsigned) decides what the generated table holds. The default sample and the default (hex) output:

hashes.lua
local Hashes = {
    a_c_horse_arabian_white = 0xC8DA3400,
    WEAPON_REVOLVER_CATTLEMAN = 0x169F59F7,
    mp_male = 0xF5C1611E,
    INPUT_JUMP = 0xD9D0E1C0,
    WORLD_HUMAN_SMOKE = 0xFEA62BA1,
}

The keys keep the case you typed. Only the hash is computed from the lower case name.

Reverse lookup

Paste up to 25 values, one per line (commas work too). Each value can be:

  • an unsigned number (3369743360),
  • a signed number (-925223936),
  • 0x hex (0xC8DA3400),
  • or a name (mp_male), which is hashed first and then looked up, so you can check whether a name you have is one the game knows.

Every value gets its own panel. It says whether it was Read as a hash or Read as a name, shows the three forms of the hash, and lists every match with what kind of thing it is and an Open button that takes you to it on the RedM assets page or in the Game Text Search.

The names searched are read from RDR2’s own files. Today that is 28,747 names in 17 sets:

Set Names
Item 13,085
Map file (imap) 5,124
Scenario 2,666
Ped model 1,982
Game script 1,889
Timecycle modifier 1,286
Blip texture 628
Blip style 620
Document texture 378
Control (input) 373
Interior (MLO) 278
Weapon 137
Vehicle model 115
Map zone 87
Ammo type 69
Weather type 22
Prompt hold mode 8

On top of those, a hash is checked against all 259,297 labels of the game’s English text. A label hit is listed as Game text label with the text itself, for example 0x0000F96B comes back as “Jumping Jeremiah!”.

Note

“No match” is common in RDR2 and does not mean your value is wrong. The game stores most of its names only as hashes, so plenty of real hashes have no known name at all. A model or item added by a custom resource will never be in this list either.

Signed or unsigned

A joaat hash is an unsigned 32 bit number, but RedM natives and most dumps print it as a signed int32. Anything over 2147483647 comes out negative when printed signed. Both are the same hash: pass whichever your code or the native expects.

Tips

  • Use the Lua backtick form in Lua scripts. It is readable, it cannot be mistyped as a number, and it is hashed for you.
  • When you find a bare number in an old script, paste it into Reverse lookup before guessing. If it is a label hash, the Open button shows you the full text.
  • Bulk with Signed is handy when a config file or database column stores hashes as signed integers.

Common mistakes

  • Hashing the display name. "Arabian" is not a model name. Hash the model, weapon or control name the game uses (a_c_horse_arabian_white, WEAPON_REVOLVER_CATTLEMAN, INPUT_JUMP).
  • Comparing signed with unsigned. -925223936 == 3369743360 is false in code even though they are the same hash. Convert one side before comparing.
  • Taking a collision for an answer. joaat is 32 bit, so two different names can share a value. When more than one name comes back, pick the one that fits what you are doing.

Limitations

  • The lookup only knows names that appear in RDR2’s own files and that someone could put a name to. Many RDR2 hashes have no known name.
  • It covers the sets listed above and the English game text. Anything else (sounds, animations, props) is not searched yet.
  • When the same name is in two sets, or a name is also a text label key (INPUT_JUMP is a control and the label of the word “Jump”), the panel counts two matches and shows the collision note even though only one name is involved.