sm64

A Super Mario 64 decompilation
Log | Files | Refs | README | LICENSE

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 }