=== lever-free bodies in ov_SC02_017 sharing a callee or global with func_8018209C (80 found; top 6 by shared symbols) — read them for the SHAPE ===
--- func_80181E98 (src/ov_SC02_017/ov_SC02_017_jr_8017DF34.c:5220) shares 5: D_800AF648 D_80126B5C func_80013478 func_8002D4C8 func_8012F214 ---
s32 func_80181E98_impl(void *arg)
{
    extern void func_8012F214(s32 a0, s32 a1, s32 a2);
    extern s32 func_80013478(s32 a0, s32 a1);
    extern void func_8002D4C8(s32 a0, s32 a1);
    extern s32 D_8018E564;
    extern u8 D_800AF648;
    extern u8 D_80126B5C;

    struct {
        s16 in0[4];
        s16 in1[4];
        s16 sxy[2];
        s32 flag;
    } w;
    s32 t;
    s32 r;
    s32 k;

    func_8012F214((s32)arg, (s32)&D_8018E564, (s32)w.in0);
    gte_SetRotMatrix(&D_800AF648);
    gte_SetTransMatrix(&D_800AF648);
    gte_ldv0(w.in0);
    gte_rtps();
    gte_stsxy(w.sxy);
    gte_stflg(&w.flag);
    if (w.flag & 0xFFFFEFFF) {
        return 0;
    }
    t = w.sxy[0];
    if (t < 0) {
        t = -t;
    }
    if (t >= 0xAB || (w.sxy[1] >= 0 ? w.sxy[1] >= 0x83 : -w.sxy[1] >= 0x83)) {
        w.in1[0] = *(s16 *)((s32)arg + 6);
        w.in1[1] = *(s16 *)((s32)arg + 10);
        w.in1[2] = *(s16 *)((s32)arg + 14);
        gte_ldv0(w.in1);
        gte_rtps();
        gte_stsxy(w.sxy);
        gte_stflg(&w.flag);
        if (w.flag & 0xFFFFEFFF) {
            return 0;
        }
        t = w.sxy[0];
        if (t < 0) {
            t = -t;
        }
        if (t >= 0x105 || (w.sxy[1] >= 0 ? w.sxy[1] >= 0x8D : -w.sxy[1] >= 0x8D)) {
            return 0;
        }
    }
    r = func_80013478((s32)&D_80126B5C, (s32)w.in0);
    k = 0x5A0;
    if (r <= 0x41010) {
        k = 0x59F;
    }
    func_8002D4C8(k, 0);
    return 1;
}

--- func_8012D4B4 (src/shared/ov/func_8012D4B4.h:13) shares 2: D_800AF648 func_8012F214 ---
void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3) {
    s32 sp10[2];
    s32 sp18[2];
    s32 sp20;
    s32 sp24;
    s32 temp_v0_2;
    void *temp_v0;
    func_8012F214(arg0, arg1, (s32)sp10);
    func_8012F214(arg0, arg2, (s32)sp18);
    temp_v0 = func_80010A08(0x10);
    (*(s32 *)((s8 *)(temp_v0) + (4))) = arg3;
    SetLineF2(temp_v0);
    func_8004914C(&D_800AF648);
    func_800491AC(&D_800AF648);
    temp_v0_2 = RotTransPers((s32)sp10, temp_v0 + 8, &sp20, &sp24);
    if ((temp_v0_2 > 0) && (sp24 >= 0) &&
        (RotTransPers((s32)sp18, temp_v0 + 0xC, &sp20, &sp24) > 0) && (sp24 >= 0)) {
        AddPrim(*(s32 *)((s8 *)&D_800A651C + ((u16)D_800B9A02 * 0x14)) + (temp_v0_2 * 4), temp_v0);
    }
}

--- func_80188620 (src/ov_SC02_017/ov_SC02_017_jr_80186C64.c:4474) shares 2: func_8002D4C8 func_8012F214 ---
void func_80188620(s32 arg0) {
    u16 sp10[3];
    u16 sp18[12];

    if (*(s32 *)(arg0 + 0x1C) == 9) {
        if (func_8012D5E4(arg0, (s32)D_801E2118, (s32)(D_801E2118 + 8), 10) != 0) {
            D_80126B96 |= 0x800;
        }
        if (*(s16 *)(arg0 + 0x70) & 0x8000) {
            func_8012F214(arg0, (s32)D_801E2128, (s32)sp10);
            sp18[3] = 0x126;
            sp18[5] = 0;
            sp18[6] = 0x7FFF;
            sp18[0] = sp10[0];
            sp18[1] = sp10[1];
            sp18[2] = sp10[2];
            sp18[7] = *(u16 *)(*(s32 *)(arg0 + 0x20) + 0x12);
            func_8012C51C(sp18, arg0);
            sp18[7] = *(u16 *)(*(s32 *)(arg0 + 0x20) + 0x12) + 0x100;
            func_8012C51C(sp18, arg0);
            sp18[7] = *(u16 *)(*(s32 *)(arg0 + 0x20) + 0x12) - 0x100;
            func_8012C51C(sp18, arg0);
        }
        func_8002D4C8(0x43E, 0);
    }
    if (func_8012BEE8(arg0) != 0) {
        ((void (*)(void *))func_801883A0)(arg0);
    }
}

