181 lines
4.6 KiB
OpenEdge ABL
181 lines
4.6 KiB
OpenEdge ABL
/********************************************************************************
|
|
-------------------------
|
|
Ultra 64 MARIO Brothers
|
|
-------------------------
|
|
|
|
File : pathdosun.s
|
|
Description :
|
|
Date : 1995.10.23
|
|
Author : H.yajima
|
|
|
|
********************************************************************************/
|
|
|
|
#define DOSUN_SCALE 1.4
|
|
|
|
|
|
/*################*/
|
|
#ifdef ASSEMBLER
|
|
/*################*/
|
|
|
|
/********************************************************************************
|
|
sabaku dosun
|
|
********************************************************************************/
|
|
e_sabaku_dosun:
|
|
p_initialize(moveBG)
|
|
p_setbit(flag,stf_moveON | stf_YangleSAME | stf_playerdistON )
|
|
p_setshapeinfo(py_obj01_check_info)
|
|
p_BGcheckYset
|
|
p_addf(worldY,1)
|
|
p_save_nowpos
|
|
p_while
|
|
p_program(s_dosun)
|
|
p_program(stMainMoveBG);
|
|
p_loop
|
|
|
|
/********************************************************************************
|
|
toride dosun (1)
|
|
********************************************************************************/
|
|
e_dosun:
|
|
p_initialize(moveBG)
|
|
p_setshapeinfo(dosun_info)
|
|
p_setbit(flag,stf_moveON | stf_YangleSAME | stf_playerdistON )
|
|
p_BGcheckYset
|
|
p_addf(worldY,1)
|
|
p_save_nowpos
|
|
p_set_scale(140)
|
|
p_setf(shapeLOD,4000)
|
|
p_while
|
|
p_program(s_dosun)
|
|
p_program(stMainMoveBG);
|
|
p_loop
|
|
|
|
/********************************************************************************
|
|
toride dosun (2)
|
|
********************************************************************************/
|
|
e_dosun_power:
|
|
p_initialize(moveBG)
|
|
p_setshapeinfo(dosun_info2)
|
|
p_setbit(flag,stf_moveON | stf_YangleSAME | stf_playerdistON )
|
|
p_BGcheckYset
|
|
p_addf(worldY,1)
|
|
p_set_scale(140)
|
|
p_save_nowpos
|
|
p_setf(shapeLOD,4000)
|
|
p_while
|
|
p_program(s_dosun)
|
|
p_program(stMainMoveBG);
|
|
p_loop
|
|
|
|
/*-----------------------------------------------------------------------------*/
|
|
|
|
|
|
|
|
|
|
|
|
/*################*/
|
|
#else
|
|
/*################*/
|
|
/********************************************************************************
|
|
C Program
|
|
********************************************************************************/
|
|
|
|
#define dosun_timework (execstp->s[stw_work0].d)
|
|
|
|
/********************************************************************************/
|
|
/* dosun wait */
|
|
/********************************************************************************/
|
|
static void dosun_wait(void)
|
|
{
|
|
|
|
if ( obj_timer == 0 ) dosun_timework = Randomf()*10+20;
|
|
if ( obj_timer > dosun_timework ) obj_mode = mode_dosun_up;
|
|
|
|
}
|
|
|
|
/********************************************************************************/
|
|
/* dosun down */
|
|
/********************************************************************************/
|
|
static void dosun_down(void)
|
|
{
|
|
|
|
obj_speedY += -4;
|
|
obj_worldY += obj_speedY;
|
|
|
|
if ( obj_worldY < obj_attY ){
|
|
obj_worldY = obj_attY;
|
|
obj_speedY = 0;
|
|
obj_mode = mode_dosun_downend;
|
|
}
|
|
|
|
}
|
|
|
|
/********************************************************************************/
|
|
/* dosun down end */
|
|
/********************************************************************************/
|
|
static void dosun_downend(void)
|
|
{
|
|
|
|
if ( obj_timer == 0 ){
|
|
if ( obj_playerdist < 1500 ){
|
|
s_call_Viewshake(VS_SMALL);
|
|
objsound(NA_SE3_STONE);
|
|
}
|
|
}
|
|
|
|
if ( obj_timer >= 10 ) obj_mode = mode_dosun_wait;
|
|
|
|
}
|
|
|
|
/********************************************************************************/
|
|
/* dosun stop */
|
|
/* up ---- stop */
|
|
/********************************************************************************/
|
|
static void dosun_stop(void)
|
|
{
|
|
if ( obj_timer == 0 ) dosun_timework = Randomf()*30+10;
|
|
if ( obj_timer > dosun_timework ) obj_mode = mode_dosun_down;
|
|
}
|
|
|
|
/********************************************************************************/
|
|
/* dosun up */
|
|
/********************************************************************************/
|
|
static void dosun_up(void)
|
|
{
|
|
if ( obj_timer > 40 + (execstp->s[stw_programselect].d) ){
|
|
obj_mode = mode_dosun_stop;
|
|
obj_worldY += 5;
|
|
} else {
|
|
obj_worldY += 10;
|
|
}
|
|
}
|
|
|
|
|
|
/********************************************************************************/
|
|
/* dosun */
|
|
/********************************************************************************/
|
|
static void *dosun_modejmp[] = {
|
|
|
|
dosun_up,
|
|
dosun_stop,
|
|
dosun_down,
|
|
dosun_downend,
|
|
dosun_wait
|
|
|
|
};
|
|
|
|
extern void s_dosun(void)
|
|
{
|
|
|
|
s_modejmp(dosun_modejmp);
|
|
|
|
}
|
|
|
|
/*################*/
|
|
#endif
|
|
/*################*/
|
|
/*===============================================================================
|
|
end end end end end end end end
|
|
===============================================================================*/
|
|
|
|
|