/********************************************************************************
					-------------------------
				 	 Ultra 64 MARIO Brothers
					-------------------------

					File		: pathloopfish.s
					Description	: 
					Date		: 1995.
					Author		: H.yajima

 ********************************************************************************/


/*################*/
#ifdef ASSEMBLER
/*################*/

e_loopfish_obj:
	p_initialize(option)
	p_setbit(flag,stf_moveON | stf_YangleSAME )
	p_save_nowpos
	p_set_pointer(skelanime,RCP_fishAnime)
	p_set_skelanime_number(0)
	p_while
		p_program(s_loopfish_obj)
	p_loop

e_loopfish:
	p_initialize(option)
	p_setbit(flag,stf_moveON )
	p_save_nowpos
	p_while
		p_program(s_loopfish)
	p_loop

/*################*/
#else
/*################*/

#define			loopfish_randomspeed	(execstp->s[stw_work0].f)
#define			loopfish_randomtimer	(execstp->s[stw_work1].d)
#define			loopfish_angle	(execstp->s[stw_work2].d)
#define			loopfish_Yadd	(execstp->s[stw_work3].f)

/********************************************************************************
		C Program (loopfish)
 ********************************************************************************/


extern void s_loopfish_obj(void)
{
	float rand;

	switch(obj_mode){
	 	case	0:
			s_set_skelanime_speed(0,1.0);
			if (obj_timer == 0 ){
			 	loopfish_Yadd 		 = RandomSign()*0x800;
			 	loopfish_randomspeed = Randomf()*2;
			 	loopfish_randomtimer = (int)(30*Randomf()) & 0xfe;
				rand = Randomf()*5;
				if 		( rand < 2 ) 	obj_anglespeedX =  s_random_f((float)128);
				else					obj_anglespeedX = 0;
			}
			obj_speedF = 3+loopfish_randomspeed;

			if (obj_timer >=  60+loopfish_randomtimer    ) obj_mode++;
			if (obj_timer <  (60+loopfish_randomtimer)/2 ) obj_animeangleX += obj_anglespeedX;
			else										   obj_animeangleX -= obj_anglespeedX;
			obj_speedY  = -sin(obj_animeangleX)*obj_speedF;
			break;

	 	case	1:
			s_set_skelanime_speed(0,2.0);
			obj_angleY += loopfish_Yadd;			/* turn (1) */
			if (obj_timer == 15 ) obj_mode++;
			break;			

	 	case	2:
			s_set_skelanime_speed(0,1.0);
			if (obj_timer >=  60+loopfish_randomtimer    ) obj_mode++;
			if (obj_timer <  (60+loopfish_randomtimer)/2 ) obj_animeangleX -= obj_anglespeedX;
			else										   obj_animeangleX += obj_anglespeedX;
			break;

	 	case	3:
			s_set_skelanime_speed(0,2.0);
			obj_angleY += loopfish_Yadd;			/* turn (2) */
			if (obj_timer == 15 ) obj_mode=0;
			break;			
	}

	
	obj_speedY  = -sin(obj_animeangleX)*obj_speedF;
	s_optionmove_F();

	if ( execstp->motherobj->s[stw_mode].d == 2 )	s_remove_obj(execstp);

}

extern void s_loopfish(void)
{

	StrategyRecord *stp;
	int		i;

	switch(obj_mode){
		case	0:
			if ( map_areacode == 15 || map_areacode == 7 ){
				for(i=0;i<15;i++){
					stp = s_makeobj_chain(0,300,0,-200,execstp,S_fish,e_loopfish_obj);
					s_random_XYZ_offset(stp,200);
				}
			 	obj_mode++;
			}
			break;
		case	1:
			if ( map_areacode != 15 && map_areacode != 7 ) 	obj_mode++;
			break;
		case	2:
			obj_mode = 0;
			break;
	}



}

/*################*/
#endif
/*################*/
/*===============================================================================
		end end end end end end end end 
===============================================================================*/



