=== lever-free bodies in ov_SC06_010 sharing a callee or global with func_8018179C (10 found; top 6 by shared symbols) — read them for the SHAPE ===
--- func_8017FE3C (src/ov_SC06_010/ov_SC06_010_jr_8017A4AC.c:5844) shares 6: func_8012B1B4 func_8012B608 func_8012B744 func_8012BE54 func_8012BE98 func_8012CBCC ---
void func_8017FE3C(s32 a0)
{
    s16 hi;
    s16 pos;
    s32 sp10[3];
    s32 r;
    u16 state;
    s32 tmp0;

    hi = *(s16 *)(a0 + 0x8A);
    pos = *(s16 *)(a0 + 0xA);

    if (pos >= hi - 8) {
        if (*(s32 *)(a0 + 0x48) >= 0) {
            *(s32 *)(a0 + 0x48) = -0x8000;
            *(s32 *)(a0 + 0x14) = *(s32 *)(a0 + 0x14) >> 1;
        }
    } else {
        if (hi + 8 >= pos) {
            if (*(s32 *)(a0 + 0x48) <= 0) {
                *(s32 *)(a0 + 0x48) = 0x8000;
                *(s32 *)(a0 + 0x14) = *(s32 *)(a0 + 0x14) >> 1;
            }
        }
    }

    if (*(s32 *)(a0 + 0xDC) < -0x40000) {
        *(s32 *)(a0 + 0xDC) = -0x40000;
    }

    sp10[0] = 0;
    sp10[1] = 0;
    sp10[2] = *(s32 *)(a0 + 0xDC);
    func_8012B1B4(a0, (s32)sp10);
    func_8012CBCC(a0);

    if (0x1323F < *(s16 *)(a0 + 6) * *(s16 *)(a0 + 6) +
                      (*(s16 *)(a0 + 0xA) + 0x482) * (*(s16 *)(a0 + 0xA) + 0x482)) {
        func_8012ADE4(a0);
        *(s32 *)(a0 + 0x14) = 0;
    }

    state = *(u16 *)(a0 + 0x34);
    switch (state) {
    case 0: {
        s32 p20;
        s32 ret;
        s32 p744;
        s32 v1p;
        s16 snd;
        s32 b608;

        ret = ((s32 (*)(s32, u16 *))func_8012BE98)(a0, (u16 *)(a0 + 0x88));
        if (ret <= 0x3FFFF) {
            goto set_state1;
        }
        p744 = func_8012B744((void *)(a0 + 4), (void *)(a0 + 0x88));
        v1p = *(s32 *)(a0 + 0x20);
        snd = *(s16 *)(v1p + 0x12);
        b608 = func_8012B608(snd, p744, 8);
        p20 = *(s32 *)(a0 + 0x20);
        *(u16 *)(p20 + 0x12) = *(u16 *)(p20 + 0x12) + b608;
        tmp0 = *(s32 *)(a0 + 0x20);
        v1p = tmp0;
        *(u16 *)(v1p + 0x12) = *(u16 *)(v1p + 0x12) & 0xFFF;
        func_8012B1B4(a0, (s32)sp10);
        break;
    }
    case 1: {
        s32 ret;
        s32 t;

        *(s32 *)(a0 + 0xDC) = *(s32 *)(a0 + 0xDC) << 1;
        ret = ((s32 (*)(s32, u16 *))func_8012BE98)(a0, (u16 *)(a0 + 0x88));
        t = ret > 0x3FFFF;
        if (t == 0) {
            break;
        }
        goto rand_tail;
    }
    case 2: {
        s32 p744;
        s32 v1p;
        s16 snd;
        s32 b608;
        s32 p20;

        p744 = func_8012B744((void *)(a0 + 4), (void *)(a0 + 0x88));
        v1p = *(s32 *)(a0 + 0x20);
        snd = *(s16 *)(v1p + 0x12);
        b608 = func_8012B608(snd, p744, 0x10);
        p20 = *(s32 *)(a0 + 0x20);
        *(u16 *)(p20 + 0x12) = *(u16 *)(p20 + 0x12) + b608;
        v1p = *(s32 *)(a0 + 0x20);
        *(u16 *)(v1p + 0x12) = *(u16 *)(v1p + 0x12) & 0xFFF;
        *(s32 *)(a0 + 0xDC) = *(s32 *)(a0 + 0xDC) >> 1;
        if (*(s16 *)(a0 + 0x102) == 0) {
            state = 3;
            goto store_state;
        }
        *(s16 *)(a0 + 0x102) = *(s16 *)(a0 + 0x102) - 1;
        goto end_switch;
    }
    case 3: {
        s32 ret;
        s32 p744;
        s32 v1p;
        s16 snd;
        s32 b608;

        ret = ((s32 (*)(s32, u16 *))func_8012BE98)(a0, (u16 *)(a0 + 0x88));
        *(s32 *)(a0 + 0xDC) = *(s32 *)(a0 + 0xDC) << 1;
        if (ret > 0x40000) {
            p744 = func_8012B744((void *)(a0 + 4), (void *)(a0 + 0x88));
            v1p = *(s32 *)(a0 + 0x20);
            snd = *(s16 *)(v1p + 0x12);
            b608 = func_8012B608(snd, p744, 1);
            if ((u32)(b608 + 0xFF) < 0x1FF) {
                goto end_switch;
            }
            goto rand_tail;
        }
        goto set_state1;
    }
    }

    goto end_switch;

rand_tail:
    *(u16 *)(a0 + 0x34) = 2;
    r = rand();
    *(s16 *)(a0 + 0x102) = (r & 7) + 8;
    goto end_switch;

set_state1:
    state = 1;
store_state:
    *(u16 *)(a0 + 0x34) = state;

end_switch:
    if (*(s16 *)(a0 + 0x100) != 0) {
        *(s16 *)(a0 + 0x100) = *(s16 *)(a0 + 0x100) - 1;
    } else {
        s32 ret3;

        ret3 = ((s32 (*)(s32))func_8012BE54)(a0);
        if (ret3 <= 0x24000) {
            *(s16 *)(a0 + 0x2) = 2;
            *(s16 *)(a0 + 0x100) = 0x3C;
        }
    }
}

