=== lever-free bodies in ov_SC06_022 sharing a callee or global with func_80185578 (17 found; top 6 by shared symbols) — read them for the SHAPE ===
--- func_80183FEC (src/ov_SC06_022/ov_SC06_022_jr_80182D08.c:3628) shares 3: func_8001C924 func_801873B0 func_80187414 ---
void func_80183FEC(s32 p) {
    s32 buf20[2];
    s32 iVar1;
    s32 iVar2;
    s32 t;
    void *ptr;

    func_8012E9C0(p);
    *(s32 *)(p + 0x1C) = 0;
    *(u16 *)(p + 0x5C) = *(u16 *)(p + 0x5C) & 0xFFFE;
    func_8012B23C(p);

    t = (*(s16 *)(p + 0x60) * *(s16 *)(*(s32 *)(p + 0x78) + 0x30)) >> 12;
    iVar1 = t;
    t = t << 16;
    if (t <= 0) {
        iVar1 = 1;
    }

    if (*(u32 *)(p + 0xE0) & 1) {
        ((void (*)(s32, void *, void *))func_8012F214)(p, D_801BD0BC, buf20);
        if (func_80187318(buf20, *(s16 *)(*(s32 *)(p + 0x20) + 0x12), 0x400) != 0) {
            func_80146A6C(6, (void *)p, *(s16 *)(p + 0x7C), *(s16 *)(p + 0x7E),
                          *(s16 *)(p + 0x80), 0, 0);
            t = *(u16 *)(p + 0xFE) - iVar1;
            *(s16 *)(p + 0xFE) = t;
            if ((s16)t <= 0) {
                func_80187414(p, D_801BD0BC + 8, buf20, 0xC);
                func_801873B0(p, buf20, 0x27F, 0, 0, 0);
                *(s32 *)(p + 0x58) = (s32)D_801BCFDC | 0x40000000 | 0x20000000;
                *(u32 *)(p + 0xE0) = *(u32 *)(p + 0xE0) & 0xFFFFFFFE;
                func_8001C924(*(s32 *)(p + 0x20), &D_801C35D4);
            }
            func_8012B14C(p, (s32)D_801BD144);
            *(s16 *)(p + 0x34) = 3;
            return;
        }
    }

    if (*(u16 *)(p + 0x5E) != 0x1D) {
        if (*(u8 *)(p + 0xC8) != 0) {
            func_8002A520(p);
        }
        if (*(u8 *)(p + 0xC9) != 0) {
            func_8002A790(p);
        }
    }

    t = *(u16 *)(p + 0x76) - iVar1;
    *(s16 *)(p + 0x76) = t;
    if ((s16)t <= 0) {
        func_80131E00(p, 0xC);
        return;
    }

    *(s16 *)(p + 0x98) = 0;
    *(u16 *)(*(s32 *)(p + 0x20) + 0x12) = (*(u16 *)(p + 0x62) + 0x800) & 0xFFF;
    iVar2 = *(s32 *)(p + 0x20);
    *(s16 *)(iVar2 + 0x14) = 0;
    *(s16 *)(iVar2 + 0x10) = 0;
    func_8012B2CC(p);
    ((s32 (*)())func_80187EF4)(p, 0x9B7);

    switch (*(u16 *)(p + 0x5E)) {
    case 1:
    case 2:
    case 3:
    case 4:
    case 6:
    case 7:
    case 0xB:
    case 0xC:
    case 0x10:
    case 0x13:
    case 0x14:
    case 0x15:
    case 0x16:
    case 0x17:
    case 0x18:
    case 0x19:
    case 0x1A:
    case 0x23:
    case 0x24:
    case 0x25:
    case 0x28:
    case 0x2B:
    case 0x2C:
    case 0x2D:
    case 0x2E:
    case 0x2F:
    case 0x30:
    case 0x31:
    case 0x32:
        *(s16 *)(p + 0x34) = 4;
        func_8012A828(p, D_801BD2A4[*(u16 *)(p + 0x70) & 0xF]);
        return;
    case 8:
        func_8012A828(p, D_801BD2A4[*(u16 *)(p + 0x70) & 0xF]);
        ptr = D_801BD124;
        break;
    case 5:
    case 0x1D:
    case 0x20:
    case 0x26:
    case 0x2A:
        ptr = D_801BD134;
        func_8012A828(p, D_801D4CC0);
        *(u32 *)(p + 0xE0) = *(u32 *)(p + 0xE0) | 8;
        *(u16 *)(p + 0xAE) = *(u16 *)(p + 0xAE) | 1;
        func_80185578(p, -0x8000);
        break;
    default:
        ptr = D_801BD114;
        break;
    }
    func_8012B14C(p, (s32)ptr);
    *(s16 *)(p + 0x34) = 0;
}

