=== lever-free bodies in ov_SC04_015 sharing a callee or global with func_8017E830 (32 found; top 6 by shared symbols) — read them for the SHAPE ===
--- func_8012E28C (src/shared/ov/func_8012E28C.h:9) shares 3: D_800A651C D_800B9A02 func_80010A08 ---
void func_8012E28C(s32 arg0, s32 arg1) {
    void *temp_v0;
    s32 temp_v1;
    s32 base;
    if (arg0 > 0) {
        base = *(s32 *)((s8 *)&D_800A651C + ((u16)D_800B9A02 * 0x14)) + (arg0 * 4);
        temp_v0 = func_80010A08(0xC);
        temp_v1 = GetTPage(0, arg1, 0, 0);
        func_8005A600((s32)temp_v0, 0, 0, (u16)temp_v1, 0);
        AddPrim(base, temp_v0);
    }
}

--- func_8012D3B4 (src/shared/ov/func_8012D3B4.h:12) shares 3: D_800A651C D_800B9A02 func_80010A08 ---
void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2) {
    s32 sp10;
    s32 sp14;
    s32 temp_v0_2;
    void *temp_v0;
    temp_v0 = func_80010A08(0x10);
    (*(s32 *)((s8*)(temp_v0)+(4))) = arg2;
    SetLineF2(temp_v0);
    func_8004914C(&D_800AF648);
    func_800491AC(&D_800AF648);
    temp_v0_2 = RotTransPers(arg0, temp_v0 + 8, &sp10, &sp14);
    if ((temp_v0_2 > 0) && (sp14 >= 0) && (RotTransPers(arg1, temp_v0 + 0xC, &sp10, &sp14) > 0) && (sp14 >= 0)) {
        AddPrim(*(s32 *)((s8 *)&D_800A651C + ((u16)D_800B9A02 * 0x14)) + (temp_v0_2 * 4), temp_v0);
    }
}

--- func_8012D4B4 (src/shared/ov/func_8012D4B4.h:13) shares 3: D_800A651C D_800B9A02 func_80010A08 ---
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_80136D08 (src/shared/ov/func_80136D08.h:12) shares 3: D_800A651C D_800B9A02 func_80010A08 ---
void func_80136D08(s32 arg0, s32 arg1) {
    s32 sp10;
    s32 sp14;
    s32 temp_v0;
    s32 temp_v0_2;
    void *buf;
    func_8004914C(&D_800AF648);
    func_800491AC(&D_800AF648);
    buf = func_80010A08(0x14);
    SetLineG2(buf);
    *((u8 *)buf + 0xE) = 0xFF;
    *((u8 *)buf + 0x4) = 0xFF;
    *((u8 *)buf + 0xD) = 0x80;
    *((u8 *)buf + 0x5) = 0x80;
    *((u8 *)buf + 0xC) = 0x80;
    *((u8 *)buf + 0x6) = 0x80;
    temp_v0 = RotTransPers(arg0, (s32)buf + 8, &sp10, &sp14);
    temp_v0_2 = RotTransPers(arg1, (s32)buf + 0x10, &sp10, &sp14);
    temp_v0 = ((temp_v0 + temp_v0_2) >> 3) * 4;
    AddPrim(*(s32 *)((s8 *)&D_800A651C + ((u16)D_800B9A02 * 0x14)) + temp_v0, buf);
}