--- func_801825DC (src/ov_SC06_010/ov_SC06_010_jr_8017A4AC.c:7549) shares 3: func_8012B1B4 func_8012CBCC func_801810FC ---
void func_801825DC(s32 a0)
{

    extern s32 D_80126B60;
    s32 sp10[3];

    if (*(s32 *)(a0 + 8) >= D_80126B60 - 0x200000) {
        if (*(s32 *)(a0 + 0x48) >= 0) {
            *(s32 *)(a0 + 0x48) = -0x8000;
            *(s32 *)(a0 + 0x14) = *(s32 *)(a0 + 0x14) >> 1;
        }
    } else {
        if (D_80126B60 - 0x180000 >= *(s32 *)(a0 + 8)) {
            if (*(s32 *)(a0 + 0x48) <= 0) {
                *(s32 *)(a0 + 0x48) = 0x8000;
                *(s32 *)(a0 + 0x14) = *(s32 *)(a0 + 0x14) >> 1;
            }
        }
    }

    *(s32 *)(a0 + 0xDC) = *(s32 *)(a0 + 0xDC) >> 1;

    sp10[0] = 0;
    sp10[1] = 0;
    sp10[2] = *(s32 *)(a0 + 0xDC);
    func_8012B1B4(a0, (s32)sp10);
    func_8012CBCC(a0);
    func_801810FC(a0, 0x51);

    *(s16 *)(*(s32 *)(a0 + 0x20) + 0x12) += func_8012B8E4(a0, 0x10);
    *(u16 *)(*(s32 *)(a0 + 0x20) + 0x12) &= 0xFFF;

    *(u16 *)(a0 + 0x100) -= 1;
    if (*(s16 *)(a0 + 0x100) == 0) {
        *(s16 *)(a0 + 2) = 3;
        *(u16 *)(a0 + 0x100) = 5;
        *(s32 *)(a0 + 0x1C) = 0;
    }
}

