/******************************************************************************** ------------------------- Ultra 64 MARIO Brothers ------------------------- File : pathswitchdoor.s Description : Date : 1995. Author : H.yajima ********************************************************************************/ /*################*/ #ifdef ASSEMBLER /*################*/ e_switchdoor_object: p_initialize(moveBG) p_setbit(flag,stf_moveON | stf_YangleSAME ) p_while p_program(s_switchdoor_object) p_program(stMainMoveBG) p_loop e_switchdoor: p_initialize(option) p_setbit(flag,stf_moveON | stf_YangleSAME ) p_while p_program(s_switchdoor) p_loop /*################*/ #else /*################*/ /******************************************************************************** switch door << door >> ********************************************************************************/ extern void s_switchdoor_object(void) { if ( obj_mode == 0 ){ if ( execstp->motherobj->s[stw_imm].d != 0 ) obj_mode++; } else if ( obj_mode == 1 ){ if ( obj_timer < 0x40 ) obj_angleY -= 0x100 * obj_programselect; else obj_mode++; } } /******************************************************************************** switch door << door >> ********************************************************************************/ typedef struct { short Xoffset; short shape; short *funlike; } SwitchDoorRecord; extern short pl_moveobj_03_check_info[]; extern short kdow_f_tr_check_info[]; static SwitchDoorRecord switchdoor_data[] = { { 320,S_movebg03,pl_moveobj_03_check_info }, { 410,S_movebg07,kdow_f_tr_check_info }, }; extern void s_switchdoor(void) { StrategyRecord *stp; int n; switch(obj_mode){ case 0: n = obj_programselect; stp = s_makeobj_chain(-1,switchdoor_data[n].Xoffset ,0,0,execstp,switchdoor_data[n].shape,e_switchdoor_object); stp->s[stw_angleY].d += 0x8000; s_set_shapeinfo(stp,switchdoor_data[n].funlike); stp = s_makeobj_chain(1,-switchdoor_data[n].Xoffset,0,0,execstp,switchdoor_data[n].shape,e_switchdoor_object); s_set_shapeinfo(stp,switchdoor_data[n].funlike); obj_mode++; break; case 1: if ( ( execstp->s[stw_work0].pointer = (void *)s_find_obj(e_switchdoor_switch)) != NULL ) obj_mode++; break; case 2: stp = ( StrategyRecord *)(execstp->s[stw_work0].pointer); if ( stp->s[stw_mode].d == MODE_SWITCH_ON ){ obj_imm = MODE_SWITCH_ON; objsound(NA_SE2_METAL_GATE); obj_mode++; if ( obj_programselect ) Na_NazoClearBgm(); } break; case 3: break; } } /*################*/ #endif /*################*/ /*=============================================================================== end end end end end end end end ===============================================================================*/