void huxley_mode_init (void) { huxley_suspend = FALSE; ball_search_monitor_stop (); flag_off (FLAG_IS_HUXLEY_ENABLED); task_kill_gid(GID_HUXLEY_REMINDER); huxley_mode_shots_made = 0; score_zero(huxley_mode_score); score_zero(huxley_mode_last_score); score_zero(huxley_mode_next_score); score(HUXLEY_START_SCORE); score_add(huxley_mode_score, score_table[HUXLEY_START_SCORE]); score_add(huxley_mode_next_score, score_table[HUXLEY_MODE_HIT_SCORE]); huxley_counter = 0; //reset for next time deff_start_sync (DEFF_HUXLEY_START_EFFECT);//under /kernel/deff.c ballsave_add_time (system_config.mode_ballsave); leff_start(LEFF_EYEBALL); sol_request_async (SOL_EJECT); //request to fire the eject sol task_sleep (TIME_300MS); set_normal_eject_killed_status (FALSE); ball_search_monitor_start (); set_dm_mode(HUXLEY_COMPLETED); //for BONUS }//end of function
void superjets_mode_init (void) { //the claw mode can expire on its own and since it is a lower priority it will not display // callset_invoke (end_claw_mode); // this seemed to cause occasional crashes clawmagnet_off (); global_flag_off(GLOBAL_FLAG_IS_BALL_ON_CLAW); flipper_enable (); //reset counter if first time run, otherwise do not - player may restart acmag while currently running sound_start (ST_SPEECH, SPCH_SUPERJETS_ACTIVATED, SL_4S, PRI_GAME_QUICK3); ballsave_add_time (system_config.mode_ballsave); //flash lamp for a time lamp_tristate_flash(LM_CLAW_SUPER_JETS); task_sleep(TIME_500MS); lamp_tristate_on(LM_CLAW_SUPER_JETS); if (get_dm_mode(SJETS_COMPLETED)) { score_add(superjets_mode_next_score, score_table[SUPERJETS_HIT_SCORE2]); score_add(superjets_mode_score, score_table[SUPERJETS_START_SCORE2]); score(SUPERJETS_START_SCORE2); } else { superjets_mode_shots_made = 0; score_zero(superjets_mode_score); score_zero(superjets_mode_next_score); score_add(superjets_mode_next_score, score_table[SUPERJETS_HIT_SCORE1]); score_add(superjets_mode_score, score_table[SUPERJETS_START_SCORE1]); score(SUPERJETS_START_SCORE1); } }//end of function
void huxley_mode_init (void) { ball_search_monitor_stop (); task_kill_gid(GID_HUXLEY_REMINDER); flag_on (FLAG_IS_HUXLEY_RUNNING); huxley_mode_shots_made = 0; ++huxley_modes_achieved; score_zero(huxley_mode_score); score_zero(huxley_mode_last_score); score_zero(huxley_mode_next_score); score(HUXLEY_START_SCORE); score_add(huxley_mode_score, score_table[HUXLEY_START_SCORE]); score_add(huxley_mode_next_score, score_table[HUXLEY_MODE_HIT_SCORE]); huxley_goal += (HUXLEY_EASY_GOAL * 2); flag_off(FLAG_IS_HUXLEY_ENABLED); deff_start_sync (DEFF_HUXLEY_START_EFFECT);//under /kernel/deff.c ballsave_add_time (5); leff_start(LEFF_HUXLEY); sol_request_async (SOL_EJECT); //request to fire the eject sol task_sleep (TIME_300MS); flag_off(FLAG_KILL_NORMAL_EJECT); ball_search_monitor_start (); }//end of function
void prison_break_mode_init (void) { prison_break_suspend = FALSE; //the claw mode can expire on its own and since it is a lower priority it will not display //callset_invoke (end_claw_mode); // this seemed to cause occasional crashes clawmagnet_off (); global_flag_off(GLOBAL_FLAG_IS_BALL_ON_CLAW); flipper_enable (); ballsave_add_time (system_config.mode_ballsave); //reset counter if first time run, otherwise do not - player may restart prison_break while currently running if (! get_dm_mode(BREAKOUT_COMPLETED) ) { prison_break_mode_shots_made = 0; score_zero(prison_break_mode_score); score_zero(prison_break_mode_last_score); } sound_start (ST_SPEECH, SPCH_CRYO_PRISON_BREAKOUT, SL_4S, PRI_GAME_QUICK3); //flash lamp for a time lamp_tristate_flash(LM_CLAW_PRISON_BREAK); task_sleep(TIME_500MS); lamp_tristate_on(LM_CLAW_PRISON_BREAK); score_add(prison_break_mode_last_score, score_table[PRIS_BREAK_HIT_SCORE]); score_zero(prison_break_mode_next_score); if (get_dm_mode(BREAKOUT_COMPLETED)) { score(PRIS_BREAK_START_SCORE2); score_add(prison_break_mode_score, score_table[PRIS_BREAK_START_SCORE2]); } else { score(PRIS_BREAK_START_SCORE1); score_add(prison_break_mode_score, score_table[PRIS_BREAK_START_SCORE1]); } set_dm_mode(BREAKOUT_COMPLETED); //for next time }//end of function
CALLSET_ENTRY (sharpe, start_game) { sharpe_lives = 3; sharpe_timer = 10; sharpe_level = 0; score_zero (sharpe_score); }
void car_chase_player_reset (void) { car_chase_reset(); car_chase_modes_achieved = 0; car_chase_mode_shots_made = 0; score_zero(car_chase_mode_score_total_score); carchase_MessageCounter = 0; }//end of function
CALLSET_ENTRY (wasteland, start_player) { score_zero(wasteland_score); wasteland_jackpot_shots_made = 0; //these need to be zeroed in before we enter the mode so bonus doesn't fake trigger wasteland_start_music = FALSE; is_wasteland_running = FALSE; wasteland_ballsave = FALSE; }
void clock_millions_mode_init (void) { clock_mode_hits = 0; score_zero (clock_mode_score); lamp_tristate_flash (LM_CLOCK_MILLIONS); tz_clock_start_forward (); }
/** * Format a replay score adjustment. * The adjustment system only allows for at most 256 different settings per * adjustment. For replay scores, 0 means the replay level is OFF, and * 1-255 refer to specific replay values. */ void replay_score_render (U8 val) { if (val == 0) { sprintf ("OFF"); } else { score_t score; score_zero (score); replay_code_to_score (score, val); sprintf_score (score); } }
CALLSET_ENTRY (tnf, tnf_start) { flipper_disable (); tnf_buttons_pressed = 1; score_zero (tnf_score); set_tnf_target (); leff_start (LEFF_BONUS); music_request (MUS_POWERFIELD, PRI_GAME_VMODE); deff_start_sync (DEFF_TNF); task_sleep_sec (1); while (deff_get_active () == DEFF_TNF) task_sleep (TIME_500MS); leff_stop (LEFF_BONUS); callset_invoke (tnf_end); }
/** * Format a replay score adjustment. * The adjustment system only allows for at most 256 different settings per * adjustment. For replay scores, 0 means the replay level is OFF, and * 1-255 refer to specific replay values. * * The machine should define a function that returns the score associated * with a certain level, and then define MACHINE_REPLAY_CODE_TO_SCORE * as an alias to that function. It should be placed in the __machine__ * region. * * You should also define MACHINE_REPLAY_SCORE_CHOICES as the number of * valid, non-zero replay levels that are acceptable as input. */ void replay_score_render (U8 val) { if (val == 0) { sprintf ("OFF"); return; } #ifdef MACHINE_REPLAY_CODE_TO_SCORE extern __machine__ void MACHINE_REPLAY_CODE_TO_SCORE (score_t, U8); score_t score; score_zero (score); MACHINE_REPLAY_CODE_TO_SCORE (score, val); sprintf_score (score); #else #warning "machine does not define replay levels" sprintf ("CODE %d", val); #endif }
void huxley_player_reset (void) { if (IN_TEST) huxley_goal = 1; else huxley_goal = HUXLEY_EASY_GOAL; flag_off(FLAG_IS_HUXLEY_ENABLED); flag_off(FLAG_IS_HUXLEY_RUNNING); huxley_reset(); huxley_counter = 0; huxley_modes_achieved = 0; huxley_mode_shots_made = 0; score_zero(huxley_mode_score_total_score); task_kill_gid(GID_HUXLEY_REMINDER); #ifdef CONFIG_DIFFICULTY_LEVEL if (system_config.difficulty == EASY) huxley_goal = HUXLEY_EASY_GOAL; else huxley_goal = HUXLEY_HARD_GOAL; #endif }//end of function
void car_chase_mode_init (void) { car_chase_mode_shots_made = 0; flag_on (FLAG_IS_CARCHASE_MODE_RUNNING); ballsave_add_time (10); ++car_chase_modes_achieved; diverter_stop();//defined in divhold2.ct task_kill_gid (GID_CR_LIGHTS); carchase_mode_on(); //at ramps.c serve_ball_auto(); //add one ball to the playfield - NOT a multiball since doesn't change global ball count sound_start (ST_SPEECH, SPCH_WUSS_SPARTAN, SL_4S, PRI_GAME_QUICK5); task_sleep_sec (2); sound_start (ST_SPEECH, SPCH_EXCUSE_ME, SL_4S, PRI_GAME_QUICK5); task_sleep_sec (1); sound_start (ST_SPEECH, SPCH_BETWEEN_YOU_N_ME, SL_4S, PRI_GAME_QUICK5); //flash lamp for a time score_zero(car_chase_mode_score); lamp_tristate_off (LM_CLAW_READY); }//end of function
/**************************************************************************** * initialize and exit ***************************************************************************/ CALLSET_ENTRY (huxley, start_player) { if (DM_IN_CAB_TEST) huxley_goal = 1; else huxley_goal = HUXLEY_EASY_GOAL; huxley_counter = 0; huxley_mode_shots_made = 0; score_zero(huxley_mode_score_total_score); task_kill_gid(GID_HUXLEY_REMINDER); #ifdef CONFIG_DIFFICULTY_LEVEL huxley_goal = system_config.num2huxley; #endif if (huxley_goal == 0) flag_on(FLAG_IS_HUXLEY_ENABLED); else flag_off(FLAG_IS_HUXLEY_ENABLED); //for testing // huxley_increment(); huxley_suspend = FALSE; }//end of function
void car_chase_ramp_made(void) { ++car_chase_mode_shots_made; deff_start (DEFF_CAR_CHASE_HIT_EFFECT); score_zero(car_chase_mode_temp_score); switch (car_chase_modes_achieved ){ case 1: score (CARCHASE_HIT_SCORE_1); score_add(car_chase_mode_temp_score, score_table[CARCHASE_HIT_SCORE_1]); break; case 2: //2nd time we are in car_chase - score differently score (CARCHASE_HIT_SCORE_2); score_add(car_chase_mode_temp_score, score_table[CARCHASE_HIT_SCORE_2]); break; default: //all cases past 3rd time we are in car_chase case 3: //3rd time we are in car_chase - score differently score (CARCHASE_HIT_SCORE_3); score_add(car_chase_mode_temp_score, score_table[CARCHASE_HIT_SCORE_3]); break; }//end of switch score_add (car_chase_mode_score, car_chase_mode_temp_score); score_add (car_chase_mode_score_total_score, car_chase_mode_temp_score); }//end of function
CALLSET_ENTRY (superjets, start_player) { superjets_mode_shots_made = 0; //these need to be zeroed in before we enter the mode so bonus doesn't fake trigger score_zero(superjets_mode_score_total_score); superjets_goal = SUPERJETS_EASY_GOAL; }//end of function
void prison_break_player_reset (void) { prison_break_mode_shots_made = 0; score_zero(prison_break_mode_score_total_score); prison_break_suspend = FALSE; }//end of function
CALLSET_ENTRY (eject, dev_eyeball_eject_enter) { //HUXLEY MADE if ( !flag_test(FLAG_BACK_IN_THE_FRIDGE_RUNNING) && task_kill_gid(GID_LEFT_INLANE_MADE) ) { // flag_on(FLAG_KILL_NORMAL_EJECT); huxley_made(); return; // task_sleep (TIME_300MS);//give time for huxley to catch up } //START VIDEO MODE else if ( !flag_test(FLAG_BACK_IN_THE_FRIDGE_RUNNING) && !flag_test(FLAG_IS_FORTRESS_MB_RUNNING) && !flag_test(FLAG_IS_MUSEUM_MB_RUNNING) && !flag_test(FLAG_IS_CRYOPRISON_MB_RUNNING) && !flag_test(FLAG_IS_WASTELAND_MB_RUNNING) && !flag_test(FLAG_IS_DEMOTIME_RUNNING) && flag_test (FLAG_VIDEO_MODE_ENABLED) ) { // flag_on(FLAG_KILL_NORMAL_EJECT); start_video_mode(3); sound_start (ST_ANY, SPCH_PLAYER_TWO, SL_1S, PRI_GAME_QUICK5); task_sleep (TIME_500MS); task_sleep (TIME_500MS); task_sleep (TIME_500MS); task_sleep (TIME_500MS); combo_rehit_check (); //check to see if enough combos to relight video mode sol_request (SOL_EJECT); //request to fire the eject sol ball_search_monitor_start (); // return; task_sleep (TIME_300MS); }//end of start video mode //NORMAL RETINA SCAN else //if (!flag_test(FLAG_KILL_NORMAL_EJECT) ) { leff_start (LEFF_EJECT); sound_start (ST_SAMPLE, RETINA_SCAN_LONG, SL_4S, PRI_GAME_QUICK1); score (EJECT_SCORE); //100k per jet hit here if (jet_shots_made > 0) { score_zero (temp_score);//zero out temp score score_add (temp_score, score_table[SC_100K]);//multiply 100K by jet count score_mul (temp_score, jet_shots_made);//multiply 100K by jet count score_long (temp_score); //add temp score to player's score }//end of if if (retina_scan_multiplier == 2) { sound_start(ST_SPEECH, SPCH_DOUBLE_RETINA_SCAN, SL_4S, PRI_GAME_QUICK5); score (EJECT_SCORE); score_long (temp_score); //add temp score to player's score } deff_start (DEFF_EJECT_EFFECT); task_sleep_sec (1); sol_request (SOL_EJECT); //request to fire the eject sol }//end of else !flag_test(FLAG_KILL_NORMAL_EJECT) }//end of function
CALLSET_ENTRY (eject, dev_eyeball_eject_enter) { if (!in_game) { sol_request (SOL_EJECT); task_sleep (TIME_1S); } else { //HUXLEY MADE if ( !get_back_in_the_fridge_running() && !get_back_in_the_fridge_ending() && task_kill_gid(GID_LEFT_INLANE_MADE) && !in_tilt) { is_normal_eject_killed = TRUE; huxley_made(); return; }//end of huxley made //START VIDEO MODE else if ( (system_config.disable_kaboom == NO || system_config.disable_simon_says == NO || system_config.disable_shooter == NO) && flag_test (FLAG_VIDEO_MODE_ENABLED) && !in_tilt && !get_back_in_the_fridge_running() && !get_back_in_the_fridge_ending() && !get_fortress_running () && !get_museum_running () && !get_cryoprison_running () && !get_wasteland_running () && !get_demotime_running () && !is_frenzy_running () ) { //this is here since starting frenzy dumps ball into eject hole switch (get_next_video_mode() ) { case 0: start_kaboom(); break; case 1: start_simon_says(); break; case 2: start_shooter(); break; }//end of switch combo_rehit_check (); //check to see if enough combos to relight video mode //we just returned from video mode so flash the lights before you fire the coil leff_start (LEFF_EJECT); task_sleep (TIME_500MS); sol_request (SOL_EJECT); //request to fire the eject sol task_create_gid1 (GID_EJECT_1, eject_switch_task); ball_search_monitor_start (); task_sleep (TIME_300MS); }//end of start video mode //NORMAL RETINA SCAN else if (!is_normal_eject_killed ) { if (!in_tilt) { score (EJECT_SCORE); //100k per jet hit here if (jet_shots_made > 0) { score_zero (temp_score);//zero out temp score score_add (temp_score, score_table[SC_100K]);//multiply 100K by jet count score_mul (temp_score, jet_shots_made);//multiply 100K by jet count score_long (temp_score); //add temp score to player's score }//end of if if (retina_scan_multiplier == 2) { sound_start(ST_SPEECH, SPCH_DOUBLE_RETINA_SCAN, SL_4S, PRI_GAME_QUICK4); score (EJECT_SCORE); score_long (temp_score); //add temp score to player's score } leff_start (LEFF_EJECT); sound_start (ST_SAMPLE, RETINA_SCAN_LONG, SL_4S, PRI_GAME_QUICK1); deff_start (DEFF_EJECT_EFFECT); task_sleep (TIME_300MS); }//end of not in tilt sol_request (SOL_EJECT); //request to fire the eject sol task_create_gid1 (GID_EJECT_1, eject_switch_task);//this is a 2 second ball save timer for eject coil }//end of else !is_normal_eject_killed = FALSE }//end of else in game }//end of function
CALLSET_ENTRY (bop_spinner, start_ball) { score_zero (spinner_total); }
CALLSET_ENTRY (jets, start_ball) { jets_sound_index = 0; jets_hit = 0; score_zero (total_jets_score); }
void jets_mode_init (void) { score_zero (jets_frenzy_total); lamplist_apply (LAMPLIST_JETS_ENTER, lamp_off); leff_start (LEFF_JETS_COMPLETED); }
/**************************************************************************** * initialize and exit ***************************************************************************/ void cryoprison_player_reset (void) { flag_off(FLAG_IS_CRYOPRISON_MB_RUNNING); score_zero(cryoprison_score); cryoprison_jackpot_shots_made = 0; //these need to be zeroed in before we enter the mode so bonus doesn't fake trigger cryoprison_start_music = FALSE; }//end of function
CALLSET_ENTRY (fortress, start_player) { score_zero(fortress_score); fortress_jackpot_shots_made = 0; //these need to be zeroed in before we enter the mode so bonus doesn't fake trigger fortress_ballsave = FALSE; }//end of function
void super_jackpot_value_deff (void) { seg_alloc_clean (); seg_write_row_center (0, "SUPER JACKPOT"); seg_write_row_center (1, "VALUE"); seg_show (); task_sleep_sec (1); if (total_body_parts > 0) { score_zero (super_jackpot_calc); score_add (super_jackpot_calc, score_table[SC_50K]); score_mul (super_jackpot_calc, total_body_parts); seg_alloc_clean (); psprintf ("1 BODY PART", "%d BODY PARTS", total_body_parts); seg_write_row_center (0, sprintf_buffer); sprintf_score (super_jackpot_calc); seg_write_row_center (1, sprintf_buffer); seg_show (); task_sleep_sec (1); } score_zero (super_jackpot_calc); switch (mpf_level) { case 0: score_add (super_jackpot_calc, score_table[SC_100K]); break; case 1: score_add (super_jackpot_calc, score_table[SC_200K]); break; case 2: score_add (super_jackpot_calc, score_table[SC_300K]); break; case 3: score_add (super_jackpot_calc, score_table[SC_500K]); break; default: break; } seg_alloc_clean (); sprintf ("MPF LEVEL"); seg_write_row_center (0, sprintf_buffer); sprintf_score (super_jackpot_calc); seg_write_row_center (1, sprintf_buffer); seg_show (); task_sleep_sec (1); score_zero (super_jackpot_calc); switch (rightramp_level) { case 0: score_add (super_jackpot_calc, score_table[SC_50K]); break; case 1: score_add (super_jackpot_calc, score_table[SC_100K]); break; case 2: score_add (super_jackpot_calc, score_table[SC_500K]); break; case 3: score_add (super_jackpot_calc, score_table[SC_1M]); break; default: break; } seg_alloc_clean (); sprintf ("RIGHT RAMP"); seg_write_row_center (0, sprintf_buffer); sprintf_score (super_jackpot_calc); seg_write_row_center (1, sprintf_buffer); seg_show (); task_sleep_sec (1); score_zero (super_jackpot_calc); if (score_compare (total_jets_score, score_table[SC_500K]) >= 0) score_add (super_jackpot_calc, score_table[SC_500K]); else if (score_compare (total_jets_score, score_table[SC_100K]) >= 0) score_add (super_jackpot_calc, score_table[SC_100K]); else if (score_compare (total_jets_score, score_table[SC_50K]) >= 0) score_add (super_jackpot_calc, score_table[SC_50K]); else if (score_compare (total_jets_score, score_table[SC_25K]) >= 0) score_add (super_jackpot_calc, score_table[SC_25K]); seg_alloc_clean (); sprintf ("JETS"); seg_write_row_center (0, sprintf_buffer); sprintf_score (super_jackpot_calc); seg_write_row_center (1, sprintf_buffer); seg_show (); task_sleep_sec (1); score_zero (super_jackpot_calc); switch (left_loop_level) { case 0: score_add (super_jackpot_calc, score_table[SC_25K]); break; case 1: score_add (super_jackpot_calc, score_table[SC_50K]); break; case 2: score_add (super_jackpot_calc, score_table[SC_100K]); break; case 3: score_add (super_jackpot_calc, score_table[SC_500K]); break; default: break; } seg_alloc_clean (); sprintf ("LEFT LOOP"); seg_write_row_center (0, sprintf_buffer); sprintf_score (super_jackpot_calc); seg_write_row_center (1, sprintf_buffer); seg_show (); task_sleep_sec (1); score_zero (super_jackpot_calc); switch (right_loop_level) { case 0: score_add (super_jackpot_calc, score_table[SC_25K]); break; case 1: score_add (super_jackpot_calc, score_table[SC_50K]); break; case 2: score_add (super_jackpot_calc, score_table[SC_100K]); break; case 3: score_add (super_jackpot_calc, score_table[SC_500K]); break; default: break; } seg_alloc_clean (); sprintf ("RIGHT LOOP"); seg_write_row_center (0, sprintf_buffer); sprintf_score (super_jackpot_calc); seg_write_row_center (1, sprintf_buffer); seg_show (); task_sleep_sec (1); deff_exit (); }
void tsm_mode_init (void) { task_create_gid (GID_JETS_ACTIVE_TASK, jets_active_task); score_zero (tsm_mode_total); init_all_dollars (); }
static void calculate_super_jackpot_value (void) { score_zero (super_jackpot_value); if (total_body_parts > 0) { score_add (super_jackpot_value, score_table[SC_50K]); score_mul (super_jackpot_value, total_body_parts); } switch (mpf_level) { case 0: score_add (super_jackpot_value, score_table[SC_100K]); break; case 1: score_add (super_jackpot_value, score_table[SC_200K]); break; case 2: score_add (super_jackpot_value, score_table[SC_300K]); break; case 3: score_add (super_jackpot_value, score_table[SC_500K]); break; default: break; } switch (rightramp_level) { case 0: score_add (super_jackpot_value, score_table[SC_50K]); break; case 1: score_add (super_jackpot_value, score_table[SC_100K]); break; case 2: score_add (super_jackpot_value, score_table[SC_500K]); break; case 3: score_add (super_jackpot_value, score_table[SC_1M]); break; default: break; } if (score_compare (total_jets_score, score_table[SC_500K]) >= 0) score_add (super_jackpot_value, score_table[SC_500K]); else if (score_compare (total_jets_score, score_table[SC_100K]) >= 0) score_add (super_jackpot_value, score_table[SC_100K]); else if (score_compare (total_jets_score, score_table[SC_50K]) >= 0) score_add (super_jackpot_value, score_table[SC_50K]); else if (score_compare (total_jets_score, score_table[SC_25K]) >= 0) score_add (super_jackpot_value, score_table[SC_25K]); switch (left_loop_level) { case 0: score_add (super_jackpot_value, score_table[SC_25K]); break; case 1: score_add (super_jackpot_value, score_table[SC_50K]); break; case 2: score_add (super_jackpot_value, score_table[SC_100K]); break; case 3: score_add (super_jackpot_value, score_table[SC_500K]); break; default: break; } switch (right_loop_level) { case 0: score_add (super_jackpot_value, score_table[SC_25K]); break; case 1: score_add (super_jackpot_value, score_table[SC_50K]); break; case 2: score_add (super_jackpot_value, score_table[SC_100K]); break; case 3: score_add (super_jackpot_value, score_table[SC_500K]); break; default: break; } }