/******************************************************************************** ------------------------- Ultra 64 MARIO Brothers ------------------------- File : pathmaincastleobj.s Description : Date : 1995. Author : H.yajima ********************************************************************************/ /*################*/ #ifdef ASSEMBLER /*################*/ /********************************************************************************/ /* */ /* doorkey demo animation */ /* */ /********************************************************************************/ e_doorkey_demo: p_initialize(option) p_set_pointer(skelanime,doorkey_anime) p_setbit(flag,stf_moveON ) p_while p_program(s_doorkey_demo) p_loop e_takekey_demo: p_initialize(option) p_set_pointer(skelanime,doorkey_anime) p_setbit(flag,stf_moveON ) p_while p_program(s_takekey_demo) p_loop /********************************************************************************/ /* */ /* main castle water switch */ /* */ /********************************************************************************/ e_maincastle_waterswitch: p_initialize(option) p_program(s_maincastle_waterswitch) p_end /********************************************************************************/ /* */ /* main room switch */ /* */ /********************************************************************************/ e_sel1b_erase_water: p_initialize(moveBG) p_setbit(flag,stf_moveON) p_setshapeinfo(selt_sss_c_info) p_program(s_sel1b_erase_water_init) p_while p_program(s_sel1b_erase_water) p_program(stMainMoveBG) p_loop /********************************************************************************/ /* */ /* main room switch */ /* */ /********************************************************************************/ e_sel1b_waterwall_switch: p_initialize(moveBG) p_setbit(flag,stf_moveON) p_setf(movebg_checkdist,30000) p_while p_program(s_sel1b_waterwall_switch) p_program(stMainMoveBG) p_loop /********************************************************************************/ /* */ /* ami program */ /* */ /********************************************************************************/ e_maincastle_net: p_initialize(moveBG) p_setbit(flag,stf_moveON) p_setshapeinfo(main_net_info) p_setf(movebg_checkdist,30000) p_while p_program(s_maincastle_net) p_loop /********************************************************************************/ /* */ /* main castle clock */ /* */ /********************************************************************************/ e_clock_long: p_initialize(option) p_setd(anglespeedZ,-0x180) p_jmp(clock_common) e_clock_short: p_initialize(option) p_setd(anglespeedZ,-0x20) clock_common: p_setbit(flag,stf_moveON) p_program(s_areastage_init) p_while p_program(s_clock_check) p_loop /*################*/ #else /*################*/ /******************************************************************************** C Program (maincastleobj) ********************************************************************************/ extern void s_sel1b_waterwall_switch(void) { extern short sel1b_c2_info[]; extern short sel1b_c3_info[]; if ( wave_dummy_backup & 2 ) execstp->shapeinfo = (short *)SegmentToVirtual(sel1b_c3_info); else execstp->shapeinfo = (short *)SegmentToVirtual(sel1b_c2_info); } /********************************************************************************/ /********************************************************************************/ /********************************************************************************/ /********************************************************************************/ /********************************************************************************/ /********************************************************************************/ /********************************************************************************/ /********************************************************************************/ /* water switch normal */ /********************************************************************************/ #define ERASE_WATER_YPOS -2450 #define ERASE_WATER_SWITCH_YPOS_DEC 20*4 #define erase_water_flag (execstp->s[stw_work1].d) static void sel1b_erase_water_1(void) { StrategyRecord *stp; switch(obj_mode){ case 0: if ( s_checkplayer_hipaatack() ){ obj_mode++; s_kemuri(); } break; case 1: if ( obj_timer < 4 ) obj_worldY -= 20; else obj_mode++; break; case 2: if ( ( stp = s_find_obj(e_sel1b_erase_water) ) != NULL ){ if ( stp->s[stw_mode].d < 2 ) obj_mode++; }; break; case 3: if ( ( stp = s_find_obj(e_sel1b_erase_water) ) != NULL ){ if ( stp->s[stw_mode].d >= 2 ){ obj_mode++; BuSetItemFlag(BU_ITEM_DRAINSW); /* Set Drain Water Switch */ Na_NazoClearBgm(); } } break; case 4: objsound_level(NA_LSE2_WATERLEVEL_DOWN); if ( obj_timer < 300 ){ waterline_basic[2] = s_chase_position(waterline_basic[2],ERASE_WATER_YPOS,5); waterline_basic[0] = s_chase_position(waterline_basic[0],ERASE_WATER_YPOS,5); SendMotorVib(2); /* MOTOR 1997.5.30 */ } else obj_mode++; break; case 5: break; } } /********************************************************************************/ /* water switch normal */ /********************************************************************************/ static void sel1b_erase_water_2(void) { if ( obj_timer == 0 ){ obj_worldY -= ERASE_WATER_SWITCH_YPOS_DEC; waterline_basic[2] = ERASE_WATER_YPOS; waterline_basic[0] = ERASE_WATER_YPOS; } } /********************************************************************************/ /* */ /* water switch main */ /* */ /********************************************************************************/ /*------------------------------------------------------------------------------*/ extern void s_sel1b_erase_water_init(void) { if ( BuGetItemFlag() & BU_ITEM_DRAINSW ) erase_water_flag = 1; } /*------------------------------------------------------------------------------*/ extern void s_sel1b_erase_water(void) { if ( erase_water_flag ) sel1b_erase_water_2(); else sel1b_erase_water_1(); *(waterline+1+6*2+5) = waterline_basic[2]; *(waterline+1+6*0+5) = waterline_basic[0]; } /*------------------------------------------------------------------------------*/ extern void s_maincastle_waterswitch(void) { if ( BuGetItemFlag() & BU_ITEM_DRAINSW ){ *(waterline+1+6*0+5) = -800; *(waterline+1+6*1+5) = -800; } } /********************************************************************************/ /* */ /* door key animation demo */ /* */ /********************************************************************************/ extern unsigned long ZoomDoorKey(int code,MapNode *node, void *data) { if (code == MAP_CBACK_EXEC) { StrategyRecord *stp = (StrategyRecord *)hmsActiveShape; ((MapScale *)(node->next))->scaling = stp->s[stw_work0].f; } return(0); } /********************************************************************************/ /* */ /* openkey demo */ /* */ /********************************************************************************/ #define doorkey_scale(n) (execstp->s[stw_work0].f = (n)) extern void s_doorkey_demo(void) { int anime_frame = execstp->map.skelanim.frame; s_set_skelanimeNo(0); if ( anime_frame < 40-2 ) doorkey_scale(0); else if ( anime_frame < 51-2 ) doorkey_scale(0.2); else if ( anime_frame < 60-2 ) doorkey_scale(0.2+(anime_frame-51-2)*0.11875f); else if ( anime_frame < 61-2 ) doorkey_scale(1.10); else if ( anime_frame < 62-2 ) doorkey_scale(1.05); else doorkey_scale(1.0); if ( obj_timer > 150 ) s_remove_obj(execstp); } /********************************************************************************/ /* */ /* takekey demo */ /* */ /********************************************************************************/ extern void s_takekey_demo(void) { int anime_frame = execstp->map.skelanim.frame; s_set_skelanimeNo(1); if ( anime_frame < 40-2 ) doorkey_scale(0.2); else if ( anime_frame < 54-2 ) doorkey_scale(0.2+(anime_frame-40-2)*0.042857f); else if ( anime_frame < 96-2 ) doorkey_scale(0.8); else if ( anime_frame < 103-2 ) doorkey_scale(0.2+(103-2-anime_frame)*0.085714f); else doorkey_scale(0.2); if ( obj_timer > 138 ) s_remove_obj(execstp); } /********************************************************************************/ /* */ /* mainmap next */ /* */ /********************************************************************************/ extern void s_maincastle_net(void) { if ( BuGetItemFlag() & BU_ITEM_DRAINSW ){ s_change_shape(S_NULL); } else { stMainMoveBG(); } } /********************************************************************************/ /* */ /* clock program */ /* */ /********************************************************************************/ extern void s_clock_check(void) { BGCheckData *bgdata; unsigned short time = obj_animeangleZ; obj_groundY = mcBGGroundCheck(player_worldX,player_worldY,player_worldZ,&bgdata ); if ( obj_mode == 0 ){ if ( bgdata->BGattr == 0 && obj_timer > 3 ) obj_mode++; } else if ( obj_mode == 1 ){ if ( ( bgdata != NULL ) && ( bgdata->BGattr == 244 || bgdata->BGattr == 245 || bgdata->BGattr == 246 ) ){ if ( s_check_pathname(e_clock_long) ){ if ( time < 2730 ) stage_objparameter = 3; else if ( time < 2730*10 ) stage_objparameter = 1; else if ( time < 2730*14 ) stage_objparameter = 2; else if ( time < 2730*23 ) stage_objparameter = 0; else stage_objparameter = 3; } obj_mode++; } else { // objsound_level(NA_LSE2_CLOCKHAND); } } if ( obj_mode < 2 ) s_move_animeangle(); } /*################*/ #endif /*################*/ /*=============================================================================== end end end end end end end end ===============================================================================*/