// 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; }