Ivan "Ironman" Stewart's Super Off Road/RAM map

From Data Crystal
Jump to navigation Jump to search

Chip tiny.png The following article is a RAM map for Ivan "Ironman" Stewart's Super Off Road.

Gamepad/Controller Variables

Gamepad buttons are automatically set for CPU racers

  • 026: Gamepad 1 Buttons
  • 027: Gamepad 1 Button Pressed
  • 028: Gamepad 2 Buttons
  • 029: Gamepad 2 Button Pressed
  • 02A: Gamepad 3 Buttons
  • 02B: Gamepad 3 Button Pressed
  • 02C: Gamepad 4 Buttons
  • 02D: Gamepad 4 Button Pressed

The following temporary variables are used to calculate "pressed" buttons

  • 02E: Gamepad 1 Previous Buttons
  • 02F: Gamepad 2 Previous Buttons
  • 030: Gamepad 3 Previous Buttons
  • 031: Gamepad 4 Previous Buttons


General Variables

  • 024-025: Randomizer
  • 033: Current Car (temporary)
  • 04C-04D: Previous X-Coordinate (mid-race) / Racer Position A (post-race)
  • 04E-04F: Previous Y-Coordinate (mid-race) / Racer Position B (post-race)
  • 05A: First Place Car (post-race)
  • 05B: Second Place Car (post-race)
  • 05C: Third Place Car (post-race)
  • 05D: Last Place Car (post-race)
  • 05E-05F: Previous Z-Coordinate (mid-race)
  • 060-061: Player Struct Address
  • 723: Current track (Determined by Race Number 7E0 and table FB69)
    • 00 = Sidewinder
    • 01 = Huevos Grande
    • 02 = Big Dukes
    • 03 = Hurricane Gulch
    • 04 = Wipeout
    • 05 = Fandango
    • 06 = Blaster
    • 07 = Cliffhanger
    • 08-0F = Reversed versions of 00-07.
  • 72D: Number of Players (1-4), set to 0 during the demo race
  • 725: Current Player (temporary)
    • Parent variable of $033
  • 727: Current Car Tire Traction
  • 728: Flagger Timer
  • 729: Bonus Item Value
    • Determines sprite, palette, and bonus value
  • 72A: Bonus Item X
  • 72B: Bonus Item Y
  • 72C: Bonus Item Timer
  • 736: Frame Counter
  • 737-73B: Stopwatch
  • 746: HUD Draw Timing
    • Updates laps & nitros if less than 4, otherwise updates every other digit in stopwatch (max 0x06)
  • 74E-751: Prize Amount (post-race)
  • 754: Current Car Airborne Value
  • 7AC: Continue Allowed
  • 7AD-7AE: CPU Reverse Delay
    • Starts at 0x12C each race, ignores 72E-735 while counting down
  • 7AF: Race Number
    • Determines CPU difficulty, etc.
  • 7B0: Race Checkpoint Number (0x0E = championship start, 0x63 = championship/game over)
  • 7CA: Name Entry Input Delay
    • Ignores gamepad input on Name Entry screen every 0x0A frames
  • 7DE: Cash Bonus Value
    • From 0x01 to 0x05, but 0x06 also works
  • 7DF: Nitro Bonus Value
    • From 0x07 to 0x0F
  • 7E0: Race Track Pointer
    • Counts up to 0x2A then loops back to 0x1B, determines race track
  • 7E2: Game Difficulty/CPU Minimum Speed (20-DC)
    • Initial Value is 0x20 and increases by 2 on race number 2, 4, 6, 8, and 10+
    • CPU speed will always be between 0x30 and 0xB0, however


Player Arrays

Note: These are all in sets of 4, in order of player

  • 05A-05D: Y-Coordinate Placeholder (mid-race)
    • Cars are moved to top of screen during collision checks, this saves their y-coordinates
  • 083-086: X-Coordinate
  • 087-08A: Subpixel X-Coordinate
  • 08B-08E: Y-Coordinate
  • 08F-092: Subpixel Y-Coordinate
  • 093-096: Driving Direction
    • Between 0x00 (left) and 0xBF
  • 097-09A: Speed
  • 09B-09E: Z-Coordinate / Height
  • 09F-0A2: Fractional Z-Coordinate / Height
  • 0A3-0A6: Airspeed
  • 0A7-0AA: Fractional Airspeed
  • 0AB-0AE: Gravity
    • Increases while in air, then added to Airspeed
  • 0AF-0B2: Shadow Z-Coordinate / Height
  • 0B3-0B6: Hangtime
    • Set to 1/64th car Speed upon leaving the ground
  • 0B7-0BA: Steering Direction
    • Between 0x00 (left) and 0xBF
    • Every 8 angles changes sprite, allowing for 24 sprites
  • 0BB-0BE: Pitch
    • From 0x01 (slightly angled) to 0x07 (steep angle), or 0x08 (level)
  • 0BF-0C2: Sprite Address (low-byte)
  • 0C3-0C6: Sprite Address (high-byte)
  • 0C7-0CA: Nitro State
  • 0CB-0CE: Nitro Timer
  • 0CF-0D2: Nitro Sprite (low-byte)
  • 0D3-0D6: Nitro Sprite (high-byte)
  • 0D7-0DA: Turning Direction
  • 0DB-0DE: Centrifuge
    • Resistance to turning, based on Speed
  • 72E-731: Reverse Point X-Coordinate
  • 732-735: Reverse Point Y-Coordinate
    • These may have been a used at some point to prevent CPU cars getting stuck
  • 74A-74D: Calculated Pitch (mid-race)
  • 74E-751: Calculated Z-Coordinate (mid-race)
  • 755-758: Previous Pitch (nose/tail angle)
    • 0x01 = slight pitch, 0x07 = steep pitch, 0x08 = level
  • 75D-760: Lives
  • 7A8-7AB: Eliminated Flag
    • 00 = live, FF = eliminated, CPU plays for this player
    • Note: If all players are eliminated, or there are 0 players in the game, the game crashes at the menu between races.


