/********************************************************************************
					-------------------------
				 	 Ultra 64 MARIO Brothers
					-------------------------

					File		: pathwater.s
					Description	: 
					Date		: 1995.11.14
					Author		: H.yajima

 ********************************************************************************/


/*################*/
#ifdef ASSEMBLER
/*################*/

/*--------------------------------------------------------------*/
/*			small splash	!!									*/
/*--------------------------------------------------------------*/

e_smallsplash:
	p_initialize(option)
	p_setbit(flag,stf_moveON)
	p_shapeOFF
	p_program(s_smallsplash_init)
	p_wait(1)
	p_killshape

/*--------------------------------------------------------------*/
/*			small splash	!!									*/
/*--------------------------------------------------------------*/

e_jumpsplash:
	p_initialize(option)
	p_setbit(flag,stf_moveON)
	p_shapeOFF
	p_program(s_jumpsplash_init)
	p_wait(1)
	p_killshape

/*--------------------------------------------------------------*/
/*			small drop											*/
/*--------------------------------------------------------------*/

e_smallwaterdrop:
	p_initialize(option)
 	p_setbit(flag,stf_moveON | stf_FspeedON | stf_YangleSAME )
	p_while
		p_program(s_smalldrop_main)
	p_loop

/*--------------------------------------------------------------*/
/*			small drop											*/
/*--------------------------------------------------------------*/

e_smalldropripple:
	p_initialize(option)
	p_setbit(flag,stf_moveON)
	p_animereset
	p_program(s_smallripple_init)
	p_do(6)
		p_animeinc
	p_next
	p_killshape

/*--------------------------------------------------------------*/
/*			funsui												*/
/*--------------------------------------------------------------*/


e_funsui:
	p_initialize(option)
	p_setbit(flag,stf_moveON | stf_playerdistON )
	p_shapeOFF
	p_while
		p_program(s_funsui_main)
	p_loop



/*################*/
#else
/*################*/

	extern AnimePtr RCP_fishAnime[];

/********************************************************************************
		----------------
		 funsui program
		----------------
 ********************************************************************************/

extern void s_funsui_main(void)
{


	int		i;
	float sc;
	StrategyRecord *stratp;
	float	waterY = mcWaterCheck(obj_worldX,obj_worldZ);

 	switch(obj_mode){
		case	0:
			if ( obj_playerdist < 200 )	obj_mode++;
			break;
		case	1:
			if ( waterY > -10000 ){
				if ( beforeframe_objcount < ( NUM_STRATEGY - 28 )){
		
					if ( frameCounter % 32 == 0 )	objsound(NA_SE2_FISH);

					for(i=0;i<2;i++){
						
						if ( ( Randomd() & 0x1f ) == 0 ){
							stratp 	= s_makeobj_nowpos(execstp,S_fish,e_smallwaterdrop);
							s_set_skeletonobj(stratp,(void *)RCP_fishAnime,0);
						} else {
							stratp 	= s_makeobj_nowpos(execstp,S_waterdrop,e_smallwaterdrop);
							sc 						= Randomf()*1+0.5;
							stSetScale(stratp,sc,sc,sc);
							s_softspritemodeON(stratp);
						}

						stratp->s[stw_angleY].d = Randomd();
						stratp->s[stw_worldY].f = waterY;
						stratp->s[stw_speedF].f = Randomf()*3+2;
						stratp->s[stw_speedY].f = Randomf()*20+20;
					}
				}
			}

			if ( obj_playerdist > 300 )	obj_mode = 0;
			break;
	}


}





/********************************************************************************
		C Program
 ********************************************************************************/


/*------------------------------------------------------------------------------*/
/*		jump																	*/
/*------------------------------------------------------------------------------*/
extern void s_jumpsplash_init(void)
{
	int		i;
	float	sc;
	float	waterY;
	StrategyRecord *stratp;

	if ( beforeframe_objcount < ( NUM_STRATEGY - 28 )){
		waterY = mcWaterCheck(obj_worldX,obj_worldZ);
		if ( waterY > -10000 ){

			for(i=0;i<20;i++){
				if ( ( Randomd() & 0xff ) == 0 ){
					stratp 	= s_makeobj_nowpos(execstp,S_fish,e_smallwaterdrop);
					s_set_skeletonobj(stratp,(void *)RCP_fishAnime,0);
				} else {
					stratp 	= s_makeobj_nowpos(execstp,S_waterdrop,e_smallwaterdrop);
					sc 						= Randomf()*1+0.5;
					stSetScale(stratp,sc,sc,sc);
					s_softspritemodeON(stratp);
				}

				stratp->s[stw_angleY].d = Randomd();
				stratp->s[stw_worldY].f = waterY;
				stratp->s[stw_speedF].f = Randomf()*3+2;
				stratp->s[stw_speedY].f = Randomf()*20+20;

			}
		}
	}

	Mbitclr( player1stp->s[stw_effect].d , stf_jumpsink );	/* effect flag off */

}

/*------------------------------------------------------------------------------*/
/*		main																	*/
/*------------------------------------------------------------------------------*/
extern void s_smallsplash_init(void)
{
	int		i;
	float	sc;
	float	waterY;
	StrategyRecord *stratp;

	if ( beforeframe_objcount < ( NUM_STRATEGY - 28 )){
		waterY = mcWaterCheck(obj_worldX,obj_worldZ);
		if ( waterY > -10000 ){
			for(i=0;i<5;i++){
				stratp 	= s_makeobj_nowpos(execstp,S_waterdrop,e_smallwaterdrop);
				stratp->s[stw_angleY].d = (player1stp->s[stw_angleY].d+0x8000) + (long)(Randomf()*0x6000 - 0x3000);
				stratp->s[stw_worldY].f = waterY;
				stratp->s[stw_speedF].f = Randomf()*8+2;
				stratp->s[stw_speedY].f = Randomf()*10+10;
				sc 						= Randomf()*1+0.5;
				stSetScale(stratp,sc,sc,sc);
				s_softspritemodeON(stratp);
			}
		}
	}

	Mbitclr( player1stp->s[stw_effect].d , stf_sink );		/* effect flag off */

}


/*------------------------------------------------------------------------------*/
/*		ripple																	*/
/*------------------------------------------------------------------------------*/
extern void s_smallripple_init(void)
{

	s_set_scale( 1.5+Randomf() );

}

/*------------------------------------------------------------------------------*/
/*		drop																	*/
/*------------------------------------------------------------------------------*/
extern void s_smalldrop_main(void)
{

	StrategyRecord *stratp;
	float waterY = mcWaterCheck(obj_worldX,obj_worldZ);

	if (obj_timer == 0 ){
		obj_animeangleY = Randomd();
	}

	obj_speedY -= 4;
	obj_worldY += obj_speedY;

	if ( obj_speedY < 0 ){
		if ( waterY > (execstp->s[stw_worldY].f) ){
			stratp = s_makeobj(execstp,0,S_rippleA,e_smalldropripple);
			stratp->s[stw_worldX].f = execstp->s[stw_worldX].f;
			stratp->s[stw_worldY].f = waterY + 5;
			stratp->s[stw_worldZ].f = execstp->s[stw_worldZ].f;
			s_remove_obj(execstp);
		} else {
			if ( obj_timer > 60 )	s_remove_obj(execstp);
		}
		
	}

	if ( waterY < -10000 )	s_remove_obj(execstp);

}


/*################*/
#endif
/*################*/
/*===============================================================================
		end end end end end end end end 
===============================================================================*/

