/********************************************************************************
					-------------------------
				 	 Ultra 64 MARIO Brothers
					-------------------------

					File		: pathbackfire.s
					Description	: 
					Date		: 1995.10.26
					Author		: H.yajima

 ********************************************************************************/


/*################*/
#ifdef ASSEMBLER
/*################*/

e_firesmoke:
	p_initialize(option)
	p_setbit(flag,stf_moveON )
	p_softspritemodeON
	p_setf(animepositionY,70)
	p_animereset
	p_while
		p_animeinc
		p_program(s_firesmoke)
	p_loop

/*============= effect ================*/
e_firesmoke_smoke:
	p_initialize(effect)
	p_setbit(flag,stf_moveON | stf_YangleSAME | stf_FspeedON )
	p_softspritemodeON
/*	p_animereset	*/
	p_setd(animecounter,4)
	p_setf(animepositionY,50)
	p_do(8)
/*		p_animeinc	*/
		p_program(s_firesmoke_smoke)
		p_wait(1)
		p_program(s_firesmoke_smoke)
		p_wait(1)
		p_program(s_firesmoke_smoke)
	p_next
	p_killshape


/*============= firesmoke parts ================*/
e_enemy_firesmoke_parts:
	p_initialize(effect)
	p_setbit(flag,stf_moveON | stf_YangleSAME | stf_FspeedON )
	p_softspritemodeON
	p_setf(animepositionY,0)
	p_do(8)
		p_program(s_enemy_firesmoke_parts)
		p_inc_frame(animecounter,4)
	p_next
	p_killshape

e_enemy_firesmoke:
	p_initialize(option)
	p_setbit(flag,stf_moveON )
	p_do(4)
		p_program(s_make_smoke)
	p_next
	p_killshape


/*################*/
#else
/*################*/

/*-------------------------------------------------------------------------*/
/*		enemy smoke mother 												   */
/*-------------------------------------------------------------------------*/
extern void s_make_smoke(void)
{
	s_makeobj_nowpos_scale(execstp,S_firesmoke,e_enemy_firesmoke_parts,execstp->map.scale[0] );
}

/*-------------------------------------------------------------------------*/
/*		enemy smoke														   */
/*-------------------------------------------------------------------------*/

#define		firesmoke_scale	(execstp->s[stw_work0].f)

extern void s_enemy_firesmoke_parts(void)
{
	if (obj_timer == 0){
		obj_speedF = Randomf()*2+0.5;	/* speed(F)	*/
		obj_angleY = Randomd();			/* angle(Y)	*/
		obj_speedY = 8;					/* speed(Y)	*/
		firesmoke_scale = execstp->map.scale[0];
	}
	obj_angleY += obj_anglespeedY;
	obj_worldY += obj_speedY;
}


/*-------------------------------------------------------------------------*/
/*																		   */
/*-------------------------------------------------------------------------*/
extern void s_firesmoke_smoke(void)
{

	if (obj_timer == 0){
		s_posoffset_mother(player1stp,0,0,-30);
		obj_speedF = Randomf()*2+0.5;
		obj_angleY = (player1stp->s[stw_angleY].d) + 0x7000 + Randomf()*0x2000;
		obj_speedY = 8;
	}

	obj_angleY += obj_anglespeedY;
	obj_worldY += obj_speedY;
}



/*-------------------------------------------------------------------------*/
extern void s_firesmoke(void)
{


	s_set_scale(2.0);

	if ( obj_timer != 0 ){
		if ( obj_timer & 1 )
			s_makeobj_nowpos(execstp,S_firesmoke,e_firesmoke_smoke);
	}

	
	/*---- fire matrix entry -----*/
	player1stp->childobj 		= execstp;
	s_set_skeleton(execstp,40,-120,0);

/*--------------------------
	execstp->s[stw_skeletonX].f = 40;
	execstp->s[stw_skeletonY].f = -120;
	execstp->s[stw_skeletonZ].f = 0;
---------------------------*/

	if ( ( (player1stp->s[stw_work0].d) & PLAYER_FIRESMOKE ) == 0 ){
		Mbitclr(execstp->motherobj->s[stw_effect].d,stf_firesmoke);
		s_remove_obj(execstp);
		player1stp->childobj = NULL;
	}	


}





/*################*/
#endif
/*################*/
/*===============================================================================
		end end end end end end end end 
===============================================================================*/


