Beispiel #1
0
CALLSET_ENTRY (jet, sw_jet)
{
	/* Hack for when mpf_exit switch breaks */
	if (!multi_ball_play () && mpf_timer > 0)
		callset_invoke (sw_mpf_exit);
	
	if (global_flag_test(GLOBAL_FLAG_POWERBALL_IN_PLAY))
		jets_scored += 2;
	else
		jets_scored++;
	
	if (jets_scored >= jets_for_bonus)
	{	
		bounded_increment (jets_bonus_level, 50);
		jets_for_bonus += 5;
		award_unlit_shot (SW_BOTTOM_JET);
		sound_send (SND_GLASS_BREAKS);
		task_sleep (TIME_500MS);
		/* jetscore is used rather than score_deff_get 
		 * because it's likely another score would of
		 * happened */
		if (jets_bonus_level < 3)
		{
			score (SC_1M);
			jetscore = 1;
		}
		else if (jets_bonus_level < 5)
		{
			score (SC_5M);
			jetscore = 5;
		}
		else if (jets_bonus_level < 7)
		{
			score (SC_10M);
			jetscore = 10;
		}
		if (!timer_find_gid (GID_HITCHHIKER))
			deff_start (DEFF_JETS_LEVEL_UP);
	}

	if (timed_mode_running_p (&tsm_mode))
	{
		score (SC_500K);
		score_add (tsm_mode_total, score_table[SC_500K]);
	}
	else
	{	
		score (SC_150K);
		/* Stop deff from restarting whilst we
		 * are showing the level up deff
		 * or when the hitch anim is running */
		if ((jets_scored <= jets_for_bonus) 
			&& (!timer_find_gid (GID_HITCHHIKER)))
			deff_restart (DEFF_JETS_HIT);
	}
	
	task_create_gid1 (GID_JET_SOUND, sw_jet_sound);
}
Beispiel #2
0
/*	Start a multiball mode */
void mb_mode_start (struct mb_mode_ops *ops)
{
	if (mb_mode_running_p (ops))
		return;
	task_create_gid1 (ops->gid_running, ops->active_task);
	if (ops->deff_starting)
		deff_start (ops->deff_starting);
	mb_mode_update (ops, MB_ACTIVE);
}
Beispiel #3
0
/*	Restart a multiball mode that is in its grace period */
void mb_mode_restart (struct mb_mode_ops *ops)
{
	if (!mb_mode_in_grace_p (ops))
		return;
	task_create_gid1 (ops->gid_running, ops->active_task);
	task_kill_gid (ops->gid_in_grace);
	deff_stop (ops->deff_ending);
	mb_mode_update (ops, MB_ACTIVE);
}
Beispiel #4
0
CALLSET_ENTRY(pitstop_award, dev_pitstop_popper_enter) {
    if (multi_ball_play()) {
        return;
    }

    task_kill_gid(GID_PITSTOP_AWARD_TASK);
    task_create_gid1(GID_PITSTOP_AWARD_TASK, pitstop_award_task);

}
Beispiel #5
0
void skillshot_rollover_enable( void ) {
	current_rollover = SW_MIDDLE_ROLLOVER;
	global_flag_on(GLOBAL_FLAG_SKILLSHOT_ROLLOVER_ENABLED);
	flag_off (FLAG_LOOP_GATE_OPENED);

	// kill any existing task, just to make sure
	task_kill_gid (GID_SKILLSHOT_ROLLOVER_TIMER);
	task_create_gid1 (GID_SKILLSHOT_ROLLOVER_TIMER, skillshot_rollover_timer);
}
Beispiel #6
0
void rudy_eye_change (U8 flags)
{
	if (flag_test (FLAG_MULTIBALL_LIT))
		flags = EYELID_CLOSED;

	if (flags != rudy_eyes)
	{
		rudy_eyes = flags;
		task_create_gid1 (GID_RUDY_UPDATE, rudy_eye_update);
	}
}
Beispiel #7
0
CALLSET_ENTRY (sssmb, sw_shooter)
{
	if (global_flag_test (GLOBAL_FLAG_SSSMB_RUNNING)
		&& timer_find_gid (GID_SSSMB_DIVERT_DEBOUNCE))
	{
		extern U8 skill_switch_reached;
		/* It will always reach at least the first switch */
		skill_switch_reached = 1;
		task_create_gid1 (GID_SSSMB_JACKPOT_READY, sssmb_jackpot_ready_task);
	}
}
Beispiel #8
0
CALLSET_ENTRY (shot, sw_right_outer_loop)
{
	if (!single_ball_play ())
		return;

	if (task_kill_gid (GID_LEFT_ORBIT_MADE)) {
		callset_invoke (left_orbit_shot);
		return;
	}

	task_create_gid1 (GID_RIGHT_ORBIT_MADE, right_orbit_task);
}
Beispiel #9
0
void dragrace_start( U8 starter_gid ) {
	if (global_flag_test(GLOBAL_FLAG_DRAGRACE_IN_PROGRESS)) {
		return;
	}
	dragrace_starter_gid = starter_gid;
	global_flag_on(GLOBAL_FLAG_DRAGRACE_IN_PROGRESS);
	flipper_disable();
	ball_search_monitor_stop();
	racetrack_car_return();
	task_kill_gid(GID_DRAGRACE_TASK);
	task_create_gid1(GID_DRAGRACE_TASK, dragrace_task);
}
Beispiel #10
0
CALLSET_ENTRY (sssmb, sw_shooter)
{
	if (global_flag_test (GLOBAL_FLAG_SSSMB_RUNNING)
		&& timer_find_gid (GID_SSSMB_DIVERT_DEBOUNCE))
	{
		extern U8 skill_switch_reached;
		/* It will always reach at least the fist switch */
		skill_switch_reached = 1;
		/* TODO: handle case where red jackpot switch is tripped but
		ball falls back to plunger lane */
		task_create_gid1 (GID_SSSMB_JACKPOT_READY, sssmb_jackpot_ready_task);
	}
}
Beispiel #11
0
/* This function should be called by a mode driver when the
	'single_ball_play' event occurs.  If the mode is active,
	this transitions it into its grace period.

	This function can also be called to implement 1-ball
	multiball.  If a machine only has 1 ball installed, then
	attempts to add balls for multiball play will all fail,
	but the mode will be started OK.  The rules should define
	some criteria for when this "fake multiball" should exit.
	When this occurs, you can check for the number of balls
	in play and if it is 1, then call mb_mode_single_ball()
	to stop the mode.  Note that it still gets a grace period! */
