=== lever-free bodies in ov_SC06_010 sharing a callee or global with func_80185C04 (17 found; top 6 by shared symbols) — read them for the SHAPE ===
--- func_80185ED4 (src/ov_SC06_010/ov_SC06_010_jr_8017A4AC.c:9854) shares 3: func_8004787C func_80047948 func_8012B370 ---
void func_80185ED4(s32 a0) {
    s16 ang;
    u16 cnt;
    u16 acc;

    ang = *(s16 *)(*(s32 *)(a0 + 0x20) + 0x14);
    if (ang < 0xC00) {
        if (ang != 0) {
            goto state3;
        }
    }

    cnt = *(u16 *)(a0 + 0xFC);
    acc = *(u16 *)(a0 + 0xFE);
    cnt = cnt + 1;
    acc = acc + cnt;
    *(u16 *)(a0 + 0xFC) = cnt;
    *(u16 *)(a0 + 0xFE) = acc;
    *(u16 *)(*(s32 *)(a0 + 0x20) + 0x14) =
        *(u16 *)(*(s32 *)(a0 + 0x20) + 0x14) - acc;

    *(u16 *)(*(s32 *)(a0 + 0x20) + 0x14) =
        *(u16 *)(*(s32 *)(a0 + 0x20) + 0x14) & 0xFFF;

    *(u16 *)(a0 + 0xA) = *(u16 *)(a0 + 0xA) - 8;

    *(s32 *)(a0 + 4) = *(s32 *)(a0 + 4) -
        func_80047948(*(s16 *)(*(s32 *)(a0 + 0x20) + 0x12)) * 0x80;

    *(s32 *)(a0 + 0xC) = *(s32 *)(a0 + 0xC) +
        func_8004787C(*(s16 *)(*(s32 *)(a0 + 0x20) + 0x12)) * 0x80;
    goto tail;

state3:
    *(u16 *)(a0 + 2) = 3;
    *(s32 *)(a0 + 0x1C) = 0x1E;
    *(u16 *)(a0 + 0x98) = 0;

tail:
    func_8012B370(a0);
}

--- func_8012B77C (src/shared/ov/func_8012B77C.h:6) shares 2: func_8004787C func_80047948 ---
s32 func_8012B77C(s32 out, s32 from, s32 to) {
    Ang2_8012B77C_8012B77C t;
    s32 dx, dy, dz;
    s32 ang;
    s32 r1, r2;
    dz = *(s16 *)(to + 0xA) - *(s16 *)(from + 0xA);
    dx = *(s16 *)(to + 0x2) - *(s16 *)(from + 0x2);
    dy = *(s16 *)(to + 0x6) - *(s16 *)(from + 0x6);
    ang = (ratan2(-dz, dx) - 0x400) & 0xFFF;
    t.hi = ang;
    r1 = func_80047948(ang);
    r2 = func_8004787C(ang);
    dz = (dz * r1 + dx * r2) >> 12;
    t.lo = ratan2(dy, -dz);
    *(Ang2_8012B77C_8012B77C *)out = t;
    return out;
}

--- func_80144458 (src/ov_SC06_010/ov_SC06_010_jr_80140608.c:2271) shares 2: func_8004787C func_80047948 ---
void func_80144458(void *arg0) {
    s32 temp_s0;
    void *temp_s2;
    void *temp_v0;

    temp_s2 = M2C_FIELD(arg0, void **, 0xCC);
    if (M2C_FIELD(arg0, s16 *, 0x70) == 0) {
        temp_v0 = M2C_FIELD(M2C_FIELD(arg0, void **, 0x64), void **, 0x20);
        if (temp_v0 != NULL) {
            temp_s0 = (M2C_FIELD(temp_v0, s16 *, 0x12) - 0x400) & 0xFFF;
            M2C_FIELD(arg0, s32 *, 0x10) = (s32) (func_80047948(temp_s0) * D_8018831C * 0x10);
            M2C_FIELD(arg0, s32 *, 0x18) = (s32) (func_8004787C(temp_s0) * -D_8018831C * 0x10);
            func_8012AD80(arg0);
        }
    }
    M2C_FIELD(temp_s2, u16 *, 8) = (u16) M2C_FIELD(arg0, u16 *, 6);
    M2C_FIELD(temp_s2, u16 *, 0xA) = (u16) M2C_FIELD(arg0, u16 *, 0xA);
    M2C_FIELD(temp_s2, u16 *, 0xC) = (u16) M2C_FIELD(arg0, u16 *, 0xE);
    if (func_80128ED8(temp_s2, arg0 + 0xD0) != 0) {
        func_80016714(temp_s2, 0x38);
        func_8012C218(arg0);
    }
}

