/******************************************************************************** ------------------------- Ultra 64 MARIO Brothers ------------------------- File : pathclearstar.s Description : Date : 1995. Author : H.yajima ********************************************************************************/ /*################*/ #ifdef ASSEMBLER /*################*/ /******************************************************************************** enemy making star ********************************************************************************/ e_enemystar2: p_initialize(item) p_setbit(flag,stf_moveON ) p_setd(programselect,1) p_jmp(enemystar_common) e_enemystar: p_initialize(item) p_setbit(flag,stf_moveON ) enemystar_common: p_save_nowpos p_program(check_star_backup) p_while p_program(s_enemystar) p_loop /*################*/ #else /*################*/ /******************************************************************************** ================================ Enemy Star Backup Table ================================ Used << work9 >> initialize position ********************************************************************************/ extern void check_star_backup(void) { int acode; if ( ( obj_enemyinfo & ENEMYINFO_EXTSTAR ) == 0 ){ execstp->s[stw_actorcode].d = execstp->motherobj->s[stw_actorcode].d; } acode = (( execstp->s[stw_actorcode].d )>>24 )&0xff; if ( s_index_bit(acode) & BuGetStarFlag(activePlayerNo-1,activeCourseNo-1) ){ s_change_shape(S_shadestar); } objsound(NA_SE2_STAR_APPEAR); #ifdef yajima rmonpf(("star %d\n",acode)); #endif } /******************************************************************************** =============== Star HitCheck =============== ********************************************************************************/ static HitCheckRecord tripstar_hit = { OBJNAME_TRIPSTAR, 0,0,0,0, /* flag,ap,hp,coin */ 80,50, /* player attack hitarea */ 0, 0, /* player damage hitarea */ }; /******************************************************************************** STAR HITCHECK PROGRAM ********************************************************************************/ static void hitcheck_star(void) { s_set_hitparam(execstp,&tripstar_hit); /* Set HitCheck Param */ if ( obj_mail & EMAIL_PLAYERHIT ){ RemoveShape(execstp); Mbitclr(obj_mail,EMAIL_PLAYERHITALL); } } /*------------------------------------------------------------------------------- check player postion ------------------------------------------------------------------------------*/ static void check_playerpos(void) { float dx,dz; obj_attX = player_worldX; obj_attZ = player_worldZ; obj_attY = player_worldY; obj_attY += 250; obj_worldY = obj_attY; dx = obj_attX - obj_worldX; dz = obj_attZ - obj_worldZ; obj_speedF = (sqrtf(dx*dx+dz*dz))/23; } /*------------------------------------------------------------------------------- check now postion ------------------------------------------------------------------------------*/ static void check_nowpos(void) { obj_speedF = 0; obj_attY = obj_worldY; } /******************************************************************************** Enemystar Library ********************************************************************************/ static void star_rotation(void) { if ( obj_anglespeedY > 0x400 ) obj_anglespeedY -= 0x40; } /******************************************************************************** ENEMYSTAR PROGRAM ********************************************************************************/ extern void s_enemystar(void) { if ( obj_mode == 0 ){ if ( obj_timer == 0 ){ cameraDemoStrat(CAM_DEMO_LOOKOBJ,execstp); //CAMERA DEMO s_begin_enemydemo(STRATMAIN_DEMOMODE+STRATMAIN_PLAYERSTOP); //Strategy Stop Mbitset( execstp->status,OBJECT_DEMOMOVEENTRY ); //kaijo only me obj_anglespeedY = 0x800; if ( obj_programselect == 0 ) check_playerpos(); else check_nowpos(); obj_angleY = s_calc_returnangle(); obj_speedY = 50; obj_gravity = -4; s_kemuri(); } objsound_level(NA_LSE2_STAR_MOVE); s_makeobj_nowpos(execstp,S_NULL,e_twinkle_special); if ( obj_speedY < 0 && obj_worldY < obj_attY ){ obj_mode++; obj_speedF = 0; obj_speedY = 20; obj_gravity = -1; if ( execstp->s[stw_enemyinfo].d & ENEMYINFO_EXTSTAR ){ Na_Star100AppearBgm(); } else { Na_StarAppearBgm(); } } } else if ( obj_mode == 1 ){ if ( obj_speedY < -4 ) obj_speedY = -4; if ( obj_speedY < 0 && obj_worldY < obj_attY ){ demoseqcode = 1; // CAMERA DEMO END obj_speedY = 0; obj_gravity = 0; obj_mode++; } s_makeobj_nowpos(execstp,S_NULL,e_twinkle_special); } else if ( obj_mode == 2 ){ if ( ( Camerawork->demomode == 0 ) && ( ENDdemomode == 0 ) ){ s_end_enemydemo(STRATMAIN_DEMOMODE+STRATMAIN_PLAYERSTOP); Mbitclr( execstp->status,OBJECT_DEMOMOVEENTRY ); obj_mode++; } } else { hitcheck_star(); star_rotation(); } s_optionmove_F(); obj_animeangleY += obj_anglespeedY; obj_mail = 0; } /******************************************************************************** ENEMYSTAR PROGRAM ********************************************************************************/ extern void s_make_extstar(int starNo) { StrategyRecord *stp; stp = s_makeobj_nowpos(execstp,S_polystar,e_enemystar); stp->s[stw_actorcode].d = ( starNo << 24 ); stp->s[stw_enemyinfo].d = ENEMYINFO_EXTSTAR; s_set_angle(stp,0,0,0); } /*################*/ #endif /*################*/ /*=============================================================================== end end end end end end end end ===============================================================================*/