52 lines
1.5 KiB
C
52 lines
1.5 KiB
C
// lll_hexagonal_ring.c.inc
|
|
|
|
void hexagonal_ring_spawn_flames(void) {
|
|
struct Object *sp1C;
|
|
f32 size;
|
|
sp1C = spawn_object(o, MODEL_RED_FLAME, bhvVolcanoFlames);
|
|
sp1C->oPosY += 550.0f;
|
|
sp1C->oMoveAngleYaw = random_u16() << 0x10 >> 0x10;
|
|
sp1C->oForwardVel = random_float() * 40.0f + 20.0f;
|
|
sp1C->oVelY = random_float() * 50.0f + 10.0f;
|
|
size = random_float() * 6.0 + 3.0;
|
|
obj_scale_xyz(sp1C, size, size, size);
|
|
if (random_float() < 0.1)
|
|
cur_obj_play_sound_2(SOUND_GENERAL_VOLCANO_EXPLOSION);
|
|
}
|
|
|
|
void bhv_lll_rotating_hexagonal_ring_loop(void) {
|
|
UNUSED s32 unused;
|
|
o->oCollisionDistance = 4000.0f;
|
|
o->oDrawingDistance = 8000.0f;
|
|
switch (o->oAction) {
|
|
case 0:
|
|
if (gMarioObject->platform == o)
|
|
o->oAction++;
|
|
o->oAngleVelYaw = 0x100;
|
|
break;
|
|
case 1:
|
|
o->oAngleVelYaw = 256.0f - sins(o->oTimer << 7) * 256.0f;
|
|
if (o->oTimer > 128)
|
|
o->oAction++;
|
|
break;
|
|
case 2:
|
|
if (gMarioObject->platform != o)
|
|
o->oAction++;
|
|
if (o->oTimer > 128)
|
|
o->oAction++;
|
|
o->oAngleVelYaw = 0;
|
|
hexagonal_ring_spawn_flames();
|
|
break;
|
|
case 3:
|
|
o->oAngleVelYaw = sins(o->oTimer << 7) * 256.0f;
|
|
if (o->oTimer > 128)
|
|
o->oAction = 0;
|
|
break;
|
|
case 4:
|
|
o->oAction = 0;
|
|
break;
|
|
}
|
|
o->oAngleVelYaw = -o->oAngleVelYaw;
|
|
o->oMoveAngleYaw += o->oAngleVelYaw;
|
|
}
|