void mb_mode_single_ball (struct mb_mode_ops *ops)
{
	if (task_find_gid (ops->gid_running))
	{
		task_pid_t tp;
		struct mb_mode_task_config *cfg;

		task_kill_gid (ops->gid_running);

		tp = task_create_gid1 (ops->gid_in_grace, mb_mode_grace_task);
		cfg = task_init_class_data (tp, struct mb_mode_task_config);
		cfg->ops = ops;

		mb_mode_update (ops, MB_IN_GRACE);
	}
Beispiel #12
0
void shooter_update (void)
{
#ifdef MACHINE_SHOOTER_SWITCH
    /* A ball seen on the shooter switch means it is definitely there.
     * If not seen, it might be out of the plunger lane, or it may just be
     * "on its way up".  During that interval, still consider the ball
     * at the plunger, so delay clearing the flag.
     */
    if (switch_poll_logical (MACHINE_SHOOTER_SWITCH))
    {
        task_kill_gid (GID_SHOOTER_CLEAR);
        global_flag_on (GLOBAL_FLAG_BALL_AT_PLUNGER);
    }
    else
    {
        task_create_gid1 (GID_SHOOTER_CLEAR, shooter_clear_monitor);
    }
#endif
}
Beispiel #13
0
void fortress_jackpot_effect_deff(void) {
	U16 fno;

	if (DM_IN_DMD_TEST) {	if (++fortress_MessageCounter > 4) fortress_MessageCounter = 0;} //for testing
	else fortress_MessageCounter = random_scaled(5);
	dmd_alloc_pair_clean();
	task_create_gid1 (GID_FORTRESS_JACKPOT_SOUND, fortress_jackpot_sounds_task);

	switch (fortress_MessageCounter) {
		case 0:
			fortress_animation_display_effect (IMG_FORTRESS_D2_START, IMG_FORTRESS_D2_END);
			fortress_animation_display_effect (IMG_FORTRESS_D3_START, IMG_FORTRESS_D3_END);
			fortress_frame_with_words_display_steel_effect (IMG_FORTRESS_D3_END, DMD_MIDDLE_X - 10, DMD_BIG_CY_Bot, "JACKPOT");
			break;
		case 1:
			fortress_animation_display_effect (IMG_FORTRESS_D1_START, IMG_FORTRESS_D1_END);
			fortress_animation_display_effect (IMG_FORTRESS_D2_START, IMG_FORTRESS_D2_END);
			fortress_frame_with_words_display_steel_effect (IMG_FORTRESS_D2_END, DMD_MIDDLE_X - 10, DMD_BIG_CY_Bot, "JACKPOT");
			break;
		case 2:
			fortress_animation_display_effect (IMG_FORTRESS_D3_START, IMG_FORTRESS_D3_END);
			fortress_animation_display_effect (IMG_FORTRESS_D1_START, IMG_FORTRESS_D1_END);
			fortress_frame_with_words_display_steel_effect (IMG_FORTRESS_D4_END, DMD_MIDDLE_X - 10, DMD_BIG_CY_Bot, "JACKPOT");
			break;
		default:
		case 3: //4
			fortress_animation_display_effect (IMG_JACKPOT_START, IMG_JACKPOT_END);
			for (fno = IMG_JACKPOT_END; fno >= IMG_JACKPOT_START; fno -= 2) {
				dmd_alloc_pair ();
				frame_draw(fno);
				dmd_show2 ();
				task_sleep (TIME_100MS);
			}
			break;
		}//end of switch
	deff_exit ();
}//end of mode_effect_deff
Beispiel #14
0
void gumball_release (void)
{
	gumball_pending_releases++;
	if (!task_find_gid (GID_GUMBALL_RELEASE))
		task_create_gid1 (GID_GUMBALL_RELEASE, gumball_release_task);
}
Beispiel #15
0
void rules_deff (void)
{
	music_disable ();
	leff_stop_all ();

	rule_begin ();
	triac_disable (TRIAC_GI_MASK);
	rule_msg ("BACK TO THE ZONE", "", "HOW TO PLAY", "");
	rules_sleep_sec (5);
	rule_complete ();

	rule_begin ();
	rule_msg ("SPIRALAWARD", "EITHER LEFT INLANE STARTS", "A 3 SECOND TIMER", "");
	task_create_gid1 (GID_RULES_LEFF, rules_spiralaward_leff);
	rules_sleep_sec (6);
	rule_complete ();
	
	rule_begin ();
	rule_msg ("SPIRALAWARD", "SHOOT A RIGHT LOOP TO COLLECT", "A RANDOM AWARD" , "20M FOR COLLECTING ALL");
	task_create_gid1 (GID_RULES_LEFF, rules_spiralaward2_leff);
	rules_sleep_sec (5);
	rule_complete ();
	lamplist_apply (LAMPLIST_SPIRAL_AWARDS, lamp_flash_off);
	lamp_tristate_off (LM_RIGHT_SPIRAL);
	lamp_tristate_off (LM_RIGHT_POWERBALL);

	rule_begin ();
	rule_msg ("ROLLOVERS", "USE FLIPPER BUTTONS TO STEP", "INLANE LIGHTS", "1M FOR COLLECTING ALL");
	task_create_gid1 (GID_RULES_LEFF, rules_rollover_leff);
	rules_sleep_sec (9);
	rule_complete ();
	
	rule_begin ();
	rule_msg ("SUPER SKILL MB", "SHOOT LEFT RAMP", "AND HIT SKILL SHOT", "DURING MULTIBALL");
	task_create_gid1 (GID_RULES_LEFF, rules_sssmb_leff);
	rules_sleep_sec (9);
	rule_complete ();

	rule_begin ();
	rule_msg ("CHAOS MULTIBALL", "HIT CLOCK TO LIGHT JACKPOTS", "JACKPOTS MOVE", "AROUND THE TABLE");
	task_create_gid1 (GID_RULES_LEFF, rules_chaosmb_leff);
	rules_sleep_sec (9);
	rule_complete ();
	
	rule_begin ();
	rule_msg ("FASTLOCK", "SHOOT FAST LOOPS TO", "BUILD UP JACKPOTS", "HIT LOCK TO COLLECT");
	task_create_gid1 (GID_RULES_LEFF, rules_fastlock_leff);
	rules_sleep_sec (9);
	rule_complete ();

	rule_begin ();
	rule_msg ("HITCHHIKER", "SHOOT THE HOLE BETWEEN", "THE FLASHING LAMPS", "TO SCORE A HITCHHIKER");
	task_create_gid1 (GID_RULES_LEFF, rules_hitchhiker_leff);
	rules_sleep_sec (9);
	rule_complete ();

	
	rule_begin ();
	rule_msg ("POWERFIELD", "HITCHHIKERS UNLOCK", "THE RIGHT RAMP", "TO THE POWERFIELD");
	task_create_gid1 (GID_RULES_LEFF, rules_ramp_battle_leff);
	rules_sleep_sec (9);
	rule_complete ();

	rule_begin ();
	rule_msg ("POWERFIELD", "PRESS THE FLIPPER BUTTONS", "TO SHOOT THE BALL INTO", "THE TOP OF THE POWERFIELD");
	task_create_gid1 (GID_RULES_LEFF, rules_powerfield_leff);
	rules_sleep_sec (9);
	triac_disable (GI_POWERFIELD);
	rule_complete ();

	rule_begin ();
	rule_msg ("DOINK MODE", "SHOOT THE LEFT RAMP", "FROM THE RIGHT INLANE", "TO START DOINK MODE");
	task_create_gid1 (GID_RULES_LEFF, rules_doinks_leff);
	rules_sleep_sec (9);
	rule_msg ("DOINK MODE", "HIT THE FLIPPER BUTTONS", "WHILST THE BALL IS BEING HELD", "TO SCORE POINTS");
	rules_sleep_sec (9);
	rule_complete ();
	
	rule_begin ();
	rule_msg ("ODDCHANGE", "HITTING THE YELLOW", "TARGETS RANDOMLY BUILDS", "THE ODDCHANGE POT");
	task_create_gid1 (GID_RULES_LEFF, rules_oddchange1_leff);
	rules_sleep_sec (9);
	rule_complete ();

	rule_begin ();
	rule_msg ("ODDCHANGE", "HIT THE PIANO OR", "THE SLOT MACHINE WHEN", "UNLIT TO COLLECT");
	task_create_gid1 (GID_RULES_LEFF, rules_oddchange2_leff);
	rules_sleep_sec (9);
	rule_complete ();

	rule_begin ();
	rule_msg ("THANKS", "WE HOPE YOU", "ENJOY PLAYING","WWW.ODDCHANGE.COM/FREEWPC");
	rules_sleep_sec (4);
	rule_complete ();
	
	music_enable ();
	leff_start (LEFF_AMODE);
	deff_exit ();
}
Beispiel #16
0
void launch_ball (void)
{
	/* If ball launch is already in progress, do not restart it. */
	task_create_gid1 (GID_LAUNCH_BALL, launch_ball_task);
}
Beispiel #17
0
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
Beispiel #18
0
/****************************************************************************
 *
 * body
 *
 ***************************************************************************/
void huxley_increment (void) {
	if (++huxley_counter >= huxley_goal) {
		flag_on(FLAG_IS_HUXLEY_ENABLED);
		task_create_gid1 (GID_HUXLEY_REMINDER, huxley_reminder_task);
	}
}//end of function
Beispiel #19
0
/** Start a ball search in a separate task context. */
void ball_search_now (void)
{
	task_create_gid1 (GID_BALL_SEARCH_FORCE, ball_search_run_task);
}
Beispiel #20
0
void vpoker_enter (void)
{
	task_create_gid1 (GID_VPOKER, vpoker_running);
	while (task_find_gid (GID_VPOKER))
		task_sleep (TIME_133MS);
}
Beispiel #21
0
void rules_deff (void)
{
	music_disable ();
	music_set (MUS_RESTART_PLUNGER);
	sol_request (SOL_EYELIDS_OPEN);

	rule_begin ();
	rule_msg ("HOW TO PLAY", "FUNHOUSE");
	task_create_gid1 (GID_RULES_LEFF, rules_flasher_leff);
	rule_complete ();

	rule_begin ();
	rule_msg ("ALL TARGETS", "ADVANCE CLOCK");
	task_create_gid1 (GID_RULES_LEFF, rules_clock_leff);
	rule_complete ();

	rule_begin ();
	rule_msg ("REACH 11:30", "TO LIGHT LOCK");
	fh_clock_set (11, TIME_30_MIN);
	lamp_tristate_flash (LM_LOCK);
	rule_complete ();

	rule_begin ();
	rule_msg ("LOCK BALL 1", "FOR 11:45");
	fh_clock_set (11, TIME_45_MIN);
	lamp_tristate_flash (LM_LOCK);
	rule_complete ();

	rule_begin ();
	rule_msg ("LOCK BALL 2", " FOR 12:00");
	fh_clock_set (12, TIME_0_MIN);
	lamp_tristate_flash (LM_MILLION);
	sol_request (SOL_EYELIDS_CLOSED);
	rule_complete ();

	rule_begin ();
	rule_msg ("WAKE RUDY", "FOR MULTIBALL");
	sol_request (SOL_EYELIDS_OPEN);
	rule_complete ();

	rule_begin ();
	rule_msg ("SHOOT TRAP DOOR", "FOR JACKPOTS");
	lamp_tristate_flash (LM_MILLION_PLUS);
	rule_complete ();

	rule_begin ();
	rule_msg ("SHOOT MIRROR TO", "COLLECT AWARDS");
	lamplist_apply (LAMPLIST_MIRROR_AWARDS, lamp_flash_on);
	lamp_tristate_flash (LM_MIRROR_VALUE);
	rule_complete ();

	rule_begin ();
	rule_msg ("HIT RUDY TO", "RELIGHT MIRROR");
	lamplist_apply (LAMPLIST_MIRROR_AWARDS, lamp_on);
	rule_complete ();

	rule_begin ();
	rule_msg ("BLUE TARGETS", "LIGHT THE STEPS");
	lamplist_apply (LAMPLIST_STEP_TARGETS, lamp_flash_on);
	lamplist_apply (LAMPLIST_STEPS_AWARDS, lamp_flash_on);
	rule_complete ();

	rule_begin ();
	rule_msg ("SHOOT STEPS FROM", "LEFT PLUNGER");
	lamplist_apply (LAMPLIST_STEPS_AWARDS, lamp_flash_on);
	lamp_tristate_flash (LM_STEPS_GATE_OPEN);
	lamp_tristate_flash (LM_RAMP_STEPS);
	rule_complete ();

	rule_begin ();
	rule_msg ("SHOOT LOOPS TO", "COLLECT GANGWAYS");
	lamp_flash_on (LM_LEFT_GANGWAY);
	lamp_flash_on (LM_RIGHT_GANGWAY);
	lamplist_apply (LAMPLIST_GANGWAYS, lamp_on);
	rule_complete ();

	rule_begin ();
	rule_msg ("EXTRA BALLS LIT", "AT TOP LOOP");
	lamp_on (LM_EXTRA_BALL);
	lamp_flash_on (LM_MIRROR_EX_BALL);
	lamp_flash_on (LM_GANGWAY_EX_BALL);
	lamp_flash_on (LM_STEPS_EB);
	rule_complete ();

	rule_begin ();
	rule_msg ("PLAY", "FUNHOUSE");
	task_create_gid1 (GID_RULES_LEFF, rules_flasher_leff);
	task_create_gid1 (GID_RULES_LEFF, rules_clock_leff);
	rule_complete ();

	sol_request (SOL_EYELIDS_CLOSED);
	music_enable ();
	deff_exit ();
}
Beispiel #22
0
task_pid_t timer_start1 (task_gid_t gid, U16 ticks, task_function_t fn)
{
	task_pid_t tp = task_create_gid1 (gid, fn);
	task_set_arg (tp, ticks);
	return (tp);
}
Beispiel #23
0
void skillshot_skidpad_enable( void ) {
	// kill any existing task, just to make sure
	task_kill_gid (GID_SKILLSHOT_SKIDPAD_TIMER);
	task_create_gid1 (GID_SKILLSHOT_SKIDPAD_TIMER, skillshot_skidpad_timer);
}
Beispiel #24
0
void ball_search_monitor_start (void)
{
	ball_search_timeout_set (BS_TIMEOUT_DEFAULT);
	task_create_gid1 (GID_BALL_SEARCH_MONITOR, ball_search_monitor_task);
}
Beispiel #25
0
/**
 * Create a task to run the lamp effect.
 */
static void leff_create_task (const leff_t *leff, task_gid_t gid)
{
	task_pid_t tp = task_create_gid1 (gid, leff->fn);
	if (leff->page != 0)
		task_set_rom_page (tp, leff->page);
}
Beispiel #26
0
CALLSET_ENTRY (shot, sw_skid_pad_entry)
{
	task_create_gid1 (GID_SKID_PAD_MADE, skid_pad_task);
}
Beispiel #27
0
/**
 * Start the simulation as soon as valid playfield is declared,
 * if it has been enabled.
 */
CALLSET_ENTRY (stress, start_ball)
{
	if (switch_stress_enable == YES)
		task_create_gid1 (GID_SWITCH_STRESS, switch_stress_task);
}
Beispiel #28
0
void initials_enter (void)
{
	task_create_gid1 (GID_ENTER_INITIALS, initials_running);
	deff_start_sync (DEFF_ENTER_INITIALS);
}