/******************************************************************************** ------------------------- Ultra 64 MARIO Brothers ------------------------- File : pathkopa3bg.s Description : Date : 1995. Author : H.yajima ********************************************************************************/ /*################*/ #ifdef ASSEMBLER /*################*/ /******************************************************************************** ------------------------- kopa(3) moveBG Program ------------------------- ********************************************************************************/ e_kopa3_moveBG: p_initialize(moveBG) p_setbit(flag,stf_moveON ) p_setf(shapeLOD,20000) p_setf(movebg_checkdist,20000) p_save_nowpos p_while p_program(s_kopa3_moveBG) p_program(stMainMoveBG) p_loop /*################*/ #else /*################*/ /******************************************************************************** ======================== kopa(3) moveBG Program ======================== ********************************************************************************/ typedef struct { short *funlike; short posX; short posZ; short angY; } KopaBGRecord; extern short kopa3_A_info[]; extern short kopa3_B_info[]; extern short kopa3_C_info[]; extern short kopa3_D_info[]; extern short kopa3_E_info[]; extern short kopa3_F_info[]; extern short kopa3_G_info[]; extern short kopa3_H_info[]; extern short kopa3_I_info[]; extern short kopa3_J_info[]; static KopaBGRecord kopa_fin_bgdata[] = { { NULL , 0, 0 ,0 }, /* 0 */ { kopa3_A_info, -800,-1000 ,0xae00 }, /* 1 */ { kopa3_B_info, -1158, 390 ,0xb800 }, /* 2 */ { kopa3_C_info, -1158, 390 ,0xe200 }, /* 3 */ { kopa3_D_info, 0, 1240 ,0xe800 }, /* 4 */ { kopa3_E_info, 0, 1240 ,0x1800 }, /* 5 */ { kopa3_F_info, 1158, 390 ,0x1e00 }, /* 6 */ { kopa3_G_info, 1158, 390 ,0x4800 }, /* 7 */ { kopa3_H_info, 800,-1000 ,0x5200 }, /* 8 */ { kopa3_I_info, 800,-1000 ,0x8400 }, /* 9 */ { kopa3_J_info, -800,-1000 ,0x7c00 }, /* 10 */ }; #define mother_kopa (execstp->s[stw_work1].pointer) #define kopa3bg_timer (execstp->s[stw_work2].d) /******************************************************************************** kopa3 moveBG initialize !! ********************************************************************************/ static void kopa_fin_moveBG_init(void) { mother_kopa = (void *)s_find_obj(e_kopa); s_set_shapeinfo(execstp,kopa_fin_bgdata[obj_programselect].funlike); if ( mother_kopa != NULL ) obj_mode = mode_kopa_fin_moveBG_wait; } /******************************************************************************** kopa_fin moveBG waitting !! ********************************************************************************/ static void kopa_fin_moveBG_wait(void) { float dist; StrategyRecord *mother = (StrategyRecord *)mother_kopa; if ( mother->ride_strat == execstp ){ if ( (mother->s[stw_mode].d == mode_s_kopa_jump_atom ) && ( mother->s[stw_work0].d & KOPA_SUPERJUMP ) ){ obj_mode = mode_kopa_fin_moveBG_burn; } } if ( ( mother->s[stw_hp].d == 1 ) && ( ( mother->s[stw_mode].d == mode_s_kopa_punch ) || ( mother->s[stw_actionmode].d != 0 ) ) ){ obj_process = 1; } #ifdef yajima if ( effect_p7 ) obj_process = 1; #endif if ( obj_process == 0 ) kopa3bg_timer = 0; else { if ( (20+effect_p6) * (obj_programselect-1) < kopa3bg_timer ) obj_mode = mode_kopa_fin_moveBG_burn; kopa3bg_timer++; } } /******************************************************************************** kopa_fin moveBG burn !! ********************************************************************************/ static void kopa_fin_moveBG_burn(void) { float wpos[3]; short angle; float r; StrategyRecord *mother = (StrategyRecord *)mother_kopa; if ( obj_timer == 0 || obj_timer == 22 ) objsound(NA_SE2_STAGE_CRUMBLE); // if ( obj_timer == 0 ) s_call_Viewshake(VS_SMALL); if (obj_timer < 22 ){ Viewshake(VS_QUAKE); obj_speedY = 8; obj_gravity = 0; } else { obj_gravity = -4; } if ( ( obj_timer % 2 == 0 ) && obj_timer < 14 ){ angle = kopa_fin_bgdata[obj_programselect].angY + 0x100*effect_p1; r = 290 * ( 6 - obj_timer / 2 ); s_copy_f(wpos,&obj_worldX); obj_worldX = kopa_fin_bgdata[obj_programselect].posX + r * sin(angle+5296); obj_worldZ = kopa_fin_bgdata[obj_programselect].posZ + r * cos(angle+5296); obj_worldY = 307; s_burneffect(4,0,100); obj_worldX = kopa_fin_bgdata[obj_programselect].posX + r * sin(angle-5296); obj_worldZ = kopa_fin_bgdata[obj_programselect].posZ + r * cos(angle-5296); s_burneffect(4,0,100); s_copy_f(&obj_worldX,wpos); } s_optionmove_F(); if ( obj_timer > 300 ) s_remove_obj(execstp); } /******************************************************************************** kopa_fin moveBG ********************************************************************************/ static void *kopa_fin_moveBG_modejmp[] = { kopa_fin_moveBG_init, kopa_fin_moveBG_wait, kopa_fin_moveBG_burn }; extern void s_kopa3_moveBG(void) { s_modejmp(kopa_fin_moveBG_modejmp); } /*################*/ #endif /*################*/ /*=============================================================================== end end end end end end end end ===============================================================================*/