/********************************************************************************
					-------------------------
				 	 Ultra 64 MARIO Brothers
					-------------------------

					File		: pathcrash.s
					Description	: 
					Date		: 1995.7.27
					Author		: H.yajima

 ********************************************************************************/


/*################*/
#ifdef ASSEMBLER
/*################*/
/********************************************************************************/
/*																				*/
/* << OPTION >> crash spark														*/
/*																				*/
/********************************************************************************/


/********************************************************************************/
/*		wall crash																*/
/********************************************************************************/

e_wallcrash_obj:
	p_initialize(effect)
	p_setbit( flag,stf_moveON )
	p_softspritemodeON
	p_do(10)
		p_program(s_wallcrash_obj)
	p_next
	p_killobj

e_wallcrash:
	p_initialize(option)
	p_shapeDISABLE
	p_setbit( flag,stf_moveON )
	p_mother_clrbit(effect,stf_wallcrash)
	p_program(s_wallcrash)
	p_wait(1)
	p_killshape

/********************************************************************************/
/*		hipdrop crash															*/
/********************************************************************************/
e_hoshi:
	p_initialize(effect)
	p_setbit( flag,stf_moveON )
	p_softspritemodeON
	p_do(10)
		p_program(s_hoshi)
	p_next
	p_killobj

e_crashanime:
	p_initialize(option)
	p_shapeDISABLE
	p_setbit( flag,stf_moveON )
	p_mother_clrbit(effect,stf_crash)
	p_program(s_crashentry)
	p_wait(1)
	p_killshape


/********************************************************************************/
/*	   	punch animation															*/
/********************************************************************************/

e_punch_obj:
	p_initialize(effect)
	p_setbit( flag,stf_moveON )
	p_softspritemodeON
	p_while
		p_program(s_punch_obj)
	p_loop

e_punchanime:
	p_initialize(option)
	p_shapeDISABLE
	p_setbit( flag,stf_moveON )
	p_mother_clrbit(effect,stf_punchcrash)  
	p_program(s_punchcrash)
	p_wait(1)
	p_killshape

/*################*/
#else
/*################*/


/********************************************************************************/
/*																				*/
/*		punch object															*/
/*																				*/
/********************************************************************************/

extern void s_punch_obj(void)
{
	short ang;

	if ( obj_timer == 0 ){
		ang = obj_angleY;
		execstp->s[stw_work0].f	  = 1.28;
		s_posoffset_mother(player1stp,0,60,100 );
		obj_angleY = ang;
	}

	s_optionmove_F();
	obj_animecounter = 5;
	s_set_scale(execstp->s[stw_work0].f);
	execstp->s[stw_work0].f -= 0.2f;

	if ( obj_timer > 6 + effect_p0 ) s_remove_obj(execstp);

}

/********************************************************************************/
/*																				*/
/*		punch crash object  													*/
/*																				*/
/********************************************************************************/

static short punchang[] = 
{
	-0x2000*1.5,0,
	 0x2000*1.5,0,
	-0x1666*1.5, 0x1666*1.5,
	 0x1666*1.5, 0x1666*1.5,
	-0x1666*1.5,-0x1666*1.5,
	 0x1666*1.5,-0x1666*1.5,

};

extern void s_punchcrash(void)
{

	int i,j;
	StrategyRecord *stp;
	for(i=0;i<6;i++){
		stp = s_makeobj_nowpos(execstp,S_sankaku,e_punch_obj);
		stp->s[stw_angleY].d  =  player1stp->s[stw_angleY].d + 0x8000 + punchang[i*2];
		stp->s[stw_speedY].f  =  (25) * sin(punchang[i*2+1]);
		stp->s[stw_speedF].f  =  (25) * cos(punchang[i*2+1]);
	}


}

/********************************************************************************/
/*																				*/
/*		wall crash object 														*/
/*																				*/
/********************************************************************************/

extern void s_wallcrash_obj(void)
{

	short ang;

	if ( obj_timer == 0 ){
		ang = obj_angleY;
		execstp->s[stw_work0].f	  = 0.28;
		s_posoffset_mother(player1stp,0,30,110 );
		obj_angleY = ang;
	}

	s_optionmove_F();
	obj_animecounter = 4;
	s_set_scale(execstp->s[stw_work0].f);

	execstp->s[stw_work0].f -= 15.0f / 1000.0f;
		
}


/********************************************************************************/
/*																				*/
/*		wall crash																*/
/*																				*/
/********************************************************************************/

static short crashang[] = 
{
	-0x2000,0,
	 0x0000,0,
	 0x2000,0,
	-0x1666,0x1666,
	 0x1666,0x1666,
	-0x1666,-0x1666,
	 0x1666,-0x1666,

};

extern void s_wallcrash(void)
{

	int i,j;
	StrategyRecord *stp;
	for(i=0;i<7;i++){
		stp = s_makeobj_nowpos(execstp,S_polygon_hoshi,e_wallcrash_obj);
		stp->s[stw_angleY].d  =  player1stp->s[stw_angleY].d + 0x8000 + crashang[i*2];
		stp->s[stw_speedY].f  =  25*sin(crashang[i*2+1]);
		stp->s[stw_speedF].f  =  25*cos(crashang[i*2+1]);
	}


}

/********************************************************************************/
/*		hipdrop crash															*/
/********************************************************************************/

/*==================================================*/
/*	hoshi											*/
/*==================================================*/
extern void s_hoshi(void)
{

	if ( obj_timer == 0 ){
		execstp->s[stw_work0].f	  =  0.28;
		execstp->s[stw_speedF].f  =  25;
		execstp->s[stw_worldY].f  -= 20;
		execstp->s[stw_speedY].f  =  14;
	}

	s_optionmove_F();
	obj_animecounter = 4;
	s_set_scale(execstp->s[stw_work0].f);

	execstp->s[stw_work0].f -= 15.0f / 1000.0f;

}

/*==================================================*/
/*	crash entry										*/
/*==================================================*/
extern void s_crashentry(void)
{
	int i;
	int n = 8;
	StrategyRecord *stp;

	for(i=0;i<n;i++){
		stp = s_makeobj_nowpos(execstp,S_polygon_hoshi,e_hoshi);
		stp->s[stw_angleY].d  =  (i * 0x10000)/n;
	}

}

/*################*/
#endif
/*################*/

/*===============================================================================
		end end end end end end end end 
===============================================================================*/

