sm64

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

collide_particles.inc.c (2944B)


      1 // collide_particles.inc.c
      2 
      3 static s16 sTinyTriMovementParams[] = { 0xD000, 0,      0x3000, 0,      0xDE67, 0x2199,
      4                                         0x2199, 0x2199, 0xDE67, 0xDE67, 0x2199, 0xDE67 };
      5 
      6 static s16 sTinyStarMovementParams[] = { 0xE000, 0,      0,      0,      0x2000, 0,      0xE99A,
      7                                          0x1666, 0x1666, 0x1666, 0xE99A, 0xE99A, 0x1666, 0xE99A };
      8 
      9 void bhv_punch_tiny_triangle_loop(void) {
     10     if (o->oTimer == 0) {
     11         s16 sp1E = o->oMoveAngleYaw;
     12         o->oCollisionParticleUnkF4 = 1.28f;
     13         cur_obj_set_pos_relative(gMarioObject, 0.0f, 60.0f, 100.0f);
     14         o->oMoveAngleYaw = sp1E;
     15     }
     16 
     17     cur_obj_move_using_fvel_and_gravity();
     18     o->oAnimState = 5;
     19     cur_obj_scale(o->oCollisionParticleUnkF4);
     20     o->oCollisionParticleUnkF4 -= 0.2f;
     21 
     22     if (gDebugInfo[DEBUG_PAGE_EFFECTINFO][0] + 6 < o->oTimer) {
     23         obj_mark_for_deletion(o);
     24     }
     25 }
     26 
     27 void bhv_punch_tiny_triangle_init(void) {
     28     s32 i;
     29     UNUSED u8 filler[4];
     30 
     31     for (i = 0; i < 6; i++) {
     32         struct Object *triangle = spawn_object(o, MODEL_DIRT_ANIMATION, bhvPunchTinyTriangle);
     33         triangle->oMoveAngleYaw = gMarioObject->oMoveAngleYaw + sTinyTriMovementParams[2 * i] + 0x8000;
     34         triangle->oVelY = sins(sTinyTriMovementParams[2 * i + 1]) * 25.0f;
     35         triangle->oForwardVel = coss(sTinyTriMovementParams[2 * i + 1]) * 25.0f;
     36     }
     37 }
     38 
     39 void bhv_wall_tiny_star_particle_loop(void) {
     40     if (o->oTimer == 0) {
     41         s16 sp1E = o->oMoveAngleYaw;
     42         o->oCollisionParticleUnkF4 = 0.28f;
     43         cur_obj_set_pos_relative(gMarioObject, 0.0f, 30.0f, 110.0f);
     44         o->oMoveAngleYaw = sp1E;
     45     }
     46 
     47     cur_obj_move_using_fvel_and_gravity();
     48     o->oAnimState = 4;
     49     cur_obj_scale(o->oCollisionParticleUnkF4);
     50     o->oCollisionParticleUnkF4 -= 0.015f;
     51 }
     52 
     53 void bhv_tiny_star_particles_init(void) {
     54     s32 i;
     55     UNUSED u8 filler[4];
     56 
     57     for (i = 0; i < 7; i++) {
     58         struct Object *particle = spawn_object(o, MODEL_CARTOON_STAR, bhvWallTinyStarParticle);
     59         particle->oMoveAngleYaw = gMarioObject->oMoveAngleYaw + sTinyStarMovementParams[2 * i] + 0x8000;
     60         particle->oVelY = sins(sTinyStarMovementParams[2 * i + 1]) * 25.0f;
     61         particle->oForwardVel = coss(sTinyStarMovementParams[2 * i + 1]) * 25.0f;
     62     }
     63 }
     64 
     65 void bhv_pound_tiny_star_particle_loop(void) {
     66     if (o->oTimer == 0) {
     67         o->oCollisionParticleUnkF4 = 0.28f;
     68         o->oForwardVel = 25.0f;
     69         o->oPosY -= 20.0f;
     70         o->oVelY = 14.0f;
     71     }
     72 
     73     cur_obj_move_using_fvel_and_gravity();
     74     o->oAnimState = 4;
     75     cur_obj_scale(o->oCollisionParticleUnkF4);
     76     o->oCollisionParticleUnkF4 -= 0.015f;
     77 }
     78 
     79 void bhv_pound_tiny_star_particle_init(void) {
     80     s32 sp24;
     81     s32 sp20 = 8;
     82 
     83     for (sp24 = 0; sp24 < sp20; sp24++) {
     84         struct Object *particle = spawn_object(o, MODEL_CARTOON_STAR, bhvPoundTinyStarParticle);
     85         particle->oMoveAngleYaw = (sp24 * 65536) / sp20;
     86     }
     87 }