sliding_platform.inc.c (1767B)
1 // sliding_platform.inc.c 2 3 void bhv_wf_sliding_platform_init(void) { 4 o->oFaceAngleYaw -= 0x4000; 5 o->oPosX += 2.0f; 6 o->oHomeX = o->oPosX; 7 8 switch (o->oBhvParams2ndByte) { 9 case WF_SLID_BRICK_PTFM_BP_MOV_VEL_10: 10 o->oWFSlidBrickPtfmMovVel = 10.0f; 11 break; 12 13 case WF_SLID_BRICK_PTFM_BP_MOV_VEL_15: 14 o->oWFSlidBrickPtfmMovVel = 15.0f; 15 break; 16 17 case WF_SLID_BRICK_PTFM_BP_MOV_VEL_20: 18 o->oWFSlidBrickPtfmMovVel = 20.0f; 19 break; 20 } 21 22 o->oTimer = random_float() * 100.0f; 23 } 24 25 void bhv_wf_sliding_platform_loop(void) { 26 switch (o->oAction) { 27 case WF_SLID_BRICK_PTFM_ACT_WAIT: 28 if (o->oTimer > 100) { 29 o->oAction = WF_SLID_BRICK_PTFM_ACT_EXTEND; 30 o->oForwardVel = o->oWFSlidBrickPtfmMovVel; 31 } 32 break; 33 34 case WF_SLID_BRICK_PTFM_ACT_EXTEND: 35 if (o->oTimer >= 500.0f / o->oWFSlidBrickPtfmMovVel) { 36 o->oForwardVel = 0.0f; 37 o->oPosX = o->oHomeX + 510.0f; 38 } 39 40 if (o->oTimer == 60) { 41 o->oAction = WF_SLID_BRICK_PTFM_ACT_RETRACT; 42 o->oForwardVel = o->oWFSlidBrickPtfmMovVel; 43 o->oMoveAngleYaw -= 0x8000; 44 } 45 break; 46 47 case WF_SLID_BRICK_PTFM_ACT_RETRACT: 48 if (o->oTimer >= 500.0f / o->oWFSlidBrickPtfmMovVel) { 49 o->oForwardVel = 0.0f; 50 o->oPosX = o->oHomeX; 51 } 52 53 if (o->oTimer == 90) { 54 o->oAction = WF_SLID_BRICK_PTFM_ACT_EXTEND; 55 o->oForwardVel = o->oWFSlidBrickPtfmMovVel; 56 o->oMoveAngleYaw -= 0x8000; 57 } 58 break; 59 } 60 }