366 lines
10 KiB
OpenEdge ABL
366 lines
10 KiB
OpenEdge ABL
/********************************************************************************
|
|
-------------------------
|
|
Ultra 64 MARIO Brothers
|
|
-------------------------
|
|
|
|
File : pathfirebar.s
|
|
Description :
|
|
Date : 1995.11.19
|
|
Author : H.yajima
|
|
|
|
********************************************************************************/
|
|
|
|
|
|
/*################*/
|
|
#ifdef ASSEMBLER
|
|
/*################*/
|
|
|
|
/********************************************************************************
|
|
<< fire bar >>
|
|
********************************************************************************/
|
|
|
|
|
|
/*--------------------------------------------------*/
|
|
/* fire sky bar */
|
|
/*--------------------------------------------------*/
|
|
e_fireskybar:
|
|
p_initialize(moveBG)
|
|
p_setbit(flag,stf_moveON | stf_YangleSAME | stf_playerdistON )
|
|
p_setshapeinfo(e8_guruguru_check_info)
|
|
p_setf(movebg_checkdist,1500)
|
|
p_save_nowpos
|
|
p_while
|
|
p_program(s_fireskybar_mother)
|
|
p_program(stMainMoveBG)
|
|
p_loop
|
|
|
|
/*--------------------------------------------------*/
|
|
/* fire bigbar main */
|
|
/*--------------------------------------------------*/
|
|
e_firebigbar:
|
|
p_initialize(option)
|
|
p_setbit(flag,stf_moveON | stf_YangleSAME | stf_playerdistON )
|
|
p_save_nowpos
|
|
p_while
|
|
p_program(s_firebigbar_mother)
|
|
p_loop
|
|
|
|
/*--------------------------------------------------*/
|
|
/* fire bigbar parts */
|
|
/*--------------------------------------------------*/
|
|
e_firebigbar_parts:
|
|
p_initialize(enemyA)
|
|
p_setbit(flag,stf_moveON )
|
|
p_setobjname(FIRE)
|
|
p_sethitbox2(50,25,25)
|
|
p_softspritemodeON
|
|
p_save_nowpos
|
|
p_hitON
|
|
p_program(s_areastage_init)
|
|
p_while
|
|
p_program(s_firebigbar_parts)
|
|
p_animeinc
|
|
p_loop
|
|
|
|
/********************************************************************************
|
|
<< fire bubble >>
|
|
********************************************************************************/
|
|
e_firebubble_1:
|
|
p_initialize(option)
|
|
p_setbit(flag,stf_moveON | stf_playerdistON )
|
|
p_shapeDISABLE
|
|
p_while
|
|
p_program(s_firebubble_mother_1)
|
|
p_loop
|
|
|
|
e_firebubble_parts:
|
|
p_initialize(enemyA)
|
|
p_setbit(flag,stf_moveON )
|
|
p_setobjname(FIRE)
|
|
p_setf(animepositionY,30)
|
|
p_sethitbox2(50,25,25)
|
|
p_setmovedata(30,-400,-70,1000,1000,200,0,0)
|
|
p_softspritemodeON
|
|
p_while
|
|
p_program(s_firebubble_parts)
|
|
p_animeinc
|
|
p_loop
|
|
|
|
|
|
|
|
/*################*/
|
|
#else
|
|
/*################*/
|
|
|
|
|
|
#define firebubble_workf (execstp->s[stw_work0].d)
|
|
|
|
|
|
|
|
/********************************************************************************
|
|
firebar mother
|
|
********************************************************************************/
|
|
|
|
/********************************************************************************
|
|
firebar parts
|
|
|
|
work 0 ... start zoom
|
|
work 1 ... zoom parameter
|
|
work 2 ...
|
|
|
|
********************************************************************************/
|
|
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
/* fire bigbar parts */
|
|
/*
|
|
|
|
0 ... Big Fire Yellow
|
|
1 ... Big Fire Blue
|
|
2 ... Small Fire
|
|
3 ... Obake Fire
|
|
4 ,,, Yspeed Fire
|
|
|
|
*/
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
extern void s_firebigbar_parts(void)
|
|
{
|
|
|
|
float scale;
|
|
int firelength;
|
|
|
|
if ( obj_timer == 0 ){
|
|
obj_hmsselectNo = (long)(Randomf()*10);
|
|
s_random_XYZ_offset(execstp,10);
|
|
}
|
|
|
|
if ( obj_programselect == 2 ){
|
|
scale = obj_timer * ( obj_speedF - 6 ) / 100.0 + 2;
|
|
} else {
|
|
scale = obj_timer * ( obj_speedF - 20.0 ) / 100.0 + 1;
|
|
}
|
|
|
|
if ( obj_programselect == 3 ){
|
|
execstp->myobj_height = 200;
|
|
execstp->myobj_kuikomi = 150;
|
|
|
|
obj_speedY = -28;
|
|
s_groundcheck();
|
|
if ( (obj_worldY-(25)*scale ) < obj_groundY ){
|
|
obj_speedY = 0;
|
|
obj_worldY = obj_groundY+(25)*scale;
|
|
}
|
|
firelength = (execstp->motherobj->s[stw_work7].d)/1.2;
|
|
} else {
|
|
firelength = (execstp->motherobj->s[stw_work7].d);
|
|
}
|
|
|
|
s_set_scale(scale);
|
|
|
|
|
|
if ( obj_programselect == 4 ) obj_worldY += obj_speedF;
|
|
else s_optionmove_F();
|
|
|
|
if ( obj_timer > firelength ) s_remove_obj(execstp);
|
|
|
|
obj_mail = 0;
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
/* fire bigbar mother */
|
|
/*--------------------------------------------------------------------------*/
|
|
extern void s_firebigbar_mother(void)
|
|
{
|
|
|
|
StrategyRecord *stp;
|
|
float speed;
|
|
int time;
|
|
int shape;
|
|
int i;
|
|
|
|
if ( obj_mode == 0 ){
|
|
|
|
if ( (activeStageNo != 4 )|| (bf_teresa_flag == 1) ){
|
|
if ( obj_playerdist < 2000 ) obj_mode++;
|
|
}
|
|
|
|
} else if ( obj_mode == 1 ){
|
|
|
|
shape = S_fireball_yellow;
|
|
speed = 95;
|
|
if ( obj_programselect == 1 ) shape = S_fireball_blue;
|
|
if ( obj_programselect == 2 ) speed = 50;
|
|
|
|
time = 1;
|
|
if ( obj_timer < 60 ) time = 15;
|
|
else if ( obj_timer < 74 ) time = (75-obj_timer);
|
|
else obj_mode++;
|
|
execstp->s[stw_work7].d = time;
|
|
stp = s_makeobj_chain(obj_programselect,0,0,0,execstp,shape,e_firebigbar_parts);
|
|
stp->s[stw_speedF].f = speed;
|
|
|
|
objsound_level(NA_LSE3_BURNER);
|
|
|
|
} else {
|
|
if ( obj_timer > 60 ) obj_mode=0;
|
|
}
|
|
|
|
}
|
|
|
|
|
|
extern void s_fireskybar_mother(void)
|
|
{
|
|
|
|
obj_angleY += -0x80;
|
|
obj_anglespeedY = -0x80;
|
|
// obj_worldY = obj_attY + (sin(obj_work1)+1.0) * 500;
|
|
// obj_work1 += 0x40;
|
|
|
|
s_firebigbar_mother();
|
|
|
|
}
|
|
|
|
|
|
/********************************************************************************/
|
|
/********************************************************************************/
|
|
/********************************************************************************/
|
|
/********************************************************************************/
|
|
/********************************************************************************/
|
|
/********************************************************************************/
|
|
/********************************************************************************/
|
|
/********************************************************************************/
|
|
/********************************************************************************/
|
|
/********************************************************************************/
|
|
/********************************************************************************/
|
|
/********************************************************************************/
|
|
/********************************************************************************/
|
|
/********************************************************************************/
|
|
/********************************************************************************/
|
|
/********************************************************************************/
|
|
/********************************************************************************/
|
|
/********************************************************************************/
|
|
/********************************************************************************/
|
|
/********************************************************************************/
|
|
/********************************************************************************/
|
|
/********************************************************************************/
|
|
/********************************************************************************/
|
|
/********************************************************************************/
|
|
/********************************************************************************/
|
|
/********************************************************************************/
|
|
/********************************************************************************/
|
|
/********************************************************************************/
|
|
/********************************************************************************/
|
|
/********************************************************************************/
|
|
/********************************************************************************/
|
|
/********************************************************************************/
|
|
/********************************************************************************/
|
|
/********************************************************************************/
|
|
/********************************************************************************/
|
|
/********************************************************************************/
|
|
/********************************************************************************/
|
|
/********************************************************************************/
|
|
/********************************************************************************/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/********************************************************************************
|
|
---------------------------
|
|
fire bubble program
|
|
---------------------------
|
|
********************************************************************************/
|
|
|
|
|
|
|
|
extern void s_firebubble_parts(void)
|
|
{
|
|
|
|
Mbitset(execstp->status,OBJECT_NOWATER);
|
|
|
|
s_enemybgcheck();
|
|
|
|
switch(obj_mode){
|
|
|
|
/*======= effect =======*/
|
|
case 0:
|
|
if ( obj_timer == 0 ){
|
|
obj_hmsselectNo = (long)(Randomf()*10);
|
|
obj_speedY = 30;
|
|
}
|
|
if ( (obj_movestatus & MOVESTAT_BGBOUND) ) obj_mode++;
|
|
break;
|
|
|
|
/*======== main ========*/
|
|
case 1:
|
|
if ( obj_timer == 0 ){
|
|
obj_speedY = 50;
|
|
obj_speedF = 30;
|
|
}
|
|
if ( obj_movestatus & MOVESTAT_STOP && obj_timer > 100 ) s_remove_obj(execstp);
|
|
break;
|
|
}
|
|
|
|
if ( obj_timer > 300 ) s_remove_obj(execstp);
|
|
|
|
s_enemymove(78);
|
|
|
|
obj_mail = 0;
|
|
}
|
|
|
|
/********************************************************************************
|
|
---------------------------
|
|
firebubble mother
|
|
---------------------------
|
|
********************************************************************************/
|
|
|
|
|
|
#define firebubblemother_random (execstp->s[stw_work0].d)
|
|
|
|
|
|
extern void s_firebubble_mother_1(void)
|
|
{
|
|
|
|
StrategyRecord *stp;
|
|
float sc;
|
|
|
|
switch(obj_mode){
|
|
case 0:
|
|
if ( obj_playerdist < 2000 ) obj_mode = 1;
|
|
break;
|
|
case 1:
|
|
stp = s_makeobj_nowpos(execstp,S_fireball_yellow,e_firebubble_parts);
|
|
sc = (10-obj_timer)*0.5;
|
|
stSetScale(stp,sc,sc,sc);
|
|
if ( obj_timer == 0 ) s_hitON_obj(stp);
|
|
if ( obj_timer > 10 ) obj_mode++;
|
|
break;
|
|
case 2:
|
|
if ( obj_timer == 0 ) firebubblemother_random = Randomf()*100;
|
|
if ( obj_timer > 100 + firebubblemother_random ) obj_mode = 0;
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
/*################*/
|
|
#endif
|
|
/*################*/
|
|
/*===============================================================================
|
|
end end end end end end end end
|
|
===============================================================================*/
|
|
|