--- func_8017AE2C (src/ov_SC06_010/ov_SC06_010_jr_8017A4AC.c:2787) shares 3: func_8012B608 func_8012B744 func_8012BE98 ---
void func_8017AE2C(s32 param_1) {

    extern s16 D_801B2BD8;
    extern s16 D_801B2BDA;
    extern s16 D_801B2BE4;
    s32 pv = param_1;
    s16 *g = &D_801B2BD8;

    switch (g[0]) {
    case 0:
    default:
        return;
    case 1:
        g[1] = (u16)g[1] - 1;
        if (g[1] <= 0) {
            *(u16 *)(*(s32 *)(pv + 0x20) + 0x12) = (u16)g[2];
            goto reset_both;
        }
        {
            s32 r = func_8012B608(*(s16 *)(*(s32 *)(pv + 0x20) + 0x12), g[2], 6);
            *(u16 *)(*(s32 *)(pv + 0x20) + 0x12) =
                *(u16 *)(*(s32 *)(pv + 0x20) + 0x12) + r;
        }
        return;
    case 2:
        func_8012B178(pv, (s32)g[4] << 8);
        func_8012AD80(pv);
        *(u16 *)(pv + 0xA) -= 8;
        ((s32 (*)(u8 *))func_8012B030)((u8 *)pv);
        break;
    case 3:
        if (g[1] != 0) {
            if (g[5] != 0) {
                void *p = (void *)(pv + 4);
                if ((s16)func_80012A60(*(s16 *)(*(s32 *)(pv + 0x20) + 0x12),
                                       (s16)func_8012B744(p, &g[6])) < 0x100) {
                    g[1] = 0;
                }
                *(s16 *)(*(s32 *)(pv + 0x20) + 0x12) =
                    func_8012B744(p, &D_801B2BE4);
                func_8012B178(pv, 0xFFFA0000);
                func_8012AD80(pv);
                *(u16 *)(pv + 0xA) -= 8;
                ((s32 (*)(u8 *))func_8012B030)((u8 *)pv);
                /* &D_801B2BD8+0xC == &D_801B2BE4; distinct rtx defeats gcc's address-CSE
                   so BE98's arg rematerializes instead of sharing the store's reg (byte-gate). */
                if (func_8012BE98(pv, (u16 *)((s32)&D_801B2BD8 + 0xC)) < 0x101) {
                    D_801B2BD8 = 0;
                    D_801B2BDA = 0;
                }
            }
            {
                s32 t = func_8012B744((void *)(pv + 4), &g[6]);
                s32 r = func_8012B608(*(s16 *)(*(s32 *)(pv + 0x20) + 0x12), t, g[3]);
                *(u16 *)(*(s32 *)(pv + 0x20) + 0x12) =
                    *(u16 *)(*(s32 *)(pv + 0x20) + 0x12) + r;
            }
            g[1] = (u16)g[1] - 1;
            if (g[1] > 0) {
                return;
            }
            g[1] = 0;
            return;
        }
        *(s16 *)(*(s32 *)(pv + 0x20) + 0x12) =
            func_8012B744((void *)(pv + 4), &D_801B2BE4);
        func_8012B178(pv, 0xFFFA0000);
        func_8012AD80(pv);
        *(u16 *)(pv + 0xA) -= 8;
        ((s32 (*)(u8 *))func_8012B030)((u8 *)pv);
        /* see note above: distinct rtx for the same address defeats address-CSE. */
        if (func_8012BE98(pv, (u16 *)((s32)&D_801B2BD8 + 0xC)) < 0x101) {
            D_801B2BD8 = 0;
            D_801B2BDA = 0;
        }
        return;
    case 4:
        func_8012AD80(pv);
    }
    g[1] = (u16)g[1] - 1;
    if (g[1] > 0) {
        return;
    }
reset_both:
    g[0] = 0;
    g[1] = 0;
    return;
}

