sm64

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

bomp.inc.c (3073B)


      1 // bomp.inc.c
      2 
      3 void bhv_small_bomp_init(void) {
      4     o->oFaceAngleYaw -= 0x4000;
      5     o->oSmallBompInitX = o->oPosX;
      6     o->oTimer = random_float() * 100.0f;
      7 }
      8 
      9 void bhv_small_bomp_loop(void) {
     10     switch (o->oAction) {
     11         case BOMP_ACT_WAIT:
     12             if (o->oTimer > 100) {
     13                 o->oAction = BOMP_ACT_POKE_OUT;
     14                 o->oForwardVel = 30.0f;
     15             }
     16             break;
     17 
     18         case BOMP_ACT_POKE_OUT:
     19             if (o->oPosX > 3450.0f) {
     20                 o->oPosX = 3450.0f;
     21                 o->oForwardVel = 0.0f;
     22             }
     23 
     24             if (o->oTimer == 15.0) {
     25                 o->oAction = BOMP_ACT_EXTEND;
     26                 o->oForwardVel = 40.0f;
     27                 cur_obj_play_sound_2(SOUND_OBJ_UNKNOWN2);
     28             }
     29             break;
     30 
     31         case BOMP_ACT_EXTEND:
     32             if (o->oPosX > 3830.0f) {
     33                 o->oPosX = 3830.0f;
     34                 o->oForwardVel = 0.0f;
     35             }
     36 
     37             if (o->oTimer == 60) {
     38                 o->oAction = BOMP_ACT_RETRACT;
     39                 o->oForwardVel = 10.0f;
     40                 o->oMoveAngleYaw -= 0x8000;
     41                 cur_obj_play_sound_2(SOUND_OBJ_UNKNOWN2);
     42             }
     43             break;
     44 
     45         case BOMP_ACT_RETRACT:
     46             if (o->oPosX < 3330.0f) {
     47                 o->oPosX = 3330.0f;
     48                 o->oForwardVel = 0.0f;
     49             }
     50 
     51             if (o->oTimer == 90) {
     52                 o->oAction = BOMP_ACT_POKE_OUT;
     53                 o->oForwardVel = 25.0f;
     54                 o->oMoveAngleYaw -= 0x8000;
     55             }
     56             break;
     57     }
     58 }
     59 
     60 void bhv_large_bomp_init(void) {
     61     o->oMoveAngleYaw += 0x4000;
     62     o->oTimer = random_float() * 100.0f;
     63 }
     64 
     65 void bhv_large_bomp_loop(void) {
     66     switch (o->oAction) {
     67         case BOMP_ACT_WAIT:
     68             if (o->oTimer > 100) {
     69                 o->oAction = BOMP_ACT_POKE_OUT;
     70                 o->oForwardVel = 30.0f;
     71             }
     72             break;
     73 
     74         case BOMP_ACT_POKE_OUT:
     75             if (o->oPosX > 3450.0f) {
     76                 o->oPosX = 3450.0f;
     77                 o->oForwardVel = 0.0f;
     78             }
     79 
     80             if (o->oTimer == 15.0) {
     81                 o->oAction = BOMP_ACT_EXTEND;
     82                 o->oForwardVel = 10.0f;
     83                 cur_obj_play_sound_2(SOUND_OBJ_UNKNOWN2);
     84             }
     85             break;
     86 
     87         case BOMP_ACT_EXTEND:
     88             if (o->oPosX > 3830.0f) {
     89                 o->oPosX = 3830.0f;
     90                 o->oForwardVel = 0.0f;
     91             }
     92 
     93             if (o->oTimer == 60) {
     94                 o->oAction = BOMP_ACT_RETRACT;
     95                 o->oForwardVel = 10.0f;
     96                 o->oMoveAngleYaw -= 0x8000;
     97                 cur_obj_play_sound_2(SOUND_OBJ_UNKNOWN2);
     98             }
     99             break;
    100 
    101         case BOMP_ACT_RETRACT:
    102             if (o->oPosX < 3330.0f) {
    103                 o->oPosX = 3330.0f;
    104                 o->oForwardVel = 0.0f;
    105             }
    106 
    107             if (o->oTimer == 90) {
    108                 o->oAction = BOMP_ACT_POKE_OUT;
    109                 o->oForwardVel = 25.0f;
    110                 o->oMoveAngleYaw -= 0x8000;
    111             }
    112             break;
    113     }
    114 }