sm64/data/p/pathchiri.p
2022-12-04 22:27:02 -05:00

127 lines
3.0 KiB
OpenEdge ABL

/********************************************************************************
-------------------------
Ultra 64 MARIO Brothers
-------------------------
File : pathchiri.s
Description :
Date : 1995.
Author : H.yajima
********************************************************************************/
/*################*/
#ifdef ASSEMBLER
/*################*/
/********************************************************************************
EFFECT OBJECT << chiri >>
********************************************************************************/
e_chiri:
p_initialize(effect)
p_setbit(flag,stf_moveON )
p_softspritemodeON
p_while
p_program(s_chiri)
p_loop
/*################*/
#else
/*################*/
#define chiri_scale (execstp->s[stw_work0].f)
#define chiri_scale_timer (execstp->s[stw_work1].d)
#define chiri_scale_mode (execstp->s[stw_work2].d)
/********************************************************************************
EFFECT OBJECT << chiri >>
********************************************************************************/
extern void s_chiri(void)
{
float scale;
if ( obj_timer == 0 ){
s_calcobj_speedF();
chiri_scale = execstp->map.scale[0];
switch(obj_programselect){
case EFFECT_BURN:
obj_alpha = 254;
chiri_scale_timer = -21;
chiri_scale_mode = 0;
break;
case EFFECT_MOWAN:
obj_alpha = 254;
chiri_scale_timer = -13;
chiri_scale_mode = 1;
break;
}
}
s_optionmove_XZ();
s_calc_friction(obj_air_fric);
if ( obj_speedY > 100 ) obj_speedY = 100;
if ( obj_timer > 20 ) s_remove_obj(execstp);
if ( obj_alpha != 0 ){
obj_alpha += chiri_scale_timer;
if ( obj_alpha <= 1 ) s_remove_obj(execstp);
if ( chiri_scale_mode ) scale = chiri_scale * ( (254 - obj_alpha) / 254.0 );
else scale = chiri_scale * ( obj_alpha / 254.0 );
s_set_scale(scale);
}
}
/********************************************************************************
bomb effect
********************************************************************************/
static EffectRecord burneffect = {
EFFECT_BURN,
20, /* effect count */
S_hiteffect, /* effect character */
// S_blackeffect, /* effect character */
0, /* ================ */
40,5, /* speed F */
30,20, /* speed Y */
-4, /* gravity */
30, /* air fric */
330.0f, /* ================ */
10.0f /* ================ */
};
extern void s_burneffect(int flag,int offsetY,float scale)
{
burneffect.scale_min = scale;
burneffect.scale_random = scale / 20.0;
burneffect.offsetY = offsetY;
if ( flag == 0 ) burneffect.total = 20;
else if (flag > 20 ) burneffect.total = flag;
else burneffect.total = 4;
s_makeeffect_chiri(&burneffect);
}
/*################*/
#endif
/*################*/
/*===============================================================================
end end end end end end end end
===============================================================================*/