/********************************************************************************
					-------------------------
				 	 Ultra 64 MARIO Brothers
					-------------------------

					File		: pathana.s
					Description	: otoshi ana !
					Date		: 1995.
					Author		: H.yajima

 ********************************************************************************/


/*################*/
#ifdef ASSEMBLER
/*################*/

/********************************************************************************
		obake otoshi ana program
 ********************************************************************************/

e_mainroom_trap:
e_sel1ftrap:
	p_initialize(option)
	p_shapeDISABLE
	p_program(s_mainroom_trap_init)
	p_while
		p_program(s_mainroom_trap_main)
	p_loop

e_mainroom_trap_parts:
	p_initialize(moveBG)
	p_setbit( flag,stf_moveON | stf_YangleSAME)
	p_setshapeinfo(sel1ftrap_check_info)
	p_while
		p_program(s_mainroom_trap_parts)
		p_program(stMainMoveBG)
	p_loop


/*################*/
#else
/*################*/

/********************************************************************************
		-------------------------		
		 Main Room Trap Program
		-------------------------		
 ********************************************************************************/

enum {
	mode_trap_wait,
	mode_trap_start,
	mode_trap_stop,
	mode_trap_return,
	mode_trap_comeback
};


/********************************************************************************
		============
		 trap parts
		============
 ********************************************************************************/


/*------------------------------------------------------------------------------*/
/*		trap parts main program													*/
/*------------------------------------------------------------------------------*/

extern void s_mainroom_trap_parts(void)
{

	if ( player1stp->ride_strat == execstp ){
		execstp->motherobj->s[stw_mail].d |= EMAIL_RIDEON;
	}

	obj_animeangleZ = execstp->motherobj->s[stw_animeangleZ].d;


}

/********************************************************************************
		=============
		 trap mother
		=============
 ********************************************************************************/


/*------------------------------------------------------------------------------*/
/*		trap intialize 															*/
/*------------------------------------------------------------------------------*/
extern void s_mainroom_trap_init(void)
{
  	StrategyRecord *stratp;
	stratp = s_makeobj_chain(0,-358,0,0,execstp,S_movebg00,e_mainroom_trap_parts);
	stratp = s_makeobj_chain(0, 358,0,0,execstp,S_movebg00,e_mainroom_trap_parts);
	stratp->s[stw_angleY].d += 0x8000;
}

/*------------------------------------------------------------------------------*/
/*		trap wait 																*/
/*------------------------------------------------------------------------------*/
static void	trap_wait(void)
{

	if ( playerWorks[0].status == PS_PUSHOUT ||  playerWorks[0].status == PS_PUSHDOWN ){
		obj_mode = mode_trap_comeback;
	} else {
		obj_anglespeedZ = 0x400;	
		if ( obj_mail & EMAIL_RIDEON )	obj_mode = mode_trap_start;

	}
}

/*------------------------------------------------------------------------------*/
/*		trap start																*/
/*------------------------------------------------------------------------------*/
static void	trap_start(void)
{
	if ( obj_timer == 0 )	objsound(NA_SE2_OTOSHIANA);

	obj_anglespeedZ -= 0x100;
	obj_animeangleZ += obj_anglespeedZ;

	if ( obj_animeangleZ < -0x4000 ){
		obj_animeangleZ = -0x4000;
		obj_mode		= mode_trap_stop;
	}

}

/*------------------------------------------------------------------------------*/
/*		trap stop wait															*/
/*------------------------------------------------------------------------------*/
static void trap_stop(void)
{
	if ( obj_playerdist > 1000 )	obj_mode = mode_trap_return;

}

/*------------------------------------------------------------------------------*/
/*		trap retrun																*/
/*------------------------------------------------------------------------------*/
static void trap_retrun(void)
{
	obj_animeangleZ += 0x400;
	if (obj_animeangleZ > 0 ){
		obj_animeangleZ = 0;
		obj_mode		= mode_trap_wait;
		Mbitclr(obj_mail,EMAIL_RIDEON);
	}

}

/*------------------------------------------------------------------------------*/
/*		trap retrun																*/
/*------------------------------------------------------------------------------*/
static void trap_comeback(void)
{
	obj_animeangleZ = -0x3c00;
}


/*------------------------------------------------------------------------------*/
/*		trap parts main program													*/
/*------------------------------------------------------------------------------*/

extern void s_mainroom_trap_main(void)
{

	BGCheckData	*bgdata;
	float	dz;
	int		se;

	switch(obj_mode){
	 	case	mode_trap_wait:		trap_wait();		break;
		case	mode_trap_start:	trap_start();		break;
		case	mode_trap_stop:		trap_stop();		break;
		case	mode_trap_return:	trap_retrun();		break;
		case	mode_trap_comeback:	trap_comeback();	break;
	}

}


/*################*/
#endif
/*################*/
/*===============================================================================
		end end end end end end end end 
===============================================================================*/