--- func_8018358C (src/ov_SC06_022/ov_SC06_022_jr_80182D08.c:3117) shares 2: func_801873B0 func_80187414 ---
void func_8018358C(s32 p) {

    extern u8 D_801D4328[];
    extern u8 D_801D42B0[];
    extern u8 D_801BD0D4[];
    extern u8 D_801BD0E4[];
    extern u8 D_801BD0BC[];
    s32 buf58[8];   /* auStack_58  sp+0x18 (0x20) */
    s32 g38[4];     /* uStack_38/34, iStack_30 sp+0x38 (0x10) */
    u16 g28[4];     /* uStack_28/26/24 sp+0x48 (0x08) */
    u16 out[4];     /* func_80187414 output sp+0x50 (0x08) */
    s32 buf18[2];   /* auStack_18  sp+0x58 (0x08) */
    s32 i;
    s32 e;

    if (*(u16 *)(p + 0x34) == 0) {
        if (func_8012BEE8() == 0) return;
        func_8012A828(p, D_801D4328);
        *(u16 *)(p + 0x34) += 1;
    }
    if (*(s32 *)(p + 0x94) < 0xe) {
        *(u16 *)(*(s32 *)(p + 0x20) + 0x12) += func_8012B8E4(p, 8);
    }
    if (*(s32 *)(p + 0x94) == 0xe) {
        func_80187414(p, D_801BD0D4, out, 0xb);
        func_801873B0(p, out, 0x282, 0, 0, 0);
        e = func_80132EF4(p, 0x22);
        if (e != 0) {
            *(u16 *)(e + 0x34) = 0x7002;
            *(u16 *)(e + 6) = out[0];
            *(u16 *)(e + 0xa) = out[1];
            *(u16 *)(e + 0xe) = out[2];
            *(u16 *)(*(s32 *)(e + 0x20) + 0x2c) = 0xc006;
        }
        g28[0] = 0x40;
        g28[1] = *(u16 *)(*(s32 *)(p + 0x20) + 0x12);
        g28[2] = 0;
        ((void (*)(void *, void *))func_80049CAC)(g28, buf58);
        i = 0;
        do {
            e = func_80132EF4(p, 0x22);
            if (e != 0) {
                g38[1] = 0;
                g38[0] = 0;
                g38[2] = (rand() % 5 + 4) << 16;
                ((void (*)(void *, void *, s32))func_800484EC)(buf58, g38, e + 0x10);
                *(u16 *)(e + 0x34) = ((rand() % 2 + 2) << 12) | 1;
                *(u16 *)(*(s32 *)(e + 0x20) + 0x2c) = 0xc006;
                func_80187414(p, D_801BD0E4 + i * 8, out, 0xb);
                *(u16 *)(e + 6) = out[0];
                *(u16 *)(e + 0xa) = out[1];
                *(u16 *)(e + 0xe) = out[2];
            }
            i++;
        } while (i < 5);
        ((s32 (*)())func_80187EF4)(p, 0x8be);
    }
    if (*(u16 *)(p + 0x72) & 0x4000) {
        ((void (*)(s32, void *, void *))func_8012F214)(p, D_801BD0BC, buf18);
        if (0x63fff < func_8012BCCC(p) ||
            func_80187318(buf18, *(s16 *)(*(s32 *)(p + 0x20) + 0x12), 0x380) == 0) {
            *(u16 *)(p + 2) = 0x1b;
            func_8012A828(p, D_801D42B0);
            *(s32 *)(p + 0x1c) = 0x20;
        }
    }
}

