List of Jazz Jackrabbit 2 Memory Addresses

Jazz Jackrabbit 2 stores a lot of game information in the computer’s memory. Various programs edit the values stored in the memory to enhance the gameplay. All memory locations are given in hexadecimal.

Basic Information

Units

  • Boolean means a 1-byte value (0 or 1, often used to mean true or false)
  • Byte means a 1-byte value, ranging from 0..255, or -127..128 when signed.
  • Integer means a 4-byte value (a signed number), short a 2-byte value
  • String An array of type Byte representing a sequence of characters. These are ansi formatted (no unicode).
  • 1 pixel → 216 microtwip
  • 1 tile → 32 pixels → 221 microtwips
  • 1 second → 70 gameticks

Calculating between versions

Something that seems to work in most cases is using the adress you know for 1.23 to calculate the one for 1.24. This doesn’t always work, but the formula is:

1.23 + 0×23620 = TSF
TSF – 0×23620 = 1.23

1.23

Player-dependent memory addresses

These are memory variables for which each player has a different address. The addresses here are given for player 1, but they can be shifted to the other players by adding 5A4 to the memory addresses. For example, the address for Player 4’s X-position would be:
5A4EEC + (3*5A4) = 5A5FD8.
This is however not always the case. For example when handling connections the offset is +1AC.

Address Type Description
5A4EEC Integer X-position in microtwips.
5A4EF0 Integer Y-position in microtwips.
5A4EF6 Short X-speed.
5A4EFA Short Y-speed.
5A4F14 Short The current animation your character is playing (read-only).
5A4F1A Byte Freezetime.
5A4F1E Byte Health (Range: 0 to 5).
5A4F28 String Player name (maximal length: 24).
5A4F68 Integer Whether the player is flying. Possible values: -1 for airboard, 0 for no flight, 1 for helicopter ears.
5A4F94 Integer Number of double jumps already used
5A501C Integer Fastfire: the fastfire delay of the player.
5A5028 Integer The current weapon the player is using (Range: 0 to 9, 11,12,13 for ‘secret’ weapons).
5A5080 Integer The amount of lives someone has.
5A508C Integer How much blink time the player has left, measured in gameticks.
5A52A8 Integer The current player score (when in singleplayer mode).
5A52AC Integer Echo/shadow of the previous value (score).
5A52B0 Integer The amount of gobbled food. Every 100 the player gets a sugar rush.
5A52B4 Integer The amount of coins picked up.
5A52B8 Integer The amount of gems picked up.
5A52E0 Integer Ammo for weapon 1 (Blaster).
5A52E4 Integer Ammo for weapon 2 (Bouncers).
5A52E8 Integer Ammo for weapon 3 (Etcetera).
5A52EC Integer Ammo for weapon 4.
5A52F0 Integer Ammo for weapon 5.
5A52F4 Integer Ammo for weapon 6 (multiplied with 32).
5A52F8 Integer Ammo for weapon 7.
5A52FC Integer Ammo for weapon 8.
5A5300 Integer Ammo for weapon 9.
5A5308 Boolean Whether weapon 1 is powered up or not (0 or 1).
5A5309 Boolean Whether weapon 2 is powered up or not (0 or 1).
5A530A Boolean Whether weapon 3 is powered up or not (0 or 1).
5A530B Boolean Whether weapon 4 is powered up or not (0 or 1).
5A530C Boolean Whether weapon 5 is powered up or not (0 or 1).
5A530D Boolean Whether weapon 6 is powered up or not (0 or 1).
5A530E Boolean Whether weapon 7 is powered up or not (0 or 1).
5A530F Boolean Whether weapon 8 is powered up or not (0 or 1).
5A5310 Boolean Whether weapon 9 is powered up or not (0 or 1).
5A534C Integer The shield currently selected.
5A5350 Integer Amount of shield time left, measured in gameticks.
5A535C Integer The current player character, stored as the index of their animation set in Anims.j2a. (1.23: Jazz=54, Spaz=85, Bird=8, Frog=46. 1.24: Jazz=55, Spaz=89, Lori=61, Bird=8, Frog=47.)
5A5360 Integer The original player character (before possible morphing).
5A539C Integer The amount of sugar rush time left, measured in gameticks.
5A53D2 Short Camera Position X
5A4F74 Short Camera Position Y
5A5410 Integer The amount of roasts the player has.
5A544C Integer Fur color.
5A5458 Integer The team the player is on. (0=Blue, 1=Red).
5A545C Integer Has flag? (0=No flag, other=Object ID of flag).
5A5464 Integer The ID of the socket the game is currently using.
5A5468 Integer The player number within the local computer itself (range: 0 to 3).
5A546C Integer Player in F9-list (0=Player doesn’t exist, 2=Otherwise).
5FB21C Integer Player connected (5=True, 0=False, 1=muted, uses 1AC as offset).

