/********************************************************************************
					-------------------------
				 	 Ultra 64 MARIO Brothers
					-------------------------

					File		: pathdungeonlift.s
					Description	: 
					Date		: 1995.
					Author		: H.yajima

 ********************************************************************************/


/*################*/
#ifdef ASSEMBLER
/*################*/

/********************************************************************************/
/*																				*/
/*		test enemy program														*/
/*																				*/
/********************************************************************************/



e_udlift_kioku:
	p_initialize(moveBG)
	p_setbit(flag,stf_moveON | stf_playerdistON )
	p_setshapeinfo(kdow_el_check_info)
	p_save_nowpos
	p_program(s_udlift_s_init)
	p_while
 		p_program(s_udlift_s)
		p_program(stMainMoveBG)
	p_loop


e_downlift:
	p_initialize(moveBG)
	p_setbit(flag,stf_moveON | stf_playerdistON )
	p_setshapeinfo(e8_rifuto03_check_info)
	p_save_nowpos
	p_program(s_udlift_s_init)
	p_while
 		p_program(s_udlift_s)
		p_program(stMainMoveBG)
	p_loop


e_udlift_s:
	p_initialize(moveBG)
	p_setbit(flag,stf_moveON | stf_playerdistON )
	p_setshapeinfo(kdow_el_check_info)
	p_save_nowpos
	p_program(s_udlift_s_init)
	p_program(s_areastage_init)
	p_while
 		p_program(s_udlift_s)
		p_program(stMainMoveBG)
	p_loop

/*################*/
#else
/*################*/

/********************************************************************************/
/*																				*/
/*		updown lift super														*/
/*																				*/
/********************************************************************************/

#define		 udlift_dist_low	(execstp->s[stw_work0].f)
#define		 udlift_dist_high	(execstp->s[stw_work1].f)
#define		 udlift_dist_center	(execstp->s[stw_work2].f)
#define		 udlift_flag	(execstp->s[stw_work3].d)

/*------------------------------------------------------------------------------*/
/*			waitting															*/
/*------------------------------------------------------------------------------*/

static void	udlift_arrived(void)
{
	objsound(NA_SE2_RAFT_COLLISION);
	s_call_Viewshake(VS_SMALL);
}


static void udlift_l_wait(void)
{
	obj_speedY = 0;

	if ( udlift_flag == 2 ){
		if ( player1stp->ride_strat == execstp ){
		 	if ( obj_worldY > udlift_dist_center ) obj_mode = mode_udlift_l_down;
		 	else								   obj_mode = mode_udlift_l_up;	
		}
	} else {
		if ( (player1stp->s[stw_worldY].f) > udlift_dist_center || (udlift_flag == 1 ) ){
			obj_worldY = udlift_dist_high;
			if ( player1stp->ride_strat == execstp ) obj_mode = mode_udlift_l_down;
		} else {
			obj_worldY = udlift_dist_low;
			if ( player1stp->ride_strat == execstp ) obj_mode = mode_udlift_l_up;
		}
	}

}

/*------------------------------------------------------------------------------*/

static void udlift_l_up(void)
{

	objsound_level(NA_LSE2_MOVE);
	if ( ( obj_timer == 0 ) && s_rideon_player() ) udlift_arrived();
	s_chase_speed(&obj_speedY,10,2);
	obj_worldY += obj_speedY;
	if ( obj_worldY > udlift_dist_high ){
		obj_worldY	= udlift_dist_high;	
		if ( udlift_flag == 2 || udlift_flag == 1 ) obj_mode = mode_udlift_l_gatan;	
		else {
			if ( player_worldY < udlift_dist_center ) 	obj_mode = mode_udlift_l_down;
			else										obj_mode = mode_udlift_l_gatan;
		}
	}

}

/*------------------------------------------------------------------------------*/

static void udlift_l_down(void)
{

	objsound_level(NA_LSE2_MOVE);
	if ( ( obj_timer == 0 ) && s_rideon_player() ) udlift_arrived();
	s_chase_speed(&obj_speedY,-10,-2);
	obj_worldY += obj_speedY;

	if ( obj_worldY < udlift_dist_low ){
		obj_worldY	= udlift_dist_low;
		if ( udlift_flag == 1 )	obj_mode = mode_udlift_l_gatan_wait;							
		else { 
			if ( udlift_flag == 2 ) obj_mode = mode_udlift_l_gatan;	
			else {
				if ( player_worldY > udlift_dist_center )	obj_mode = mode_udlift_l_up;
				else										obj_mode = mode_udlift_l_gatan;
			}
		}
	}

}

/*------------------------------------------------------------------------------*/


static void udlift_l_gatan_wait(void)
{
	obj_speedY = 0;
	if ( obj_timer == 0 ){
		s_call_Viewshake(VS_SMALL);
		objsound(NA_SE2_LIFT_STOP);
	}	
	if ( ( s_check_playerjump() == 0 ) && ( s_rideon_player() == 0 ) ){
		obj_mode = mode_udlift_l_up;
	}
}

static void udlift_l_gatan(void)
{
	obj_speedY = 0;
	if ( obj_timer == 0 ){
		s_call_Viewshake(VS_SMALL);
		objsound(NA_SE2_LIFT_STOP);
	}
	if ( ( s_check_playerjump() == 0 ) && ( s_rideon_player() == 0 ) ){
		obj_mode = mode_udlift_l_wait;
	}
}

/*------------------------------------------------------------------------------*/


static short udlift_data[] = {
	  -51,	 0, 0, 		/* 0  stage 7  lift 			*/
	 -461,	 0, 0, 		/* 1  stage 7  lift 			*/
	 -512,	 0, 0, 		/* 2  stage 7  lift 			*/
	-2611,	 0, 0, 		/* 3  stage 7  lift 			*/
	-2360,	 0, 0, 		/* 4  stage 4  lift (obake)  	*/
	  214,	 0, 0, 		/* 5  stage 15 lift (fire 2) 	*/
	  -50,1945, 1, 		/* 6  stage 7  lift (fire 2) 	*/
};

extern void s_udlift_s_init(void)
{

	int 	code =  udlift_data[obj_programselect*3+2];

	if ( code == 0 ){
		udlift_dist_low  		= udlift_data[obj_programselect*3];
		udlift_dist_high 		= obj_attY;
		udlift_dist_center		= ( udlift_dist_low + udlift_dist_high )/2;
		udlift_flag				= s_check_pathname(e_downlift);
	} else {
		udlift_dist_low  		= udlift_data[obj_programselect*3+0];
		udlift_dist_high 		= udlift_data[obj_programselect*3+1]; 
		udlift_dist_center		= ( udlift_dist_low + udlift_dist_high )/2;
		udlift_flag = 2;
	}

}

/*------------------------------------------------------------------------------*/
/*		lift main program														*/	
/*------------------------------------------------------------------------------*/

static void *udlift_l_modejmp[] = {
	
	 udlift_l_wait,
	 udlift_l_up,
	 udlift_l_down,
	 udlift_l_gatan,
	 udlift_l_gatan_wait
	
};

extern void s_udlift_s(void)
{

	s_modejmp(udlift_l_modejmp);

}


/*################*/
#endif
/*################*/
/*===============================================================================
		end end end end end end end end 
===============================================================================*/