--- func_80183A20 (src/ov_SC06_022/ov_SC06_022_jr_80182D08.c:3299) shares 2: func_801873B0 func_80187414 ---
void func_80183A20(s32 param_1) {

    extern s32 D_80126B58;
    extern u16       D_800B99DA;
    extern u8        D_801BD0DC;
    /* [T51] scoped in from file scope: a file-scope decl of these symbols constrains every
       LATER function in this TU, which blocks a byte-true decl of a different type.
       Declaration-only move (cookbook §103); the whole-binary byte-gate is the arbiter. */
    extern s32 *D_80126B78;
    u8  auStack_38[8];
    s16 sp20[3];
    u8  auStack_28[8];
    StructB58_80183A20 *b58 = &(*(StructB58_80183A20 *)&D_80126B58);   /* $s4 */
    short *psVar7 = (short *)(param_1 + 0xec);
    s32 sVar1;
    s32 r_b608;

    if (func_8012BEE8(param_1) != 0) {
        unsigned int *p28 = (unsigned int *)auStack_28; /* $s5 */
        s32 r0 = rand();
        s32 coord;
        s32 s2v;
        s32 r3;
        s32 tmp;

        coord = r0 % 0x400;
        sVar1 = *(s16 *)((*(s32 *)&(*(s32 *)&D_80126B78)) + 0x12);
        s2v   = sVar1 + 0x800;
        if ((rand() & 1) == 0) {
            coord = s2v - coord;
        } else {
            s32 c = coord;   /* fresh pseudo so gcc keeps s2v first in the addu (§10 A1) */
            coord = s2v + c;
        }

        func_8012B0B4(p28, coord, rand() % 0x200 + 0x200);

        tmp = *(s32 *)auStack_28;
        psVar7[0] = b58->f6 + tmp;
        psVar7[1] = b58->fa;
        psVar7[2] = b58->fe + (tmp >> 16);

        r3 = rand();
        *(s32 *)(param_1 + 0x1c) = 0x80;
        *(s16 *)(param_1 + 0x100) = r3 % 9 + 8;
    }

    if ((*(u32 *)(param_1 + 0xe0) & 0x40) == 0) {
        *(u32 *)(param_1 + 0xe8) = func_8012B744((void *)(param_1 + 4), psVar7);
    }

    r_b608 = func_8012B608((s32)*(s16 *)(*(s32 *)(param_1 + 0x20) + 0x12),
                           *(s32 *)(param_1 + 0xe8),
                           (s32)*(s16 *)(param_1 + 0x100));
    *(u16 *)(*(s32 *)(param_1 + 0x20) + 0x12) =
        *(u16 *)(*(s32 *)(param_1 + 0x20) + 0x12) + r_b608;
    func_8012B178(param_1, 0xfffa0000);

    *(u32 *)(param_1 + 0xe0) &= 0xffffffbf;
    if (func_801856F0(param_1) == 0) {
        func_80185878(param_1);
        sp20[1] = 0;
        sp20[0] = 0;
        sp20[2] = -0x100;
        ((void (*)(s32, s32, s32))func_8012F14C)(*(s32 *)(param_1 + 0x20) + 0x34,
                                                 (s32)sp20, (s32)psVar7);
    }

    if (((u32)D_800B99DA % 0x28 == 0) && ((*(u32 *)(param_1 + 0xe0) & 0x80) == 0)) {
        ((void (*)(s32, s32, s32, s32))func_80187414)(param_1, (s32)&D_801BD0DC, (s32)auStack_38, 0xb);
        ((void (*)(s32, s32, s32, s32, s32, s32))func_801873B0)(param_1, (s32)auStack_38, 0x282, 1, 0, 0);
        *(u32 *)(param_1 + 0xe0) |= 0x80;
    }

    if (func_80013478(param_1 + 4, (s32)psVar7) < 0x400) {
        *(s32 *)(param_1 + 0x1c) = 0;
    }
}

--- func_8012CBA4 (src/shared/ov/func_8012CBA4.h:5) shares 1: D_800D3918 ---
void func_8012CBA4(s32 a0) {
    func_8012CC88(a0, 0, (s32)D_800D3918);
}

--- func_8012CBCC (src/shared/ov/func_8012CBCC.h:5) shares 1: D_800D3918 ---
void func_8012CBCC(s32 a0) {
    func_8012CC88(a0, 1, (s32)D_800D3918);
}

--- func_8012CBF4 (src/shared/ov/func_8012CBF4.h:5) shares 1: D_800D3918 ---
void func_8012CBF4(s32 a0) {
    func_8012CC88(a0, 0x11, (s32)D_800D3918);
}

