void Outrun::jump_table(Packet* packet) { if (tick_frame && game_state != GS_CALIBRATE_MOTOR) { main_switch(); // Address #1 (0xB128) - Main Switch oinputs.adjust_inputs(); // Address #2 (0x74D8) - Adjust Analogue Inputs } switch (game_state) { case GS_REINIT: case GS_CALIBRATE_MOTOR: break; // ---------------------------------------------------------------------------------------- // Couse Map Specific Code // ---------------------------------------------------------------------------------------- case GS_MAP: omap.tick(); break; case GS_MUSIC: osprites.tick(); olevelobjs.do_sprite_routine(); if (!outrun.tick_frame) { omusic.blit(); } break; // ---------------------------------------------------------------------------------------- // Best OutRunners Entry (EditJumpTable3 Entries) // ---------------------------------------------------------------------------------------- case GS_INIT_BEST2: case GS_BEST2: osprites.tick(); olevelobjs.do_sprite_routine(); if (!tick_frame) { // Check for start button if credits are remaining and set state to Music Selection if (ostats.credits && input.is_pressed_clear(Input::START)) game_state = GS_INIT_MUSIC; } break; // ---------------------------------------------------------------------------------------- // Core Game Engine Routines // ---------------------------------------------------------------------------------------- case GS_LOGO: if (!cannonball::tick_frame) ologo.blit(); case GS_ATTRACT: case GS_BEST1: if (tick_frame) check_freeplay_start(); default: if (tick_frame) osprites.tick(); // Address #3 Jump_SetupSprites olevelobjs.do_sprite_routine(); // replaces calling each sprite individually if (!config.engine.disable_traffic) otraffic.tick(); // Spawn & Tick Traffic if (tick_frame) oinitengine.init_crash_bonus(); // Initalize crash sequence or bonus code oferrari.tick(); if (oferrari.state != OFerrari::FERRARI_END_SEQ) { oanimseq.flag_seq(); ocrash.tick(); osmoke.draw_ferrari_smoke(&osprites.jump_table[OSprites::SPRITE_SMOKE1]); // Do Left Hand Smoke oferrari.draw_shadow(); // (0xF1A2) - Draw Ferrari Shadow osmoke.draw_ferrari_smoke(&osprites.jump_table[OSprites::SPRITE_SMOKE2]); // Do Right Hand Smoke } else { osmoke.draw_ferrari_smoke(&osprites.jump_table[OSprites::SPRITE_SMOKE1]); // Do Left Hand Smoke osmoke.draw_ferrari_smoke(&osprites.jump_table[OSprites::SPRITE_SMOKE2]); // Do Right Hand Smoke } break; } osprites.sprite_copy(); // Motor Code if (tick_frame) { if (game_state == GS_CALIBRATE_MOTOR) { if (outputs->calibrate_motor(packet->ai1, packet->mci, 0)) { video->enabled = false; video->clear_text_ram(); oroad.horizon_set = 0; boot(); } } else { if (config.controls.haptic && config.controls.analog) outputs->tick(OOutputs::MODE_FFEEDBACK, oinputs.input_steering); else if (config.cannonboard.enabled) outputs->tick(OOutputs::MODE_CABINET, packet->ai1, config.cannonboard.cabinet); } } if (config.cannonboard.enabled && config.cannonboard.debug) { uint16_t x = 1; uint16_t y = 5; ohud.blit_text_new(x, y, "AI0 ACCEL"); ohud.blit_text_new(x + 10, y, Utils::to_hex_string(packet->ai0).c_str(), OHud::PINK); x += 13; ohud.blit_text_new(x, y, "AI2 WHEEL"); ohud.blit_text_new(x + 10, y, Utils::to_hex_string(packet->ai2).c_str(), OHud::PINK); x += 13; ohud.blit_text_new(x, y, "AI3 BRAKE"); ohud.blit_text_new(x + 10, y, Utils::to_hex_string(packet->ai3).c_str(), OHud::PINK); x += 13; x = 1; y = 6; ohud.blit_text_new(x, y, "AI1 MOTOR"); ohud.blit_text_new(x + 10, y, Utils::to_hex_string(packet->ai1).c_str(), OHud::PINK); x += 13; ohud.blit_text_new(x, y, "MC OUT"); ohud.blit_text_new(x + 10, y, Utils::to_hex_string(outputs->hw_motor_control).c_str(), OHud::PINK); x += 13; ohud.blit_text_new(x, y, "MC IN"); ohud.blit_text_new(x + 10, y, Utils::to_hex_string(packet->mci).c_str(), OHud::PINK); x = 1; y = 7; ohud.blit_text_new(x, y, "DI1"); ohud.blit_text_new(x + 10, y, Utils::to_hex_string(packet->di1).c_str(), OHud::PINK); x += 13; ohud.blit_text_new(x, y, "DI2"); ohud.blit_text_new(x + 10, y, Utils::to_hex_string(packet->di2).c_str(), OHud::PINK); x += 13; ohud.blit_text_new(x, y, "DIG OUT"); ohud.blit_text_new(x + 10, y, Utils::to_hex_string(outputs->dig_out).c_str(), OHud::PINK); x += 13; } }
void Outrun::jump_table() { if (tick_frame) { main_switch(); // Address #1 (0xB128) - Main Switch oinputs.adjust_inputs(); // Address #2 (0x74D8) - Adjust Analogue Inputs } switch (game_state) { // ---------------------------------------------------------------------------------------- // Couse Map Specific Code // ---------------------------------------------------------------------------------------- case GS_MAP: omap.tick(); break; case GS_MUSIC: osprites.tick(); olevelobjs.do_sprite_routine(); if (!outrun.tick_frame) { //omusic.check_start(); omusic.blit(); } break; // ---------------------------------------------------------------------------------------- // Best OutRunners Entry (EditJumpTable3 Entries) // ---------------------------------------------------------------------------------------- case GS_INIT_BEST2: case GS_BEST2: osprites.tick(); olevelobjs.do_sprite_routine(); if (!outrun.tick_frame) { // Check for start button if credits are remaining and set state to Music Selection if (ostats.credits && input.has_pressed(Input::START)) game_state = GS_INIT_MUSIC; } break; case GS_REINIT: break; // ---------------------------------------------------------------------------------------- // Core Game Engine Routines // ---------------------------------------------------------------------------------------- case GS_LOGO: if (!cannonball::tick_frame) ologo.blit(); default: if (tick_frame) osprites.tick(); // Address #3 Jump_SetupSprites olevelobjs.do_sprite_routine(); // replaces calling each sprite individually if (!config.engine.disable_traffic) otraffic.tick(); // Spawn & Tick Traffic if (tick_frame) oinitengine.init_crash_bonus(); // Initalize crash sequence or bonus code oferrari.tick(); if (oferrari.state != OFerrari::FERRARI_END_SEQ) { oanimseq.flag_seq(); ocrash.tick(); osmoke.draw_ferrari_smoke(&osprites.jump_table[OSprites::SPRITE_SMOKE1]); // Do Left Hand Smoke oferrari.draw_shadow(); // (0xF1A2) - Draw Ferrari Shadow osmoke.draw_ferrari_smoke(&osprites.jump_table[OSprites::SPRITE_SMOKE2]); // Do Right Hand Smoke } else { osmoke.draw_ferrari_smoke(&osprites.jump_table[OSprites::SPRITE_SMOKE1]); // Do Left Hand Smoke osmoke.draw_ferrari_smoke(&osprites.jump_table[OSprites::SPRITE_SMOKE2]); // Do Right Hand Smoke } break; } osprites.sprite_copy(); if (tick_frame && config.controls.haptic && config.controls.analog) outputs->tick(); }