Ivan "Ironman" Stewart's Super Off Road/RAM map: Difference between revisions

From Data Crystal
Jump to navigation Jump to search
(WIP. Posting now because lights just flickered and I've already added so much.)
(6 intermediate revisions by 3 users not shown)
Line 1: Line 1:
{{rammap|game=Ivan "Ironman" Stewart's Super Off-Road}}
{{rammap|game=Ivan "Ironman" Stewart's Super Off-Road}}


==Variables==
==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


* 72D: Number of Players (1-4)
Note: If all players are eliminated, or there are 0 players in the game, the game crashes at the menu between races.
* 7AF: Race Number (Display Only)
* 7E0: Race Number


==Player Stats==
==General Variables==
Player structure located around address 300 has 0x47 bytes per player.
* 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:===
===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)
* 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)
* 30D: Country (00 = USA, 01 = Italy, 02 = Germany, 03 = Britain, 04 = France, 05 = Japan, 06 = Canada, 07 = Austraila, 08 = Leland)
Line 19: Line 133:
* 311: Acceleration (0-6)
* 311: Acceleration (0-6)
* 312: Top Speed (0-6)
* 312: Top Speed (0-6)
* 313-339: Track Records
* 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)
* 33F: Lap Counter  (1-5, set to 05 to instantly win a race)
* 344: Lap Progress
* 340: Debris Sprite
* 75D: Lives
* 341: Debris X-Coordinate
* 7A8: Eliminated Flag (00 = live, FF = eliminated, CPU plays for this player)
* 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:===
===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)
* 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)
* 354: Country (00 = USA, 01 = Italy, 02 = Germany, 03 = Britain, 04 = France, 05 = Japan, 06 = Canada, 07 = Austraila, 08 = Leland)
Line 33: Line 159:
* 358: Acceleration (0-6)
* 358: Acceleration (0-6)
* 359: Top Speed (0-6)
* 359: Top Speed (0-6)
* 35A-380: Track Records
* 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)
* 386: Lap Counter  (1-5, set to 05 to instantly win a race)
* 38B: Lap Progress
* 387: Debris Sprite
* 75E: Lives
* 388: Debris X-Coordinate
* 7A9: Eliminated Flag (00 = live, FF = eliminated, CPU plays for this player)
* 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:===
===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)
* 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)
* 39B: Country (00 = USA, 01 = Italy, 02 = Germany, 03 = Britain, 04 = France, 05 = Japan, 06 = Canada, 07 = Austraila, 08 = Leland)
Line 47: Line 185:
* 39F: Acceleration (0-6)
* 39F: Acceleration (0-6)
* 3A0: Top Speed (0-6)
* 3A0: Top Speed (0-6)
* 3A1-3C7: Track Records
* 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)
* 3CD: Lap Counter  (1-5, set to 05 to instantly win a race)
* 3D2: Lap Progress
* 3CE: Debris Sprite
* 75F: Lives
* 3CF: Debris X-Coordinate
* 7AA: Eliminated Flag (00 = live, FF = eliminated, CPU plays for this player)
* 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:===
===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)
* 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)
* 3E2: Country (00 = USA, 01 = Italy, 02 = Germany, 03 = Britain, 04 = France, 05 = Japan, 06 = Canada, 07 = Austraila, 08 = Leland)
Line 60: Line 211:
* 3E6: Acceleration (0-6)
* 3E6: Acceleration (0-6)
* 3E7: Top Speed (0-6)
* 3E7: Top Speed (0-6)
* 3E8-40E: Track Records
* 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)
* 414: Lap Counter  (1-5, set to 05 to instantly win a race)
* 419: Lap Progress
* 415: Debris Sprite
* 760: Lives
* 416: Debris X-Coordinate
* 7AB: Eliminated Flag (00 = live, FF = eliminated, CPU plays for this player)
* 417: Debris Y-Coordinate
* 418: Debris Animation Timer
* 419: Track Position
* 41A: Track Data Offset
* 41B: Airborne
** Set when off the ground, prevents acceleration


{{Internal Data|game=Ivan "Ironman" Stewart's Super Off-Road}}
{{Internal Data|game=Ivan "Ironman" Stewart's Super Off-Road}}

Revision as of 00:23, 20 November 2024

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