--- func_801810FC (src/ov_SC06_010/ov_SC06_010_jr_8017A4AC.c:6587) shares 2: func_8004787C func_80047948 ---
s32 func_801810FC(param_1, param_2)
s32 param_1;
s32 param_2;
{
    int iVar1;
    unsigned int uVar2;
    int iVar3;
    SVECTOR sv1;
    SVECTOR sv2;

    sv1.vx = *(short *)(param_1 + 6);
    sv1.vy = *(short *)(param_1 + 0xa) + -0x20;
    sv1.vz = *(short *)(param_1 + 0xe);
    iVar1 = func_8004787C(*(unsigned short *)(*(int *)(param_1 + 0x20) + 0x12) & 0xfff);
    iVar3 = (short)param_2;
    sv2.vy = sv1.vy;
    sv2.vx = sv1.vx - (short)(iVar1 * iVar3 >> 0xc);
    iVar1 = func_80047948(*(unsigned short *)(*(int *)(param_1 + 0x20) + 0x12) & 0xfff);
    sv2.vz = sv1.vz - (short)(iVar1 * iVar3 >> 0xc);
    uVar2 = ((int (*)(int, SVECTOR *, SVECTOR *))func_80133784)(1, &sv1, &sv2);
    if ((uVar2 & 0x8000) != 0) {
        iVar1 = func_8004787C(*(unsigned short *)(*(int *)(param_1 + 0x20) + 0x12) & 0xfff);
        *(short *)(param_1 + 6) = sv2.vx + (short)(iVar1 * iVar3 >> 0xc);
        iVar1 = func_80047948(*(unsigned short *)(*(int *)(param_1 + 0x20) + 0x12) & 0xfff);
        *(short *)(param_1 + 0xe) = sv2.vz + (short)(iVar1 * iVar3 >> 0xc);
        return 1;
    }
    return 0;
}

--- func_80171EC8 (src/shared/ov/func_80171EC8.h:7) shares 2: func_8004787C func_80047948 ---
void func_80171EC8(s32 a0) {
    s32 base = D_801151D4;
    s32 s0;
    s32 s1;
    s32 v1;
    s32 ang;
    *(s8 *)(a0 + 0xA9) = 0x73;
    ang = ratan2(*(s32 *)(base + 0x68) - *(s32 *)(base + 0x5C),
                 *(s32 *)(base + 0x70) - *(s32 *)(base + 0x64));
    s0 = (ang + 0x800) & 0xFFF;
    s0 = (*(s16 *)(*(s32 *)(a0 + 0x20) + 0x12) - s0) & 0xFF8;
    if (s0 == 0x400 || s0 == 0xC00) {
        s1 = 0x80;
    } else {
        s32 t = -(func_80047948(s0) << 7);
        if (t < 0) {
            t += 0xFFF;
        }
        s1 = (t >> 12) + 0x80;
    }
    if (s1 < 0) {
        s1 = 0;
    }
    if (!(s1 < 0x100)) {
        s1 = 0xFF;
    }
    if (s0 == 0 || s0 == 0x800) {
        v1 = 0x80;
    } else {
        s32 t = func_8004787C(s0);
        if (t < 0) {
            t += 0x1F;
        }
        v1 = (t >> 5) + 0x80;
    }
    if (v1 < 0) {
        v1 = 0;
    }
    if (!(v1 < 0x100)) {
        v1 = 0xFF;
    }
    *(s16 *)(a0 + 0xAE) = (v1 & 0xFF) | (s1 << 8);
}

--- func_80172170 (src/shared/ov/func_80172170.h:7) shares 2: func_8004787C func_80047948 ---
void func_80172170(s32 a0, s32 a1) {
    s32 base = D_801151D4;
    s32 s0;
    s32 s1;
    s32 v1;
    s32 s3 = a1;
    s32 ang;
    *(s8 *)(a0 + 0xA9) = 0x73;
    ang = ratan2(*(s32 *)(base + 0x68) - *(s32 *)(base + 0x5C),
                 *(s32 *)(base + 0x70) - *(s32 *)(base + 0x64));
    s0 = (ang + 0x800) & 0xFFF;
    s0 = (*(s16 *)(*(s32 *)(a0 + 0x20) + 0x12) - s0) & 0xFF8;
    if (s0 == 0x400 || s0 == 0xC00) {
        s1 = 0x80;
    } else {
        s32 t = -((s3 & 0xFF) >> 1) * func_80047948(s0);
        if (t < 0) {
            t += 0xFFF;
        }
        s1 = (t >> 12) + 0x80;
    }
    if (s1 < 0) {
        s1 = 0;
    }
    if (!(s1 < 0x100)) {
        s1 = 0xFF;
    }
    if (s0 == 0 || s0 == 0x800) {
        v1 = 0x80;
    } else {
        s32 t = ((s3 & 0xFF) >> 1) * func_8004787C(s0);
        if (t < 0) {
            t += 0xFFF;
        }
        v1 = (t >> 12) + 0x80;
    }
    if (v1 < 0) {
        v1 = 0;
    }
    if (!(v1 < 0x100)) {
        v1 = 0xFF;
    }
    *(s16 *)(a0 + 0xAE) = (v1 & 0xFF) | (s1 << 8);
}

