348 lines
9.1 KiB
ArmAsm
348 lines
9.1 KiB
ArmAsm
/********************************************************************************
|
|
-------------------------
|
|
Ultra 64 MARIO Brothers
|
|
-------------------------
|
|
Strategy
|
|
|
|
Feburary 31 1996 programed by Iwamoto Daiki
|
|
********************************************************************************/
|
|
|
|
/*################*/
|
|
#ifdef ASSEMBLER
|
|
/*################*/
|
|
|
|
/********************************************************************************
|
|
Effect Path Data
|
|
********************************************************************************/
|
|
|
|
|
|
/********************************************************************************/
|
|
/* Water Buble for Item */
|
|
/********************************************************************************/
|
|
e_item_buble:
|
|
p_initialize(effect)
|
|
p_setbit(flag,stf_moveON | stf_FspeedON | stf_YspeedON )
|
|
p_softspritemodeON
|
|
p_setbit(flag,stf_moveON)
|
|
p_animereset
|
|
p_program(s_item_buble_init)
|
|
|
|
p_setf_random(speedY,3,6)
|
|
p_setangle_random(angleY,0,0)
|
|
|
|
p_wait(1)
|
|
p_while
|
|
p_program(s_item_buble)
|
|
p_loop
|
|
|
|
/*-----------------------------------------------------------------------------*/
|
|
|
|
e_item_ripple:
|
|
p_initialize(effect)
|
|
p_setbit(flag,stf_moveON)
|
|
p_setf(animeangleX,0)
|
|
p_setf(animeangleY,0)
|
|
p_setf(animeangleZ,0)
|
|
p_animereset
|
|
p_program(s_item_ripple_init) /* PlayerRipple Initialize */
|
|
|
|
p_animeinc
|
|
p_wait(6)
|
|
|
|
p_while
|
|
p_program(s_item_ripple_main)
|
|
p_animeinc
|
|
p_do(6)
|
|
p_program(s_item_ripple_main)
|
|
p_next
|
|
p_loop
|
|
|
|
/*--------------------------------------------------------------------------------------------*/
|
|
|
|
e_bombfire:
|
|
p_initialize(plfire)
|
|
p_setbit(flag,stf_moveON | stf_playerdistON)
|
|
p_softspritemodeON
|
|
p_setobjname(DAMAGE)
|
|
p_setd(ap,2)
|
|
p_hitON
|
|
p_sethitbox2(150,150,150)
|
|
p_animereset
|
|
p_program(s_bom_fire_init)
|
|
|
|
p_while
|
|
p_program(s_bom_fire)
|
|
p_animeinc
|
|
p_loop
|
|
|
|
/*--------------------------------------------------------------------------------------------*/
|
|
|
|
e_bom_smoke:
|
|
p_initialize(effect)
|
|
p_setbit(flag,stf_moveON | stf_FspeedON | stf_YspeedON )
|
|
p_softspritemodeON
|
|
p_animereset
|
|
p_program(s_bomsmoke_init)
|
|
|
|
p_wait(1)
|
|
p_while
|
|
p_program(s_samplesmoke_main)
|
|
p_animeinc
|
|
p_loop
|
|
|
|
/*--------------------------------------------------------------------------------------------*/
|
|
|
|
e_iwa_smoke:
|
|
p_initialize(effect)
|
|
p_setbit(flag,stf_moveON | stf_FspeedON | stf_YspeedON )
|
|
p_softspritemodeON
|
|
p_animereset
|
|
|
|
p_wait(1)
|
|
p_while
|
|
p_program(s_samplesmoke_main)
|
|
p_animeinc
|
|
p_loop
|
|
|
|
|
|
|
|
|
|
/*------------------------------------------------------------------------------*/
|
|
e_fire_bubble:
|
|
p_initialize(option)
|
|
p_softspritemodeON
|
|
p_setbit(flag,stf_moveON)
|
|
p_program(s_fire_bubble_init)
|
|
p_addf_random(worldX,-50,100) /* Xposition Random */
|
|
p_addf_random(worldY,-50,100) /* Zposition Random */
|
|
p_addf_random(worldZ,-50,100) /* Zposition Random */
|
|
p_jsr(move_f_bubble) /* 1 Set */
|
|
|
|
p_wait(1)
|
|
p_while
|
|
p_jsr(move_f_bubble)
|
|
p_program(s_fire_bubble_event)
|
|
p_loop
|
|
|
|
move_f_bubble:
|
|
p_addf_random(worldX,-2,4)
|
|
p_addf_random(worldZ,-2,4)
|
|
p_rts
|
|
/*--------------------------------------------------------------------------------------------*/
|
|
|
|
e_reset:
|
|
p_initialize(option)
|
|
p_setbit(flag,stf_moveON)
|
|
|
|
p_while
|
|
p_program(s_reset_main)
|
|
p_loop
|
|
|
|
|
|
|
|
|
|
|
|
/*################*/
|
|
#else
|
|
/*################*/
|
|
|
|
|
|
/***************************************************************************************************
|
|
C Program
|
|
****************************************************************************************************/
|
|
|
|
|
|
/***************************************************************************************************
|
|
Water Buble Event
|
|
***************************************************************************************************/
|
|
|
|
extern void s_item_buble_init(void)
|
|
{
|
|
|
|
execstp->s[stw_worldX].f += Randomf()*30;
|
|
execstp->s[stw_worldY].f += Randomf()*30;
|
|
execstp->s[stw_worldZ].f += Randomf()*30;
|
|
}
|
|
|
|
|
|
|
|
extern void s_item_buble(void)
|
|
{
|
|
|
|
StrategyRecord *stratp;
|
|
float waterY = mcWaterCheck(execstp->s[stw_worldX].f,execstp->s[stw_worldZ].f);
|
|
float bgY = execstp->s[stw_worldY].f;
|
|
|
|
if ( bgY > waterY ){
|
|
if (stratfree.next != NULL) {
|
|
stratp = s_makeobj(execstp,0,S_rippleA,e_dropripple);
|
|
stratp->s[stw_worldX].f = execstp->s[stw_worldX].f;
|
|
stratp->s[stw_worldY].f = bgY + 5;
|
|
stratp->s[stw_worldZ].f = execstp->s[stw_worldZ].f;
|
|
}
|
|
execstp->status = 0; /* s_removeobj */ /* object remove */
|
|
|
|
}
|
|
|
|
}
|
|
/********************************************************************************/
|
|
/* item ripple */
|
|
/********************************************************************************/
|
|
extern void s_item_ripple_init(void)
|
|
{
|
|
|
|
execstp->s[stw_worldY].f = mcWaterCheck(execstp->s[stw_worldX].f,execstp->s[stw_worldZ].f);
|
|
}
|
|
|
|
extern void s_item_ripple_main(void)
|
|
{
|
|
|
|
ulong counter = frameCounter;
|
|
|
|
/*---- End Check ----*/
|
|
|
|
|
|
if ((counter & 0x00000f) == 0x00) {
|
|
execstp->status = 0; /* Shape Remove */
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/***************************************************************************************************/
|
|
/***************************************************************************************************
|
|
Bomb Fire Event
|
|
***************************************************************************************************/
|
|
extern void s_bom_fire_init(void)
|
|
{
|
|
obj_remove_sound(NA_SE2_KIRAI); //SOUND
|
|
Viewshake(VS_SMALL);
|
|
execstp->s[stw_alpha].d = 255;
|
|
|
|
}
|
|
/***************************************************************************************************
|
|
Bomb Fire Event
|
|
***************************************************************************************************/
|
|
extern void s_bom_fire(void)
|
|
{
|
|
int i;
|
|
|
|
if (obj_timer == 9) {
|
|
|
|
if((mcWaterCheck(execstp->s[stw_worldX].f,execstp->s[stw_worldZ].f)) > execstp->s[stw_worldY].f) {
|
|
for (i=0; i<40; i++) s_makeobj_nowpos(execstp,S_waterdrop,e_fire_bubble);
|
|
}
|
|
else {
|
|
s_makeobj_nowpos(execstp,S_dust,e_bom_smoke);
|
|
}
|
|
|
|
execstp->status = 0; /* s_removeobj */ /* object remove */
|
|
}
|
|
|
|
|
|
(execstp->s[stw_alpha].d) -= 14;
|
|
|
|
s_set_scale((float)obj_timer/9+1.0);
|
|
|
|
|
|
}
|
|
/***************************************************************************************************
|
|
Bom Smoke Init
|
|
***************************************************************************************************/
|
|
extern void s_bomsmoke_init(void)
|
|
{
|
|
|
|
execstp->s[stw_worldY].f -= 300;
|
|
s_set_scale(10.0);
|
|
|
|
|
|
}
|
|
|
|
/***************************************************************************************************
|
|
Water Bomb Buble Init
|
|
***************************************************************************************************/
|
|
extern void s_fire_bubble_init(void)
|
|
{
|
|
stSetScale(execstp,2.0,2.0,1.0);
|
|
execstp->s[stw_work4].d = (int)(Randomf()*0x800)+0x800;
|
|
execstp->s[stw_work5].d = (int)(Randomf()*0x800)+0x800;
|
|
|
|
obj_timer = (int)(Randomf()*10);
|
|
obj_speedY = (int)(Randomf()*4)+4;
|
|
|
|
}
|
|
/***************************************************************************************************
|
|
Water Bomb Buble Event
|
|
***************************************************************************************************/
|
|
extern void s_fire_bubble_event(void)
|
|
{
|
|
float water = playerWorks[0].water;
|
|
|
|
/*------ scale Animation ---------*/
|
|
|
|
execstp->map.scale[0] = sin(execstp->s[stw_work2].d)*0.5+2.0;
|
|
execstp->s[stw_work2].d += execstp->s[stw_work4].d;
|
|
|
|
execstp->map.scale[1] = sin(execstp->s[stw_work3].d)*0.5+2.0;
|
|
execstp->s[stw_work3].d += execstp->s[stw_work5].d;
|
|
|
|
|
|
/*------ water check -----------*/
|
|
|
|
if ( execstp->s[stw_worldY].f > water ){
|
|
execstp->status = 0;
|
|
execstp->s[stw_worldY].f += 5;
|
|
s_makeobj_nowpos( execstp,S_rippleA,e_rippleA ); /* make water ripple */
|
|
}
|
|
|
|
if (obj_timer > FRAME*2) {
|
|
execstp->status = 0;
|
|
}
|
|
|
|
execstp->s[stw_worldY].f += execstp->s[stw_speedY].f;
|
|
obj_timer++;
|
|
}
|
|
|
|
/*================================================================================================*/
|
|
/* Obj Reset Event
|
|
/*
|
|
/*================================================================================================*/
|
|
/***************************************************************************************************
|
|
Reset
|
|
***************************************************************************************************/
|
|
extern void s_reset_main(void)
|
|
{
|
|
|
|
if (PlayerApproach(obj_worldX,obj_worldY,obj_worldZ,(execstp->s[stw_work1].f))==0) {
|
|
|
|
StrategyRecord* stp = s_makeobj_nowpos(execstp,(int)(execstp->s[stw_work0].d),(unsigned long*)(execstp->s[stw_work2].d));
|
|
stp->s[stw_actorcode].d = execstp->s[stw_actorcode].d;
|
|
execstp->status = 0;
|
|
|
|
}
|
|
|
|
}
|
|
/***************************************************************************************************
|
|
Reset
|
|
***************************************************************************************************/
|
|
extern void Obj_reset(int shape,unsigned long *pathpointer,int dist)
|
|
{
|
|
|
|
StrategyRecord* stp = s_makeobj_absolute(execstp,0,S_NULL,e_reset,obj_attX,obj_attY,obj_attZ,0,0,0);
|
|
|
|
// stp->s[stw_programselect].d = obj_programselect;
|
|
stp->s[stw_actorcode].d = execstp->s[stw_actorcode].d;
|
|
stp->s[stw_work0].d = shape;
|
|
stp->s[stw_work1].f = dist;
|
|
stp->s[stw_work2].d = (long)pathpointer;
|
|
|
|
|
|
}
|
|
|
|
|
|
/*################*/
|
|
#endif
|
|
/*################*/
|
|
|
|
|