sm64

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

white_puff_explode.inc.c (1179B)


      1 // white_puff_explode.inc.c
      2 
      3 void bhv_white_puff_exploding_loop(void) {
      4     if (o->oTimer == 0) {
      5         cur_obj_compute_vel_xz();
      6         o->oWhitePuffUnkF4 = o->header.gfx.scale[0];
      7         switch (o->oBhvParams2ndByte) {
      8             case 2:
      9                 o->oOpacity = 254;
     10                 o->oWhitePuffUnkF8 = -21;
     11                 o->oWhitePuffUnkFC = 0;
     12                 break;
     13             case 3:
     14                 o->oOpacity = 254;
     15                 o->oWhitePuffUnkF8 = -13;
     16                 o->oWhitePuffUnkFC = 1;
     17                 break;
     18         }
     19     }
     20 
     21     cur_obj_move_using_vel_and_gravity();
     22     cur_obj_apply_drag_xz(o->oDragStrength);
     23 
     24     if (o->oVelY > 100.0f) {
     25         o->oVelY = 100.0f;
     26     }
     27 
     28     if (o->oTimer > 20) {
     29         obj_mark_for_deletion(o);
     30     }
     31 
     32     if (o->oOpacity) {
     33         f32 scale;
     34         o->oOpacity += o->oWhitePuffUnkF8;
     35         if (o->oOpacity < 2) {
     36             obj_mark_for_deletion(o);
     37         }
     38         if (o->oWhitePuffUnkFC) {
     39             scale = o->oWhitePuffUnkF4 * ((254 - o->oOpacity) / 254.0);
     40         } else {
     41             scale = o->oWhitePuffUnkF4 * (o->oOpacity / 254.0);
     42         }
     43         cur_obj_scale(scale);
     44     }
     45 }