--- func_801857F4 (src/ov_SC06_010/ov_SC06_010_jr_8017A4AC.c:9471) shares 2: func_8012B1B4 func_8012CBCC ---
void func_801857F4(s32 a0) {
    extern u8 D_801A71A4[];
    extern u8 D_801AE960[];
    extern u8 D_801AEA50[];
    extern u8 D_801AEB40[];
    s32 pad[4];

    func_8012B1B4(a0, (s32)D_801A71A4);
    func_8012CBCC(a0);
    func_80182F4C(a0, 0x48);
    *(s16 *)(*(s32 *)(a0 + 0x20) + 0x12) += func_8012B8E4(a0, 0x10);
    *(u16 *)(*(s32 *)(a0 + 0x20) + 0x12) &= 0xFFF;

    *(u16 *)(a0 + 0x100) -= 1;
    if (*(s16 *)(a0 + 0x100) == 0) {
        *(s16 *)(a0 + 2) = 6;
        *(u16 *)(a0 + 0x100) = 0x2D;
        *(s32 *)(a0 + 0x1C) = 0;
        *(s16 *)(a0 + 0x104) = 0;
        func_8012A828(a0, D_801AE960);

        if (*(s32 *)(a0 + 0xCC) != 0) {
            func_8012A828(*(s32 *)(a0 + 0xCC), D_801AEA50);
        }
        if (*(s32 *)(a0 + 0xD0) != 0) {
            func_8012A828(*(s32 *)(a0 + 0xD0), D_801AEB40);
        }
    }
}

--- func_80180170 (src/ov_SC06_010/ov_SC06_010_jr_8017A4AC.c:6004) shares 2: func_8012B1B4 func_8012CBCC ---
void func_80180170(s32 a0)
{
    extern s32 D_80126B60;
    s32 sp10[3];

    if (*(s32 *)(a0 + 8) >= D_80126B60 - 0x200000) {
        if (*(s32 *)(a0 + 0x48) >= 0) {
            *(s32 *)(a0 + 0x48) = -0x8000;
            *(s32 *)(a0 + 0x14) = *(s32 *)(a0 + 0x14) >> 1;
        }
    } else {
        if (D_80126B60 - 0x180000 >= *(s32 *)(a0 + 8)) {
            if (*(s32 *)(a0 + 0x48) <= 0) {
                *(s32 *)(a0 + 0x48) = 0x8000;
                *(s32 *)(a0 + 0x14) = *(s32 *)(a0 + 0x14) >> 1;
            }
        }
    }

    *(s32 *)(a0 + 0xDC) = *(s32 *)(a0 + 0xDC) >> 1;

    sp10[0] = 0;
    sp10[1] = 0;
    sp10[2] = *(s32 *)(a0 + 0xDC);
    func_8012B1B4(a0, (s32)sp10);
    func_8012CBCC(a0);

    if (0x1323F < *(s16 *)(a0 + 6) * *(s16 *)(a0 + 6) +
                      (*(s16 *)(a0 + 0xA) + 0x482) * (*(s16 *)(a0 + 0xA) + 0x482)) {
        func_8012ADE4(a0);
        *(s32 *)(a0 + 0x14) = 0;
    }

    *(s16 *)(*(s32 *)(a0 + 0x20) + 0x12) += func_8012B8E4(a0, 0x10);
    *(u16 *)(*(s32 *)(a0 + 0x20) + 0x12) &= 0xFFF;

    *(u16 *)(a0 + 0x100) -= 1;
    if (*(s16 *)(a0 + 0x100) == 0) {
        *(s16 *)(a0 + 2) = 3;
        *(u16 *)(a0 + 0x100) = 5;
        *(s32 *)(a0 + 0x1C) = 0;
    }
}

--- func_8012BE54 (src/shared/ov/func_8012BE54.h:7) shares 1: func_8012BE98 ---
void func_8012BE54(s32 a0) {
    u16 sp[3];
    sp[0] = D_80126B5E;
    sp[1] = D_80126B62;
    sp[2] = D_80126B66;
    func_8012BE98(a0, sp);
}