Global memory addresses

These memory addresses store general information about JJ2. Modifying them will affect every player on the computer.
Address Type Description
4CA910 Boolean Playernames visible or not (same as F8)
4CDA24 String Version of JJ2 that is running.
4D3E30 Integer Whether the sounds are muted or not. (0=muted, 1=unmuted)
4D3E34 Integer Whether the music is muted or not. (0=muted, 1=unmuted)
4F8E10 HINSTANCE JJ2’s instance handle.
4F8E1C HWND JJ2’s window handle.
4F8E44 HMENU JJ2’s menu handle.
514DAC Integer Level width in tiles.
518E0C Integer Level height in tiles.
52A522 Boolean Game loop running or not.
58A5A0 Integer How long the gameloop has been running, in gameticks.
547313 String Current level name.
547373 String The filename of the next level.
5473b3 String Level music.
57AA40 Integer No wallclipping
(jjnowall effect, 1=True, 0=False).
58A641 String Chatstring
5A4740 Integer Score for the blue team.
5A4744 Integer Score for the red team.
5A4B64 Integer simulates F9
5A4B68 Integer Game mode (0=Singleplayer, 1=Cooperative, 2=Battle, 3=Race, 4=Treasure, 5=CTF).
5A4D00 Integer Number of players in game from your jj2-client.
5C6900 Integer Whether you talk in teamchat or not. (0=public chat, 1=blue chat, 2=red chat)
5D012C Integer Whether the “chatbox” is open or not. (1/0) after that it functions as chat string length counter, meaning that if the chatstring is one character, then the value will be 2.
5D01D0 Integer Maximal score.
5D0204 String Current level filename.
5DB7F0 Integer Change to 6 to restart level.
5F7CA0 Integer Height, camera-view.
5F7D40 Integer Width, camera-view.
5FB188 String Server name.
5FB1C8 String The server password.
5FCCE9 Integer Maximal amount of allowed players in server.
5FCCEA Boolean Private server (1=True, 0=False).
608A00 Boolean Running or not

1.24

Player-dependent memory addresses

The only difference with player memory addresses for 1.23 is the actual address. Add 0×23620 to the 1.23 address to get the 1.24 address. For example, the first player’s X-position in 1.24 is 0×5C850C.

Global memory addresses

Address Type Description
4C6928 Boolean Playernames visible or not (F8).
4C9bE8 String JJ2 version.
4F036C Integer Your playernumber (zero-based).
4F33F0 HINSTANCE JJ2’s instance handle.
4F33FC HWND JJ2’s window handle.
4F341C HMENU JJ2’s menu handle.
54D573 String Next level filename.
54D5B3 String Current level music.
59E060 Boolean Jjnowall.
5ADBC0 Integer How long the game loop has been running (gameticks).
5ADC61 String Chatstring.
5C7D60 Integer Blue score.
5C7D64 Integer Red score.
5C8184 Integer Simulates F9.
5C8188 Integer Game mode.
5C8320 Integer Number of players in game from jj2 client.
5C85B4 Boolean Unable to do another double jump or not?
5E9F20 Integer Whether you talk in teamchat or not. (0=public chat, 1=blue chat, 2=red chat)
5F374C Integer Whether the “chatbox” is open or not. (1/0) after that it functions as chat string length counter, meaning that if the chatstring is one character, then the value will be 2.
5F37F0 Integer Max score.
5F3824 String Current level filename.
5FEE10 Integer Set to 6 to restart level.
61E7E8 String Server password.
620309 Integer Max players (1-32)
62030A Boolean Private server (1=True, 0=False).
62C020 Boolean Running?