1 /*************************************************************************** 2 68000 Program Code Addresses 3 Addresses to data within the Master and Sub CPU Program ROMs. 4 5 These are typically large blocks of data that we don't want to include 6 in the codebase. 7 8 Where needed addresses from the separate Japanese version are also 9 included. These are denoted by entries ending _J 10 11 Copyright Chris White. 12 See license.txt for more details. 13 ***************************************************************************/ 14 15 #pragma once 16 17 // ---------------------------------------------------------------------------- 18 // Text Structures 19 // ---------------------------------------------------------------------------- 20 21 // Text1 = Use BlitText1 routine | Text2 = Use BlitText2 routine 22 23 // Text: Credits 24 const uint16_t TEXT1_CREDIT = 0x6D38; 25 const uint16_t TEXT1_CREDITS = 0x6D48; 26 const uint16_t TEXT1_CLEAR_CREDITS = 0x6D58; 27 const uint16_t TEXT1_FREEPLAY = 0x6D6C; 28 29 // Text: Course Map 30 const uint16_t TEXT2_COURSEMAP = 0xBBC2; 31 32 // Text: Press Start 33 const uint16_t TEXT1_PRESS_START = 0xBBD0; 34 const uint16_t TEXT1_CLEAR_START = 0xBBEC; 35 36 // Text: Insert Coins 37 const uint16_t TEXT1_INSERT_COINS = 0xBC08; 38 const uint16_t TEXT1_CLEAR_COINS = 0xBC1E; 39 40 // Text: Game Over 41 const uint16_t TEXT2_GAMEOVER = 0xBCB0; 42 43 // Text: Select Music By Steering 44 const uint16_t TEXT2_SELECT_MUSIC = 0xBCBE; 45 46 // Text: 1986 Sega 47 const uint16_t TEXT1_1986_SEGA = 0xBCF2; 48 49 // Text: Copyright Symbol 50 const uint16_t TEXT1_COPYRIGHT = 0xBD04; 51 52 // Text: Magical Sound Shower 53 const uint16_t TEXT2_MAGICAL = 0xCE04; 54 55 // Text: Passing Breeze 56 const uint16_t TEXT2_BREEZE = 0xCE1E; 57 58 // Text: Splash Wave 59 const uint16_t TEXT2_SPLASH = 0xCE38; 60 61 // Text: Your Score 62 const uint16_t TEXT1_YOURSCORE = 0xD5E0; 63 64 // Text: Best OutRunners 65 const uint16_t TEXT2_BEST_OR = 0xD5F2; 66 67 // Text: Score, Name, Route, Record 68 const uint16_t TEXT1_SCORE_ETC = 0xD606; 69 70 // Text: ABCDEFGHIJKLMNOPQRSTUVWXYZ 71 const uint16_t TEXT2_ALPHABET = 0xD5C2; 72 73 // Text: Extend Time 74 const uint16_t TEXT1_EXTEND1 = 0x90DC; 75 const uint16_t TEXT1_EXTEND2 = 0x90F6; 76 77 // Text: Clear Extend Time 78 const uint16_t TEXT1_EXTEND_CLEAR1 = 0x9110; 79 const uint16_t TEXT1_EXTEND_CLEAR2 = 0x912A; 80 81 // Text: Laptime 82 const uint16_t TEXT1_LAPTIME1 = 0x9144; 83 const uint16_t TEXT1_LAPTIME2 = 0x9150; 84 85 // Text: Clear Laptime 86 const uint16_t TEXT1_LAPTIME_CLEAR1 = 0x915C; 87 const uint16_t TEXT1_LAPTIME_CLEAR2 = 0x917A; 88 89 // Text: Easter Egg 90 const uint16_t TEXT1_EASTER = 0x91B4; 91 const uint16_t TEXT1_EASTER_CLEAR = 0x91D6; 92 93 // Text: Bonus Points Section 94 const uint16_t TEXT2_BONUS_POINTS = 0x9C0C; 95 const uint16_t TEXT1_BONUS_STOP = 0x9C1C; 96 const uint16_t TEXT1_BONUS_SEC = 0x9C26; 97 const uint16_t TEXT1_BONUS_X = 0x9C34; 98 const uint16_t TEXT1_BONUS_PTS = 0x9C3E; 99 const uint16_t TEXT1_BONUS_100K = 0x9C4A; 100 const uint16_t TEXT2_BONUS_CLEAR1 = 0x9C52; 101 const uint16_t TEXT2_BONUS_CLEAR2 = 0x9C64; 102 const uint16_t TEXT2_BONUS_CLEAR3 = 0x9C78; 103 104 // ---------------------------------------------------------------------------- 105 // HUD 106 // ---------------------------------------------------------------------------- 107 108 // SCORE Graphic (2 Lines) 109 const uint16_t HUD_SCORE1 = 0xBC3E; 110 const uint16_t HUD_SCORE2 = 0xBC4C; 111 112 // TIME Graphic (2 Lines) 113 const uint16_t HUD_TIME1 = 0xBC5A; 114 const uint16_t HUD_TIME2 = 0xBC66; 115 116 // KPH (2 Lines) 117 const uint16_t HUD_KPH1 = 0xBC72; 118 const uint16_t HUD_KPH2 = 0xBC7E; 119 120 // STAGE (2 Lines) 121 const uint16_t HUD_STAGE1 = 0xBC8A; 122 const uint16_t HUD_STAGE2 = 0xBC98; 123 124 // Number "1" to appear after stage 125 const uint16_t HUD_ONE = 0xBCA6; 126 127 // LAP (2 Lines) 128 const uint16_t HUD_LAP1 = 0xBCDA; 129 const uint16_t HUD_LAP2 = 0xBCE6; 130 131 // ---------------------------------------------------------------------------- 132 // Tilemaps 133 // ---------------------------------------------------------------------------- 134 135 // Tilemap hardware addresses 136 const uint32_t HW_FG_PSEL = 0xE80; 137 const uint32_t HW_BG_PSEL = 0xE82; 138 const uint32_t HW_BG_HSCROLL = 0xE9A; 139 const uint32_t HW_FG_VSCROLL = 0xE90; 140 const uint32_t HW_BG_VSCROLL = 0xE92; 141 const uint32_t HW_FG_HSCROLL = 0xE98; 142 143 // In-Game Tilemap Defaults 144 const uint32_t TILES_PAGE_FG1 = 0x17E4C; 145 const uint32_t TILES_PAGE_BG1 = 0x17E5C; 146 const uint32_t TILES_PAGE_FG2 = 0x17E68; // Used for road split 147 const uint32_t TILES_PAGE_BG2 = 0x17E78; // Used for road split 148 const uint32_t TILES_DEF_LOOKUP = 0x17E84; // Tilemap default lookup indexes, for values in table below 149 const uint32_t TILES_DEF_LOOKUP_J = 0x178E4; 150 const uint32_t TILES_TABLE = 0x17EAC; // Stage Tilemap Default Values 151 const uint32_t TILES_TABLE_J = 0x1790c; 152 153 const uint32_t TILES_MINIMAP = 0x8C04; 154 155 // Table of h_scroll offsets (words) for road split 156 // Note the h_scroll is set manually during the road split from the actual road position 157 const uint32_t H_SCROLL_TABLE = 0x30B00; 158 159 // Tilemap: Music Selection Screen 160 const uint32_t TILEMAP_MUSIC_SELECT = 0x383F2; 161 162 // ---------------------------------------------------------------------------- 163 // Palettes 164 // ---------------------------------------------------------------------------- 165 166 // In-Game Tilemap Palettes 167 const uint32_t TILEMAP_PALS = 0xDF9C; 168 169 // Palette: Music Select Screen 170 const uint32_t PAL_MUSIC_SELECT = 0x175CC; 171 172 // Table of long addresses of ground colours 173 const uint32_t PAL_GND_TABLE = 0x17350; 174 175 // Table of palette addresses 176 const uint32_t PAL_SKY_TABLE = 0x17590; 177 178 // Palette Data: Best Outrunners Name Entry 179 const uint32_t PAL_BESTOR = 0x17DCC; 180 181 // ---------------------------------------------------------------------------- 182 // Sprites 183 // ---------------------------------------------------------------------------- 184 185 // Sprite Animation Sequences For Crashes 186 // 187 // +00 [Long] Sprite Data Frame Address 188 // +04 [Byte] Bit 7: Set to H-Flip Sprite 189 // Bit 0: Set Sprite to Sprite Priority Higher (Unused so far?) 190 // +05 [Byte] Sprite Colour Palette 191 // +06 [Byte] Passenger Frame 192 // OR FOR Passenger Sprites: X Offset 193 // +07 [Byte] Set to denote end of frame sequence 194 // OR FOR Passenger Sprites: Y Offset 195 196 const uint32_t SPRITE_CRASH_SPIN1 = 0x2294; 197 const uint32_t SPRITE_CRASH_SPIN2 = 0x22D4; 198 const uint32_t SPRITE_BUMP_DATA1 = 0x2314; 199 const uint32_t SPRITE_BUMP_DATA2 = 0x232C; 200 const uint32_t SPRITE_CRASH_MAN1 = 0x2344; 201 const uint32_t SPRITE_CRASH_GIRL1 = 0x23B4; 202 const uint32_t SPRITE_CRASH_FLIP = 0x2424; // Flip: Car 203 const uint32_t SPRITE_CRASH_FLIP_MAN1 = 0x2464; // Flip: Man 204 const uint32_t SPRITE_CRASH_FLIP_GIRL1 = 0x255C; // Flip: Girl 205 const uint32_t SPRITE_CRASH_FLIP_MAN2 = 0x24DC; // Post Flip: Man 206 const uint32_t SPRITE_CRASH_FLIP_GIRL2 = 0x25D4; // Post Flip: Girl 207 const uint32_t SPRITE_CRASH_MAN2 = 0x2604; 208 const uint32_t SPRITE_CRASH_GIRL2 = 0x2660; 209 210 const uint32_t SPRITE_CRASH_SPIN1_J = SPRITE_CRASH_SPIN1 - 12; 211 const uint32_t SPRITE_CRASH_SPIN2_J = SPRITE_CRASH_SPIN2 - 12; 212 const uint32_t SPRITE_BUMP_DATA1_J = SPRITE_BUMP_DATA1 - 12; 213 const uint32_t SPRITE_BUMP_DATA2_J = SPRITE_BUMP_DATA2 - 12; 214 const uint32_t SPRITE_CRASH_MAN1_J = SPRITE_CRASH_MAN1 - 12; 215 const uint32_t SPRITE_CRASH_GIRL1_J = SPRITE_CRASH_GIRL1 - 12; 216 const uint32_t SPRITE_CRASH_FLIP_J = SPRITE_CRASH_FLIP - 12; // Flip: Car 217 const uint32_t SPRITE_CRASH_FLIP_MAN1_J = SPRITE_CRASH_FLIP_MAN1 - 12; // Flip: Man 218 const uint32_t SPRITE_CRASH_FLIP_GIRL1_J = SPRITE_CRASH_FLIP_GIRL1 - 12; // Flip: Girl 219 const uint32_t SPRITE_CRASH_FLIP_MAN2_J = SPRITE_CRASH_FLIP_MAN2 - 12; // Post Flip: Man 220 const uint32_t SPRITE_CRASH_FLIP_GIRL2_J = SPRITE_CRASH_FLIP_GIRL2 - 12; // Post Flip: Girl 221 const uint32_t SPRITE_CRASH_MAN2_J = SPRITE_CRASH_MAN2 - 12; 222 const uint32_t SPRITE_CRASH_GIRL2_J = SPRITE_CRASH_GIRL2 - 12; 223 224 // Sprite Default Properties 225 // 226 // +0: Sprite Properties 227 // +1: Draw Properties 228 // +2: Sprite Priority 229 // +3: Sprite Palette 230 // +4: Sprite Type 231 // +6: Sprite X World 232 // +8: Sprite Y World 233 // +A: Sprite Z 234 // +C: Routine Address 235 const uint32_t SPRITE_DEF_PROPS1 = 0x2B70; 236 const uint32_t SPRITE_DEF_PROPS1_J = 0x2B64; 237 238 // Best OutRunners Sprites 239 const uint32_t SPRITE_DEF_PROPS2 = 0x2FB2; 240 const uint32_t SPRITE_DEF_PROPS2_J = 0x2FA6; 241 242 // Sprite: Cloud Frames 243 const uint32_t SPRITE_CLOUD_FRAMES = 0x4246; 244 const uint32_t SPRITE_CLOUD_FRAMES_J = 0x423A; 245 246 // Sprite: Mini Tree Frames 247 const uint32_t SPRITE_MINITREE_FRAMES = 0x435C; 248 const uint32_t SPRITE_MINITREE_FRAMES_J = 0x4350; 249 250 // Sprite: Grass Frames (Vary in thickness. Closer to the camera = Need Thicker Sprite.) 251 const uint32_t SPRITE_GRASS_FRAMES = 0x4548; 252 const uint32_t SPRITE_GRASS_FRAMES_J = 0x453C; 253 254 // Sprite: Sand Frames 255 const uint32_t SPRITE_SAND_FRAMES = 0x4588; 256 const uint32_t SPRITE_SAND_FRAMES_J = 0x457C; 257 258 // Sprite: Stone Frames 259 const uint32_t SPRITE_STONE_FRAMES = 0x45C8; 260 const uint32_t SPRITE_STONE_FRAMES_J = 0x45BC; 261 262 // Sprite: Water Frames (Vary in thickness. Closer to the camera = Need Thicker Sprite.) 263 const uint32_t SPRITE_WATER_FRAMES = 0x4608; 264 const uint32_t SPRITE_WATER_FRAMES_J = 0x45FC; 265 266 // Sprite: Shadow Frames 267 const uint32_t SPRITE_SHDW_FRAMES = 0x7862; 268 const uint32_t SPRITE_SHDW_FRAMES_J = 0x7794; 269 270 // Sprite: Ferrari Frames, Offsets 271 const uint32_t SPRITE_FERRARI_FRAMES = 0x9ECC; 272 const uint32_t SPRITE_FERRARI_FRAMES_J = 0x9CF2; 273 274 // Sprite: Frame Data For Ferrari Skid 275 const uint32_t SPRITE_SKID_FRAMES = 0x9F1C; 276 const uint32_t SPRITE_SKID_FRAMES_J = 0x9D3A; 277 278 // Sprite: Passenger Frames (2 Frames for each, hair up and hair down) 279 const uint32_t SPRITE_PASS_FRAMES = 0xA6EC; 280 const uint32_t SPRITE_PASS_FRAMES_J = 0xA512; 281 282 // Table of smoke data from wheels 283 const uint32_t SMOKE_DATA = 0xACC6; 284 const uint32_t SMOKE_DATA_J = 0xAAEC; 285 286 // Table of spray data from wheels 287 const uint32_t SPRAY_DATA = 0xAD06; 288 const uint32_t SPRAY_DATA_J = 0xAB2C; 289 290 // Sprite: Shadow Data 291 const uint32_t SPRITE_SHADOW_DATA = 0x103B6; 292 const uint32_t SPRITE_SHADOW_DATA_J = 0xFE16; 293 294 // Sprite: Passenger Skid Frames 295 const uint32_t SPRITE_PASS1_SKIDL = 0x1107C; 296 const uint32_t SPRITE_PASS1_SKIDR = 0x110C2; 297 const uint32_t SPRITE_PASS2_SKIDL = 0x110CC; 298 const uint32_t SPRITE_PASS2_SKIDR = 0x11112; 299 const uint32_t SPRITE_PASS1_SKIDL_J = 0x10ADC; 300 const uint32_t SPRITE_PASS1_SKIDR_J = 0x10B22; 301 const uint32_t SPRITE_PASS2_SKIDL_J = 0x10B2C; 302 const uint32_t SPRITE_PASS2_SKIDR_J = 0x10B72; 303 304 // Long addresses of sprite data for hardware 305 const uint32_t SPRITE_TYPE_TABLE = 0x11ED2; 306 const uint32_t SPRITE_TYPE_TABLE_J = 0x11932; 307 308 // Master Sprite Table 309 // 310 // Each one of the following addresses contains the following: 311 // 312 // [+0] Sprite Frequency Value Bitmask [Word] 313 // [+2] Reload Value For Sprite Info Offset [Word] 314 // [+4] Start of table with x,y,type,palette etc. 315 const uint32_t SPRITE_MASTER_TABLE = 0x1A43C; 316 const uint32_t SPRITE_MASTER_TABLE_J = 0x19C96; 317 318 // OutRun logo data 319 const uint32_t SPRITE_LOGO_BG = 0x11162; 320 const uint32_t SPRITE_LOGO_CAR = 0x1128E; 321 const uint32_t SPRITE_LOGO_BIRD1 = 0x112C0; 322 const uint32_t SPRITE_LOGO_BIRD2 = 0x112F2; 323 const uint32_t SPRITE_LOGO_BASE = 0x1125C; 324 const uint32_t SPRITE_LOGO_TEXT = 0x11194; 325 const uint32_t SPRITE_LOGO_PALM1 = 0x111C6; 326 const uint32_t SPRITE_LOGO_PALM2 = 0x111F8; 327 const uint32_t SPRITE_LOGO_PALM3 = 0x1122A; 328 const uint32_t SPRITE_LOGO_BG_J = SPRITE_LOGO_BG - 0x5A0; 329 const uint32_t SPRITE_LOGO_CAR_J = SPRITE_LOGO_CAR - 0x5A0; 330 const uint32_t SPRITE_LOGO_BIRD1_J = SPRITE_LOGO_BIRD1 - 0x5A0; 331 const uint32_t SPRITE_LOGO_BIRD2_J = SPRITE_LOGO_BIRD2 - 0x5A0; 332 const uint32_t SPRITE_LOGO_BASE_J = SPRITE_LOGO_BASE - 0x5A0; 333 const uint32_t SPRITE_LOGO_TEXT_J = SPRITE_LOGO_TEXT - 0x5A0; 334 const uint32_t SPRITE_LOGO_PALM1_J = SPRITE_LOGO_PALM1 - 0x5A0; 335 const uint32_t SPRITE_LOGO_PALM2_J = SPRITE_LOGO_PALM2 - 0x5A0; 336 const uint32_t SPRITE_LOGO_PALM3_J = SPRITE_LOGO_PALM3 - 0x5A0; 337 338 // Music Selection Screen - Sprite Data 339 const uint32_t SPRITE_FM_LEFT = 0x11892; 340 const uint32_t SPRITE_FM_CENTRE = 0x1189C; 341 const uint32_t SPRITE_FM_RIGHT = 0x118A6; 342 const uint32_t SPRITE_DIAL_LEFT = 0x118B0; 343 const uint32_t SPRITE_DIAL_CENTRE = 0x118BA; 344 const uint32_t SPRITE_DIAL_RIGHT = 0x118C4; 345 const uint32_t SPRITE_EQ = 0x118CE; // EQ Sprite, Part of Radio 346 const uint32_t SPRITE_RADIO = 0x118D8; 347 const uint32_t SPRITE_HAND_LEFT = 0x118E2; 348 const uint32_t SPRITE_HAND_CENTRE = 0x118EC; 349 const uint32_t SPRITE_HAND_RIGHT = 0x118F6; 350 351 const uint32_t SPRITE_FM_LEFT_J = SPRITE_FM_LEFT - 0x5A0; 352 const uint32_t SPRITE_FM_CENTRE_J = SPRITE_FM_CENTRE - 0x5A0; 353 const uint32_t SPRITE_FM_RIGHT_J = SPRITE_FM_RIGHT - 0x5A0; 354 const uint32_t SPRITE_DIAL_LEFT_J = SPRITE_DIAL_LEFT - 0x5A0; 355 const uint32_t SPRITE_DIAL_CENTRE_J = SPRITE_DIAL_CENTRE - 0x5A0; 356 const uint32_t SPRITE_DIAL_RIGHT_J = SPRITE_DIAL_RIGHT - 0x5A0; 357 const uint32_t SPRITE_EQ_J = SPRITE_EQ - 0x5A0; 358 const uint32_t SPRITE_RADIO_J = SPRITE_RADIO - 0x5A0; 359 const uint32_t SPRITE_HAND_LEFT_J = SPRITE_HAND_LEFT - 0x5A0; 360 const uint32_t SPRITE_HAND_CENTRE_J = SPRITE_HAND_CENTRE - 0x5A0; 361 const uint32_t SPRITE_HAND_RIGHT_J = SPRITE_HAND_RIGHT - 0x5A0; 362 363 // Shadow data 364 const uint32_t SPRITE_SHDW_SMALL = 0x1193C; 365 const uint32_t SPRITE_SHDW_SMALL_J = 0x1139C; 366 367 // Sprite Collision X Offsets [Signed] 368 // Table is indexed with the type of sprite. 369 // 370 // Format: 371 // Word 1: X-Left Offset 372 // Word 2: X-Right Offset 373 const uint32_t SPRITE_X_OFFS = 0x1212A; 374 375 // Sprite Zoom Lookup Table. 376 // Table Of Longs that represent X & Y Zoom Value 377 const uint32_t SPRITE_ZOOM_LOOKUP = 0x28000; 378 379 const uint32_t MOVEMENT_LOOKUP_Z = 0x30900; 380 381 // Table to alter sprite based on its y position. 382 // 383 // Input = Y Position 384 // 385 // Format: 386 // 387 // +0: Frame Number To Use 388 // +2: Entry In Zoom Lookup Table 389 const uint32_t MAP_Y_TO_FRAME = 0x30A00; 390 391 // ---------------------------------------------------------------------------- 392 // Road 393 // ---------------------------------------------------------------------------- 394 395 // Road Data Lookup Table 396 // Long Addresses where road data is looked up from. 397 // Note this only contains the road data itself. Namely the x position, and the length of each segment. 398 // 399 // The height and width are fetched from elsewhere. 400 // The sprites etc are fetched from elsewhere. 401 // 402 // Same location in both Jap and USA Roms. 403 // 404 // Note: Although 1AD92 might not be used, this seems to be a section of road with road split / checkpoint sign 405 const uint32_t ROAD_DATA_LOOKUP = 0x1224; 406 407 // Lookup table of road height information. 408 // Each entry is a long address into this rom. 409 const uint32_t ROAD_HEIGHT_LOOKUP = 0x220A; 410 const uint32_t ROAD_HEIGHT_LOOKUP_J = 0x21F6; 411 412 // Data for Road Split (Same Address for Jap and USA Roms) 413 const uint32_t ROAD_DATA_SPLIT = 0x3A33E; 414 415 // Data for Road Bonus (Same Address for Jap and USA Roms) 416 const uint32_t ROAD_DATA_BONUS = 0x3ACA0; 417 418 // Data for Road Background Colour (Same Address for Jap and USA Roms) 419 const uint32_t ROAD_BGCOLOR = 0x109EE; 420 421 // Segment data for End Sequences (Master CPU Code) 422 const uint32_t ROAD_SEG_TABLE_END = 0xE514; 423 const uint32_t ROAD_SEG_TABLE_END_J = 0xE1FE; 424 425 // Road Segment Table Information (Master CPU Code) 426 const uint32_t ROAD_SEG_TABLE = 0xE528; 427 const uint32_t ROAD_SEG_TABLE_J = 0xE212; 428 429 // Segment data for Road Split (Master CPU Code) 430 const uint32_t ROAD_SEG_TABLE_SPLIT = 0x1DFA4; 431 const uint32_t ROAD_SEG_TABLE_SPLIT_J = 0x1D5A6; 432 433 434 // ---------------------------------------------------------------------------- 435 // Traffic Data 436 // ---------------------------------------------------------------------------- 437 438 // Traffic Property Table 439 const uint32_t TRAFFIC_PROPS = 0x4CFA; 440 const uint32_t TRAFFIC_PROPS_J = 0x4CDE; 441 442 // There are six types of traffic in OutRun: 443 // Lorry, Pickup, Beetle, BMW, Corvette, Porsche. 444 // 445 // Each has 5 directional frames, including horizontal flipping. 446 // Some vehicles have different frames for inclines. 447 // 448 // Format is [0x20 byte boundaries]: 449 // 450 // [+0] Straight Frame 451 // [+4] Straight Frame (same as above) 452 // [+8] Right Frame 453 // [+C] Rightmost Frame 454 // 455 // [+10] Straight Frame [uphill version] 456 // [+14] Straight Frame [uphill version] (same as above) 457 // [+18] Right Frame [uphill version] 458 // [+1C] Rightmost Frame [uphill version] 459 460 const uint32_t TRAFFIC_DATA = 0x5424; 461 const uint32_t TRAFFIC_DATA_J = 0x5362; 462 463 const uint32_t SPRITE_PORSCHE = 0xF290; 464 const uint32_t SPRITE_PORSCHE_J = 0xED22; 465 466 // ---------------------------------------------------------------------------- 467 // Animation Sequences 468 // ---------------------------------------------------------------------------- 469 470 // Flag Waver 471 const uint32_t ANIM_SEQ_FLAG = 0x12382; 472 const uint32_t ANIM_SEQ_FLAG_J = ANIM_SEQ_FLAG - 0x5A0; 473 474 // Ferrari Drive-In Sequence 475 const uint32_t ANIM_FERRARI_CURR = 0x12970; 476 const uint32_t ANIM_FERRARI_NEXT = 0x129C0; 477 const uint32_t ANIM_FERRARI_CURR_J = ANIM_FERRARI_CURR - 0x5A0; 478 const uint32_t ANIM_FERRARI_NEXT_J = ANIM_FERRARI_NEXT - 0x5A0; 479 480 const uint32_t ANIM_PASS1_CURR = 0x129C8; 481 const uint32_t ANIM_PASS1_NEXT = 0x12A18; 482 const uint32_t ANIM_PASS1_CURR_J = ANIM_PASS1_CURR - 0x5A0; 483 const uint32_t ANIM_PASS1_NEXT_J = ANIM_PASS1_NEXT - 0x5A0; 484 485 const uint32_t ANIM_PASS2_CURR = 0x12A20; 486 const uint32_t ANIM_PASS2_NEXT = 0x12A70; 487 const uint32_t ANIM_PASS2_CURR_J = ANIM_PASS2_CURR - 0x5A0; 488 const uint32_t ANIM_PASS2_NEXT_J = ANIM_PASS2_NEXT - 0x5A0; 489 490 // ---------------------------------------------------------------------------- 491 // End Sequence / Bonus Mode 492 // ---------------------------------------------------------------------------- 493 494 // Ferrari Sprite Frame Data For Bonus Mode 495 // 496 // +0 [Long]: Address of frame 497 // +4 [Byte]: Passenger Offset (always 0!) 498 // +5 [Byte]: Ferrari X Change 499 // +6 [Byte]: Sprite Colour Palette 500 // +7 [Byte]: H-Flip 501 const uint32_t ANIM_FERRARI_FRAMES = 0xA2F0; 502 const uint32_t ANIM_FERRARI_FRAMES_J = 0xA116; 503 504 // Note each table is used by every end sequence animation. 505 // And contains the variance for that particular animation. 506 const uint32_t ANIM_ENDSEQ_OBJ1 = 0x124B0; // Ferrari Door Opening 507 const uint32_t ANIM_ENDSEQ_OBJ2 = 0x124D8; // Ferrari Interior 508 const uint32_t ANIM_ENDSEQ_OBJ3 = 0x12500; // Car Shadow & Man Sprite 509 const uint32_t ANIM_ENDSEQ_OBJ4 = 0x12528; // Man Shadow & Female Sprite 510 const uint32_t ANIM_ENDSEQ_OBJ5 = 0x12550; // Female Shadow & Person Presenting Trophy 511 const uint32_t ANIM_ENDSEQ_OBJ6 = 0x12578; 512 const uint32_t ANIM_ENDSEQ_OBJ7 = 0x125A0; 513 const uint32_t ANIM_ENDSEQ_OBJ8 = 0x125C8; // Animation Data Sequence For Trophy Person 514 const uint32_t ANIM_ENDSEQ_OBJA = 0x125F0; 515 const uint32_t ANIM_ENDSEQ_OBJB = 0x12618; 516 const uint32_t ANIM_END_TABLE = 0x123A2; // Start/End Animation Sequence Markers (Only End Markers Appear To Be Used) 517 const uint32_t ANIM_ENDSEQ_OBJ1_J = ANIM_ENDSEQ_OBJ1 - 0x5A0; 518 const uint32_t ANIM_ENDSEQ_OBJ2_J = ANIM_ENDSEQ_OBJ2 - 0x5A0; 519 const uint32_t ANIM_ENDSEQ_OBJ3_J = ANIM_ENDSEQ_OBJ3 - 0x5A0; 520 const uint32_t ANIM_ENDSEQ_OBJ4_J = ANIM_ENDSEQ_OBJ4 - 0x5A0; 521 const uint32_t ANIM_ENDSEQ_OBJ5_J = ANIM_ENDSEQ_OBJ5 - 0x5A0; 522 const uint32_t ANIM_ENDSEQ_OBJ6_J = ANIM_ENDSEQ_OBJ6 - 0x5A0; 523 const uint32_t ANIM_ENDSEQ_OBJ7_J = ANIM_ENDSEQ_OBJ7 - 0x5A0; 524 const uint32_t ANIM_ENDSEQ_OBJ8_J = ANIM_ENDSEQ_OBJ8 - 0x5A0; 525 const uint32_t ANIM_ENDSEQ_OBJA_J = ANIM_ENDSEQ_OBJA - 0x5A0; 526 const uint32_t ANIM_ENDSEQ_OBJB_J = ANIM_ENDSEQ_OBJB - 0x5A0; 527 const uint32_t ANIM_END_TABLE_J = ANIM_END_TABLE - 0x5A0; 528 // ---------------------------------------------------------------------------- 529 // Course Map Data 530 // ---------------------------------------------------------------------------- 531 532 // Course Map Sprite Data 533 const uint32_t SPRITE_COURSEMAP = 0x26BE; 534 const uint32_t SPRITE_COURSEMAP_J = 0x26B2; // Japanese ROMs 535 536 // Coursemap Sprite Components 537 const uint32_t SPRITE_COURSEMAP_TOP = 0x3784; 538 const uint32_t SPRITE_COURSEMAP_BOT = 0x386C; 539 const uint32_t SPRITE_COURSEMAP_END = 0x3954; 540 const uint32_t SPRITE_COURSEMAP_TOP_J = SPRITE_COURSEMAP_TOP - 12; 541 const uint32_t SPRITE_COURSEMAP_BOT_J = SPRITE_COURSEMAP_BOT - 12; 542 const uint32_t SPRITE_COURSEMAP_END_J = SPRITE_COURSEMAP_END - 12; 543 544 // Minicar 545 const uint32_t SPRITE_MINICAR_RIGHT = 0x10C58; 546 const uint32_t SPRITE_MINICAR_UP = 0x10C62; 547 const uint32_t SPRITE_MINICAR_DOWN = 0x10C6C; 548 const uint32_t SPRITE_MINICAR_RIGHT_J = SPRITE_MINICAR_RIGHT - 0x5A0; 549 const uint32_t SPRITE_MINICAR_UP_J = SPRITE_MINICAR_UP - 0x5A0; 550 const uint32_t SPRITE_MINICAR_DOWN_J = SPRITE_MINICAR_DOWN - 0x5A0; 551 552 // Convert route information to piece index to colour 553 const uint32_t MAP_ROUTE_LOOKUP = 0x3636; 554 555 // X and Y Movement table for Minicar 556 const uint32_t MAP_MOVEMENT_LEFT = 0x3A34; 557 const uint32_t MAP_MOVEMENT_RIGHT = 0x3AB4; 558 559 // ---------------------------------------------------------------------------- 560 // Best OutRunners Data 561 // ---------------------------------------------------------------------------- 562 563 // Tiles for minicars that run across the text layer 564 const uint32_t TILES_MINICARS1 = 0xD62A; 565 const uint32_t TILES_MINICARS2 = 0xD670; // smoke tiles 566 567 // Default Score Data 568 const uint32_t DEFAULT_SCORES = 0xD676; 569 570 // Alphabet characters for initial entry 571 const uint32_t TILES_ALPHABET = 0xD5A4; 572 573 // ---------------------------------------------------------------------------- 574 // Music Selection Data 575 // ---------------------------------------------------------------------------- 576 577 // Palette to cycle the graphical equalizer on the radio 578 const uint32_t MUSIC_EQ_PAL = 0xCCAA; 579 580 // ---------------------------------------------------------------------------- 581 // Data 582 // ---------------------------------------------------------------------------- 583 584 // X,Y Offsets of passenger 1 (Man) from car 585 // 586 // Format 587 // 588 // Word 1: Frame 1 X Offset 589 // Word 2: Frame 1 Y Offset 590 // Word 3: Frame 1 X Offset H-FLIP 591 // Word 4: Frame 1 Y Offset H-FLIP 592 // 593 // Word 5: Frame 2 X Offset 594 // Word 6: Frame 2 Y Offset 595 // 596 // etc. 597 const uint32_t PASS1_OFFSET = 0xA6FC; 598 const uint32_t PASS2_OFFSET = 0xA75C; 599 600 // Map stage ID to number 0-14 601 const uint32_t MAP_STAGE_ID = 0xDDB4; 602 603 // Width / Height Table for sprites 604 const uint32_t WH_TABLE = 0x20000; 605 606 // Movement Lookup Table 607 // Used by: 608 // - Logo Bird Animation In Attract Mode 609 // - Car Flip In Crash Scenario 610 // 611 // Entries 612 // 0 - 0xFF : X Position 613 // 0x100 - 0x1FF: Y Position 614 const uint32_t DATA_MOVEMENT = 0x30800;