--- func_8012CFA8 (src/shared/ov/func_8012CFA8.h:3) shares 3: D_800A651C D_800B9A02 func_80010A08 ---
void func_8012CFA8(s32 arg0)
{
    extern s32 AddPrim(s32, void *);
    extern s32 RotTransPers(s32, s32 *, s32 *, s32 *);
    extern void SetPolyF3(void *);
    extern void *func_80010A08(s32);
    extern void func_8004914C(void *a0);
    extern void func_800491AC(void *a0);
    extern s32 D_800A651C;
    extern u8 D_800AF648;
    extern short D_800B9A02;
    s32 sp10;
    s32 sp14;
    s32 sp18;
    s32 temp_a2;
    void *temp_v0;
    temp_v0 = func_80010A08(0x14);
    (*(s32 *)((s8 *)(temp_v0) + (4))) = 0xFF;
    SetPolyF3(temp_v0);
    func_8004914C(&D_800AF648);
    func_800491AC(&D_800AF648);
    temp_a2 = (RotTransPers(arg0, &sp10, &sp14, &sp18) >> 2) - 0x20;
    if (temp_a2 > 0) {
        *(s32 *)((s8 *)temp_v0 + 8) = sp10;
        *(s16 *)((s8 *)temp_v0 + 0xC) = *(u16 *)((s8 *)temp_v0 + 8) + 8;
        *(s16 *)((s8 *)temp_v0 + 0xE) = *(u16 *)((s8 *)temp_v0 + 0xA);
        *(s16 *)((s8 *)temp_v0 + 0x10) = *(u16 *)((s8 *)temp_v0 + 8);
        *(s16 *)((s8 *)temp_v0 + 0x12) = *(u16 *)((s8 *)temp_v0 + 0xA) + 8;
        AddPrim(*(s32 *)((s8 *)&D_800A651C + ((u16)D_800B9A02 * 0x14)) + (temp_a2 * 4), temp_v0);
    }
}

--- func_8017EB78 (src/ov_SC04_015/ov_SC04_015_jr_8017AE2C.c:5048) shares 3: D_800A651C D_800B9A02 func_80010A08 ---
void func_8017EB78(void *arg0)
{
    /* frame: vars = 0x50 - ROUND8(args 0x10) - ROUND8(4*5 regs) = 0x28  (cookbook 164-53/162i1) */
    s32 pad[10];
    u8 *s;
    u8 *p;
    s32 X, Y;
    s32 u;
    s32 tA, tB, u2;
    u8 u_lo, y_lo;

    s = (u8 *)arg0;
    do { X = *(s16 *)(s + 0x10); } while (0);
    Y = *(s16 *)(s + 0x12);

    p = (u8 *)func_80010A08(0x28);
    *(u16 *)(p + 0xE) = GetClut(*(s16 *)(s + 0x18), *(s16 *)(s + 0x1A));
    *(u16 *)(p + 0x16) = GetTPage(0, 0, X & -0x40, Y & -0x100);

    p[3] = 9;
    *(u32 *)(p + 4) = 0x808080;
    p[7] = 0x2C;

    u = (X & 0x3F) << 2;
    u_lo = u;
    y_lo = Y;
    p[0xC] = u_lo;
    p[0xD] = y_lo;
    tA = u + s[0x14];
    p[0x14] = tA;
    p[0x15] = y_lo;
    p[0x1C] = u_lo;
    tB = Y + s[0x16];
    p[0x1D] = tB;
    u2 = u;
    u2 += s[0x14];
    p[0x24] = u2;
    Y += s[0x16];
    p[0x25] = Y;

    *(s16 *)(p + 0x8) = *(u16 *)(s + 0x0);
    *(s16 *)(p + 0xA) = *(u16 *)(s + 0x2);
    *(s16 *)(p + 0x10) = *(u16 *)(s + 0x4);
    *(s16 *)(p + 0x12) = *(u16 *)(s + 0x6);
    *(s16 *)(p + 0x18) = *(u16 *)(s + 0x8);
    *(s16 *)(p + 0x1A) = *(u16 *)(s + 0xA);
    *(s16 *)(p + 0x20) = *(u16 *)(s + 0xC);
    *(s16 *)(p + 0x22) = *(u16 *)(s + 0xE);

    AddPrim(*(s32 *)((u8 *)&D_800A651C + ((u16)D_800B9A02 * 0x14)) + 4, p);
}

