mirror of
https://github.com/coop-deluxe/sm64coopdx.git
synced 2024-10-20 12:12:39 +00:00
76 lines
2.5 KiB
C
76 lines
2.5 KiB
C
// lll_octagonal_rotating_mesh.c.inc
|
|
|
|
s16 D_8032F860[] = { 2, 30, 0x4000, 0, 1, 220, 900, 30, 1, 30, 0, -30, 2,
|
|
30, -0x4000, 0, 1, 220, 900, 30, 1, 30, 0, -30, 3, 0 };
|
|
s16 D_8032F894[] = { 4, 0, 0, 0, 1, 475, 900, 30, 1, 30, 0, -30, 2,
|
|
30, 0x8000, 0, 1, 475, 900, 30, 1, 30, 0, -30, 3, 0 };
|
|
s16 *D_8032F8C8[] = { D_8032F860, D_8032F894 };
|
|
|
|
|
|
s32 lll_octagonal_mesh_move(s16 *a0, s32 a1) {
|
|
switch (a0[a1]) {
|
|
case 4:
|
|
o->oMoveAngleYaw = a0[a1 + 2];
|
|
o->oForwardVel = a0[a1 + 3] / 100.0f;
|
|
if (cur_obj_is_mario_on_platform()) {
|
|
a1 += 4;
|
|
o->oTimer = 0;
|
|
}
|
|
break;
|
|
case 2:
|
|
o->oMoveAngleYaw = a0[a1 + 2];
|
|
o->oForwardVel = a0[a1 + 3] / 100.0f;
|
|
if (o->oTimer > a0[a1 + 1]) {
|
|
a1 += 4;
|
|
o->oTimer = 0;
|
|
}
|
|
break;
|
|
case 1:
|
|
approach_f32_signed(&o->oForwardVel, a0[a1 + 2] / 100.0f, a0[a1 + 3] / 100.0f);
|
|
if (o->oTimer > a0[a1 + 1]) {
|
|
a1 += 4;
|
|
o->oTimer = 0;
|
|
}
|
|
break;
|
|
case 3:
|
|
o->oForwardVel = 0.0f;
|
|
a1 = 0;
|
|
break;
|
|
}
|
|
return a1;
|
|
}
|
|
|
|
s32 lll_octagonal_mesh_find_y_offset(s32 *a0, f32 *a1, s32 a2, s32 a3) {
|
|
if (cur_obj_is_mario_on_platform()) {
|
|
if (a0[0] < 0x4000)
|
|
a0[0] += a2;
|
|
else
|
|
a0[0] = 0x4000;
|
|
} else {
|
|
if (a0[0] > 0)
|
|
a0[0] -= a2;
|
|
else
|
|
a0[0] = 0;
|
|
}
|
|
a1[0] = sins(a0[0]) * a3;
|
|
if (a0[0] == 0 || a0[0] == 0x4000)
|
|
return 1;
|
|
else
|
|
return 0;
|
|
}
|
|
|
|
void bhv_lll_moving_octagonal_mesh_platform_loop(void) {
|
|
if (o->oAction == 0) {
|
|
o->oHorizontalMovementUnkF8 = 0;
|
|
o->oAction++;
|
|
} else
|
|
o->oHorizontalMovementUnkF8 =
|
|
lll_octagonal_mesh_move(D_8032F8C8[o->oBehParams2ndByte], o->oHorizontalMovementUnkF8);
|
|
print_debug_top_down_objectinfo("number %d\n", o->oHorizontalMovementUnkF8);
|
|
cur_obj_move_using_fvel_and_gravity();
|
|
if (lll_octagonal_mesh_find_y_offset(&o->oHorizontalMovementUnk104, &o->oHorizontalMovementUnk108, 0x400, -80)) {
|
|
o->oHorizontalMovementUnkF4 += 0x800;
|
|
o->oHorizontalMovementUnk100 -= sins(o->oHorizontalMovementUnkF4) * 2;
|
|
}
|
|
o->oPosY = o->oHorizontalMovementUnk100 + o->oHomeY + o->oHorizontalMovementUnk108;
|
|
}
|