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

From Data Crystal
Jump to navigation Jump to search
No edit summary
(WIP. Posting now because lights just flickered and I've already added so much.)
 
(3 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==
* 72D: Number of Players (1-4), set to 0 during the demo race.
Gamepad buttons are automatically set for CPU racers
Note: If all players are eliminated, or there are 0 players in the game, the game crashes at the menu between races.
* 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


* 7AF: Displayed Race Number
 
* 7B0: Displayed Race number to check for (0E during qualifying, 63 afterwards)
==General Variables==
* 7E0: Race Number (00-2A) When it reaches 2B (Race 43), wraps back to 1B (Race 27).
* 024-025: Randomizer
* 7E2: Game Diffculty (20-DC)
* 033: Current Car (temporary)
** Initial Value is 0x20
* 04C-04D: Previous X-Coordinate (mid-race) / Racer Position A (post-race)
** Increases by 2 on race number 2, 4, 6, 8, or any race >= 10.
* 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)
* 723: Current track (Determined by Race Number 7E0 and table FB69)
** 00 = Sidewinder
** 00 = Sidewinder
Line 20: Line 38:
** 06 = Blaster
** 06 = Blaster
** 07 = Cliffhanger
** 07 = Cliffhanger
** 08-0F = Reversed versions of 00-07.
** 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 Stats==
Player structure located around address 300 has 0x47 bytes per player.


==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 33: 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 47: 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 61: 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 74: 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}}

Latest 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