--- func_80183E70 (src/ov_SC02_017/ov_SC02_017_jr_8017DF34.c:6565) shares 2: func_8002D4C8 func_8012F214 ---
void func_80183E70(s32 param_1) {
    s32 v0;
    SV3 in;
    SV3 out;

    if (func_8012BEE8(param_1) != 0) {
        func_8002D4C8(0x5D7, 0);
        func_8012C218((void *)param_1);
    } else {
        v0 = *(s16 *)(param_1 + 0x70);
        if (v0 != 0) {
            in.a = v0 << 4;
            in.b = 0;
            in.c = 0;
            ((void (*)(s32, void *, void *))func_8012F214)((s32)aD801EF9FC, &in, &out);
            *(s16 *)(param_1 + 0x6) = out.a;
            *(s16 *)(param_1 + 0xA) = out.b;
            *(s16 *)(param_1 + 0xE) = out.c;

            *(Blk8 *)(*(s32 *)(param_1 + 0x20) + 0x10) =
                *(Blk8 *)(*(s32 *)((s32)aD801EF9FC + 0x20) + 0x10);
        } else {
            *(u16 *)(*(s32 *)(param_1 + 0x20) + 0x10) += D_8018EED4;
            *(u16 *)(*(s32 *)(param_1 + 0x20) + 0x12) += D_8018EED6;
            *(u16 *)(*(s32 *)(param_1 + 0x20) + 0x14) += D_8018EED8;
            func_8012AD80(param_1);
            func_8012B2CC(param_1);
        }
    }
}

--- func_80149954 (src/shared/ov/func_80149954.h:12) shares 2: D_80126B5C func_8002D4C8 ---
s32 func_80149954(s32 s0) {
    s32 sp10[2];
    s16 buf[10];
    if (*(s32 *)(s0 + 0x44) & 0x404) {
        return 0;
    }
    if ((*(u16 *)(s0 + 0xAA) & 0x90) == 0) {
        if (currentLocationId == 0x308D) {
            func_80015978((s32)&D_80126B5C, sp10);
            func_8012E5CC((s32)sp10, 0x4, 0x8E0);
            return 0;
        }
        func_8002D4C8(0x4, 0x8E0);
        return 0;
    }
    if (*(u16 *)(s0 + 0xAC) & 0x90) {
        if ((s32)D_8012707C == 0x8E0) {
            D_8012707C = 0;
        } else {
            func_80147364(0x8E0, 0);
        }
    }
    func_800CCF28(s0);
    *(s16 *)((s32)buf + 0x0) = 0x12;
    *(s32 *)((s32)buf + 0x8) = s0;
    *(s16 *)((s32)buf + 0x2) = 0;
    *(s16 *)((s32)buf + 0x4) = -0x1E;
    *(s16 *)((s32)buf + 0x6) = 0;
    *(s32 *)((s32)buf + 0xC) = 0;
    *(s32 *)((s32)buf + 0x10) = 0;
    func_80146750(buf);
    return 1;
}

--- func_80187AB0 (src/ov_SC02_017/ov_SC02_017_jr_80186C64.c:3894) shares 2: D_80126B5C func_8002D4C8 ---
void func_80187AB0(s32 param_1) {

    extern M2C_UNK D_801E1F04;
    extern u8   D_801E1CDC;
    extern u8 D_80126B5C;
    extern s32  D_80126B60;
    extern s32  D_80126B64;
    s32 iVar1;
    struct In in;
    s32 out[2];
    s32 t;
    s32 o;

    iVar1 = ((s32 (*)(void))func_8012C1B8)();
    *(s32 *)(param_1 + 0x20) = iVar1;
    if (iVar1 == 0) {
        ((void (*)(s32))func_8012CAE4)(param_1);
        return;
    }
    ((void (*)(s32, void *))func_8001C214)(iVar1, &(*(u8 *)&D_801E1F04));
    if ((*(u16 *)(param_1 + 0x70) & 0x1000) == 0) {
        func_8002D4C8(0x43A, 0);
    } else {
        func_8002D4C8(0x6D6, 0);
    }
    func_8012A828(param_1, &D_801E1CDC);
    *(s16 *)(param_1 + 2) = 1;
    *(s32 *)(param_1 + 0x1C) = 100;

    *(s32 *)&in.lo = D_80126B60;
    in.hi -= 0x20;
    in.w0 = (*(s32 *)&D_80126B5C);
    in.w2 = D_80126B64;
    func_8012B77C(out, param_1 + 4, &in);

    o = out[0];
    t = *(u16 *)(param_1 + 0x70) & 0xF;
    switch (t) {
    case 0:
        *(s16 *)(*(s32 *)(param_1 + 0x20) + 0x10) = (s16)o;
        break;
    case 1:
        *(s16 *)(*(s32 *)(param_1 + 0x20) + 0x10) = (s16)o;
    case 3:
        *(s16 *)(*(s32 *)(param_1 + 0x20) + 0x12) = (s16)(o >> 16);
        break;
    case 2:
        break;
    }

    if (*(u16 *)(param_1 + 0x70) & 0x1000) {
        *(s32 *)(param_1 + 0x1C) = *(s32 *)(param_1 + 0x1C) << 1;
    }
    func_8012B2CC(param_1);
    ((void (*)(s32, s32))func_8012C588)(0xBC, param_1);
}

