rolling_log.inc.c (4548B)
1 // rolling_log.inc.c 2 3 // why are the falling platforms and rolling logs grouped 4 // together? seems strange, but it also cooresponds to the 5 // behavior script grouping if the same file is assumed. 6 // hypothesis is that the object in the middle here used to be 7 // a rolling log of another variation. 8 9 void bhv_ttm_rolling_log_init(void) { 10 o->oPitouneUnkF8 = 3970.0f; 11 o->oPitouneUnkFC = 3654.0f; 12 o->oPitouneUnkF4 = 271037.0f; 13 14 o->oMoveAngleYaw = 8810; 15 o->oForwardVel = 0.0f; 16 o->oVelX = 0.0f; 17 o->oVelZ = 0.0f; 18 o->oFaceAnglePitch = 0; 19 o->oAngleVelPitch = 0; 20 } 21 22 void rolling_log_roll_log(void) { 23 if (gMarioObject->platform == o) { 24 f32 sp24 = (gMarioObject->header.gfx.pos[2] - o->oPosZ) * coss(-1*o->oMoveAngleYaw) 25 - (gMarioObject->header.gfx.pos[0] - o->oPosX) * sins(-1*o->oMoveAngleYaw); 26 if (sp24 > 0) { 27 o->oAngleVelPitch += 0x10; 28 } else { 29 o->oAngleVelPitch -= 0x10; 30 } 31 32 if (o->oAngleVelPitch > 0x200) { 33 o->oAngleVelPitch = 0x200; 34 } 35 36 if (o->oAngleVelPitch < -0x200) { 37 o->oAngleVelPitch = -0x200; 38 } 39 } else { 40 if (is_point_close_to_object(o, o->oHomeX, o->oHomeY, o->oHomeZ, 100)) { 41 if (o->oAngleVelPitch != 0) { 42 if (o->oAngleVelPitch > 0) { 43 o->oAngleVelPitch -= 0x10; 44 } else { 45 o->oAngleVelPitch += 0x10; 46 } 47 48 if (o->oAngleVelPitch < 0x10 && o->oAngleVelPitch > -0x10) { 49 o->oAngleVelPitch = 0; 50 } 51 } 52 } else { 53 if (o->oAngleVelPitch != 0x100) { 54 if (o->oAngleVelPitch > 0x100) { 55 o->oAngleVelPitch -= 0x10; 56 } else { 57 o->oAngleVelPitch += 0x10; 58 } 59 60 if (o->oAngleVelPitch < 0x110 && o->oAngleVelPitch > 0xF0) { 61 o->oAngleVelPitch = 0x100; 62 } 63 } 64 } 65 } 66 } 67 68 void bhv_rolling_log_loop(void) { 69 f32 prevX = o->oPosX; 70 f32 prevZ = o->oPosZ; 71 72 rolling_log_roll_log(); 73 74 o->oForwardVel = o->oAngleVelPitch / 0x40; 75 o->oVelX = o->oForwardVel * sins(o->oMoveAngleYaw); 76 o->oVelZ = o->oForwardVel * coss(o->oMoveAngleYaw); 77 78 o->oPosX += o->oVelX; 79 o->oPosZ += o->oVelZ; 80 81 if (o->oPitouneUnkF4 < sqr(o->oPosX - o->oPitouneUnkF8) + sqr(o->oPosZ - o->oPitouneUnkFC)) { 82 o->oForwardVel = 0.0f; 83 o->oPosX = prevX; 84 o->oPosZ = prevZ; 85 o->oVelX = 0.0f; 86 o->oVelZ = 0.0f; 87 } 88 89 o->oFaceAnglePitch += o->oAngleVelPitch; 90 if (absf_2(o->oFaceAnglePitch & 0x1FFF) < 528.0f && o->oAngleVelPitch != 0) { 91 cur_obj_play_sound_2(SOUND_GENERAL_UNKNOWN1_2); 92 } 93 } 94 95 void volcano_act_1(void) { 96 o->oRollingLogUnkF4 += 4.0f; 97 o->oAngleVelPitch += o->oRollingLogUnkF4; 98 o->oFaceAnglePitch -= o->oAngleVelPitch; 99 100 if (o->oFaceAnglePitch < -0x4000) { 101 o->oFaceAnglePitch = -0x4000; 102 o->oAngleVelPitch = 0; 103 o->oRollingLogUnkF4 = 0; 104 o->oAction = 2; 105 cur_obj_play_sound_2(SOUND_GENERAL_BIG_POUND); 106 set_camera_shake_from_point(SHAKE_POS_LARGE, o->oPosX, o->oPosY, o->oPosZ); 107 } 108 } 109 110 void volcano_act_3(void) { 111 o->oAngleVelPitch = 0x90; 112 o->oFaceAnglePitch += o->oAngleVelPitch; 113 114 if (o->oFaceAnglePitch > 0) { 115 o->oFaceAnglePitch = 0; 116 } 117 118 if (o->oTimer == 200) { 119 o->oAction = 0; 120 } 121 } 122 123 void bhv_volcano_trap_loop(void) { 124 switch (o->oAction) { 125 case 0: 126 if (is_point_within_radius_of_mario(o->oPosX, o->oPosY, o->oPosZ, 1000)) { 127 o->oAction = 1; 128 cur_obj_play_sound_2(SOUND_GENERAL_QUIET_POUND2); 129 } 130 break; 131 132 case 1: 133 volcano_act_1(); 134 break; 135 136 case 2: 137 if (o->oTimer < 8) { 138 o->oPosY = o->oHomeY + sins(o->oTimer * 0x1000) * 10.0f; 139 } 140 if (o->oTimer == 50) { 141 cur_obj_play_sound_2(SOUND_GENERAL_UNK45); 142 o->oAction = 3; 143 } 144 break; 145 146 case 3: 147 volcano_act_3(); 148 break; 149 } 150 } 151 152 void bhv_lll_rolling_log_init(void) { 153 o->oPitouneUnkF8 = 5120.0f; 154 o->oPitouneUnkFC = 6016.0f; 155 o->oPitouneUnkF4 = 1048576.0f; 156 157 o->oMoveAngleYaw = 0x3FFF; 158 o->oForwardVel = 0.0f; 159 o->oVelX = 0.0f; 160 o->oVelZ = 0.0f; 161 o->oFaceAnglePitch = 0; 162 o->oAngleVelPitch = 0; 163 }