flamethrower.inc.c (2395B)
1 // flamethrower.inc.c 2 3 void bhv_flamethrower_flame_loop(void) { 4 f32 scale; 5 s32 sp18; 6 7 if (o->oTimer == 0) { 8 o->oAnimState = (s32)(random_float() * 10.0f); 9 obj_translate_xyz_random(o, 10.0f); 10 } 11 12 if (o->oBhvParams2ndByte == 2) { 13 scale = o->oTimer * (o->oForwardVel - 6.0f) / 100.0 + 2.0; 14 } else { 15 scale = o->oTimer * (o->oForwardVel - 20.0) / 100.0 + 1.0; 16 } 17 18 if (o->oBhvParams2ndByte == 3) { 19 o->hitboxHeight = 200.0f; 20 o->hitboxDownOffset = 150.0f; 21 o->oVelY = -28.0f; 22 23 cur_obj_update_floor_height(); 24 25 if (o->oPosY - 25.0f * scale < o->oFloorHeight) { 26 o->oVelY = 0; 27 o->oPosY = o->oFloorHeight + 25.0f * scale; 28 } 29 30 sp18 = o->parentObj->oFlameThowerFlameUnk110 / 1.2; 31 } else { 32 sp18 = o->parentObj->oFlameThowerFlameUnk110; 33 } 34 35 cur_obj_scale(scale); 36 37 if (o->oBhvParams2ndByte == 4) { 38 o->oPosY += o->oForwardVel; // weird? 39 } else { 40 cur_obj_move_using_fvel_and_gravity(); 41 } 42 43 if (o->oTimer > sp18) { 44 obj_mark_for_deletion(o); 45 } 46 47 o->oInteractStatus = 0; 48 } 49 50 void bhv_flamethrower_loop(void) { 51 struct Object *flame; 52 f32 flameVel; 53 s32 sp34; 54 s32 model; 55 UNUSED u8 filler[8]; 56 57 if (o->oAction == 0) { 58 if ((gCurrLevelNum != LEVEL_BBH || gMarioOnMerryGoRound == TRUE) 59 && o->oDistanceToMario < 2000.0f) { 60 o->oAction++; 61 } 62 } else if (o->oAction == 1) { 63 model = MODEL_RED_FLAME; 64 flameVel = 95.0f; 65 66 if (o->oBhvParams2ndByte == 1) { 67 model = MODEL_BLUE_FLAME; 68 } 69 70 if (o->oBhvParams2ndByte == 2) { 71 flameVel = 50.0f; 72 } 73 74 sp34 = 1; 75 76 if (o->oTimer < 60) { 77 sp34 = 15; 78 } else if (o->oTimer < 74) { 79 sp34 = 75 - o->oTimer; // Range: [15..2] 80 } else { 81 o->oAction++; 82 } 83 84 o->oFlameThowerUnk110 = sp34; 85 86 flame = spawn_object_relative(o->oBhvParams2ndByte, 0, 0, 0, o, model, bhvFlamethrowerFlame); 87 flame->oForwardVel = flameVel; 88 89 cur_obj_play_sound_1(SOUND_AIR_BLOW_FIRE); 90 } else if (o->oTimer > 60) { 91 o->oAction = 0; 92 } 93 } 94 95 void bhv_rr_rotating_bridge_platform_loop(void) { 96 o->oMoveAngleYaw -= 0x80; 97 o->oAngleVelYaw = -0x80; 98 99 bhv_flamethrower_loop(); 100 }