Player Structs

Player structure located around address $300, has 0x47 bytes per player.

Player 1:

  • 300-303: Name
  • 304: Negative Cash Balance
    • Drops to 0xFF if player has insufficient funds
  • 305-30C: Money (8 digits, left digit first)
  • 30D: Country (00 = USA, 01 = Italy, 02 = Germany, 03 = Britain, 04 = France, 05 = Japan, 06 = Canada, 07 = Austraila, 08 = Leland)
  • 30E: Shocks (0-6)
  • 30F: Tires (0-6)
  • 310: Nitros (0-99)
  • 311: Acceleration (0-6)
  • 312: Top Speed (0-6)
  • 313-33A: Track Records
  • 33C: Cash Picked Up
  • 33D: Car ID
  • 33E: Gamepad Pointer
    • Refer to variables 026-02D
  • 33F: Lap Counter (1-5, set to 05 to instantly win a race)
  • 340: Debris Sprite
  • 341: Debris X-Coordinate
  • 342: Debris Y-Coordinate
  • 343: Debris Animation Timer
  • 344: Track Position
  • 345: Track Data Offset
  • 346: Airborne
    • Set when off the ground, prevents acceleration

Player 2:

  • 347-34A: Name
  • 34B: Negative Cash Balance
    • Drops to 0xFF if player has insufficient funds
  • 34C-353: Money (8 digits, left digit first)
  • 354: Country (00 = USA, 01 = Italy, 02 = Germany, 03 = Britain, 04 = France, 05 = Japan, 06 = Canada, 07 = Austraila, 08 = Leland)
  • 355: Shocks (0-6)
  • 356: Tires (0-6)
  • 357: Nitros (0-99)
  • 358: Acceleration (0-6)
  • 359: Top Speed (0-6)
  • 35A-381: Track Records
  • 383: Cash Picked Up
  • 384: Car ID
  • 385: Gamepad Pointer
    • Refer to variables 026-02D
  • 386: Lap Counter (1-5, set to 05 to instantly win a race)
  • 387: Debris Sprite
  • 388: Debris X-Coordinate
  • 389: Debris Y-Coordinate
  • 38A: Debris Animation Timer
  • 38B: Track Position
  • 38C: Track Data Offset
  • 38D: Airborne
    • Set when off the ground, prevents acceleration

Player 3:

  • 38E-391: Name
  • 392: Negative Cash Balance
    • Drops to 0xFF if player has insufficient funds
  • 393-39A: Money (8 digits, left digit first)
  • 39B: Country (00 = USA, 01 = Italy, 02 = Germany, 03 = Britain, 04 = France, 05 = Japan, 06 = Canada, 07 = Austraila, 08 = Leland)
  • 39C: Shocks (0-6)
  • 39D: Tires (0-6)
  • 39E: Nitros (0-99)
  • 39F: Acceleration (0-6)
  • 3A0: Top Speed (0-6)
  • 3A1-3C8: Track Records
  • 3CA: Cash Picked Up
  • 3CB: Car ID
  • 3CC: Gamepad Pointer
    • Refer to variables 026-02D
  • 3CD: Lap Counter (1-5, set to 05 to instantly win a race)
  • 3CE: Debris Sprite
  • 3CF: Debris X-Coordinate
  • 3D0: Debris Y-Coordinate
  • 3D1: Debris Animation Timer
  • 3D2: Track Position
  • 3D3: Track Data Offset
  • 3D4: Airborne
    • Set when off the ground, prevents acceleration

Player 4:

  • 3D5-3D8: Name
  • 3D9: Negative Cash Balance
    • Drops to 0xFF if player has insufficient funds
  • 3DA-3E1: Money (8 digits, left digit first)
  • 3E2: Country (00 = USA, 01 = Italy, 02 = Germany, 03 = Britain, 04 = France, 05 = Japan, 06 = Canada, 07 = Austraila, 08 = Leland)
  • 3E3: Shocks (0-6)
  • 3E4: Tires (0-6)
  • 3E5: Nitros (0-99)
  • 3E6: Acceleration (0-6)
  • 3E7: Top Speed (0-6)
  • 3E8-40F: Track Records
  • 411: Cash Picked Up
  • 412: Car ID
  • 413: Gamepad Pointer
    • Refer to variables 026-02D
  • 414: Lap Counter (1-5, set to 05 to instantly win a race)
  • 415: Debris Sprite
  • 416: Debris X-Coordinate
  • 417: Debris Y-Coordinate
  • 418: Debris Animation Timer
  • 419: Track Position
  • 41A: Track Data Offset
  • 41B: Airborne
    • Set when off the ground, prevents acceleration