=== lever-free bodies in md_SC07_004 sharing a callee or global with func_801A5C44 (7 found; top 6 by shared symbols) — read them for the SHAPE ===
--- func_801A4060 (src/md_SC07_004/md_SC07_004.c:2703) shares 1: func_8004787C ---
void func_801A4060(s32 a0) {
    *(s16 *)(*(s32 *)(a0 + 0x20) + 0x18) = (func_8004787C(*(s16 *)(a0 + 0xFE)) >> 3) + 0x1000;
    *(s16 *)(*(s32 *)(a0 + 0x20) + 0x1A) = (func_8004787C(*(s16 *)(a0 + 0xFE) + 0x800) >> 3) + 0x1000;
    *(u16 *)(a0 + 0xFE) += 0x80;
}

--- func_801A36A8 (src/md_SC07_004/md_SC07_004.c:2241) shares 1: func_8004787C ---
void func_801A36A8(s32 a0) {
    s16 v;

    v = *(u16 *)((s32)a0 + 0x108) + 0x30;
    *(u16 *)((s32)a0 + 0x108) = v;
    *(s16 *)((s32)a0 + 0x52) = func_8004787C(v) >> 8;
}

--- func_801AE060 (src/md_SC07_004/md_SC07_004.c:9832) shares 1: func_8004787C ---
void func_801AE060(s32 a0) {
    s32 s0 = a0;
    s32 t;
    s32 *p = &D_800B9AA8;

    *p = *p - 0x300;

    t = *(u16 *)(s0 + 0xFE);
    t += 0x18;
    *(u16 *)(s0 + 0xFE) = t;
    D_800B9AA4 = func_8004787C((s16)t) + 0x2700;
    D_800B9AA6 = func_8004787C(*(s16 *)(s0 + 0xFE) + 0x400) + 0x2700;

    D_800B9AB8 -= 1;
    D_800B9ABA += 1;

    switch (*(u16 *)(s0 + 0x34)) {
    case 0:
        *(u16 *)(s0 + 0x34) = *(u16 *)(s0 + 0x34) + 1;
        break;
    case 1:
        func_801ACD4C();
        break;
    }
}

--- func_801A7B08 (src/md_SC07_004/md_SC07_004.c:5187) shares 1: func_8004787C ---
void func_801A7B08(s32 arg0) {
    s32 s0;
    u8 *p;
    s0 = arg0;
    func_801A8440(s0);

    switch (*(s16 *)((s32)s0 + 0x2C)) {
    case 0: {
        s16 t = *(s16 *)(*(s32 *)((s32)s0 + 0x20) + 0x18);
        if (t >= 0x401) {
            *(s16 *)(*(s32 *)((s32)s0 + 0x20) + 0x18) = t - 0xA0;
            *(u16 *)(*(s32 *)((s32)s0 + 0x20) + 0x1A) = *(u16 *)(*(s32 *)((s32)s0 + 0x20) + 0x18);
        }
        p = &D_801F88BA;
        if (*p < 0xF0) {
            *p += 0xC;
        }
        if ((*(s16 *)(*(s32 *)((s32)s0 + 0x20) + 0x18) < 0x401) &&
            (*p >= 0xF0)) {
            *(u16 *)((s32)s0 + 0x2A) = 0;
            *(u16 *)((s32)s0 + 0x2C) += 1;
        }
        break;
    }

    case 1:
        *(u16 *)((s32)s0 + 0x2A) += 0x40;
        *(s16 *)(*(s32 *)((s32)s0 + 0x20) + 0x18) =
            (func_8004787C(*(s16 *)((s32)s0 + 0x2A)) >> 5) + 0x400;
        *(s16 *)(*(s32 *)((s32)s0 + 0x20) + 0x1A) =
            (func_8004787C(*(s16 *)((s32)s0 + 0x2A) + 0x800) >> 5) + 0x400;
        break;
    }
}

--- func_801A8990 (src/md_SC07_004/md_SC07_004.c:5858) shares 1: func_8004787C ---
void func_801A8990(void *a0)
{
    extern void func_80049CAC(s32 a0, s32 a1);
    extern void func_8004914C(void *a0);
    extern void func_800491AC(void *a0);
    extern s32 func_8004787C(s32 a0);
    extern void RotTransSV(s32 a0, s32 a1, void *a2);

    SV_801A8990 vec;   /* sp+0x10 */
    MTX_801A8990 mtx;  /* sp+0x18 */
    MTX_801A8990 *mp;
    s32 flag[3];       /* sp+0x38 */
    s32 v1;
    s32 prod;

    mp = &mtx;
    func_80049CAC(*(s32 *)((s32)a0 + 0x20) + 0x10, (s32)mp);

    mtx.t[0] = *(s16 *)((s32)a0 + 0x104);
    mtx.t[1] = *(s16 *)((s32)a0 + 0x106);
    mtx.t[2] = *(s16 *)((s32)a0 + 0x108);

    func_8004914C(mp);
    func_800491AC(mp);

    vec.vy = 0;
    vec.vx = 0;

    prod = func_8004787C(*(s16 *)((s32)a0 + 0x100));
    v1 = *(s16 *)((s32)a0 + 0xFE);
    vec.vz = v1 + ((v1 * prod) >> 15);

    RotTransSV((s32)&vec, (s32)&vec, &flag[0]);

    *(s16 *)((s32)a0 + 0x6) = vec.vx;
    *(s16 *)((s32)a0 + 0xA) = vec.vy;
    *(s16 *)((s32)a0 + 0xE) = vec.vz;
}

--- func_801AAF8C (src/md_SC07_004/md_SC07_004.c:7564) shares 1: func_8004787C ---
s32 func_801AAF8C(SV_801AAF8C *src, SV_801AAF8C *ofs, s32 arg2)
{
    MTX_801AAF8C mtx;   /* sp+0x18 */
    SV_801AAF8C  rot;   /* sp+0x38 */
    SV_801AAF8C  pos;   /* sp+0x40 */
    SV_801AAF8C  sv;    /* sp+0x48 */
    s32          flag;  /* sp+0x50 */
    s32 dx, dy, dz;
    s32 ang;
    s32 s;
    s32 t;

    pos = *src;
    if (ofs != 0) {
        pos.vx += ofs->vx;
        pos.vy += ofs->vy;
        pos.vz += ofs->vz;
    }

    dz = D_80126B66 - pos.vz;
    dx = D_80126B5E - pos.vx;
    t  = pos.vy + 0x20;
    dy = D_80126B62 - t;

    ang = (ratan2(-dz, dx) - 0x400) & 0xFFF;
    rot.vy = ang;
    s = func_80047948(ang);
    dz = (dz * s + dx * func_8004787C(rot.vy)) >> 12;
    rot.vx = ratan2(dy, -dz);
    rot.vz = 0;
    func_80049CAC((s32)&rot, (s32)&mtx);

    func_8004914C(&mtx);
    mtx.t[0] = pos.vx;
    mtx.t[1] = pos.vy;
    mtx.t[2] = pos.vz;
    func_800491AC(&mtx);

    sv.vy = 0;
    sv.vx = 0;
    sv.vz = -arg2;
    RotTransSV((s32)&sv, (s32)&sv, &flag);

    if (func_80135888((s32)D_80126B78, (s32)D_80126B90, (s32)&pos, (s32)&sv) != 0) {
        func_8012F568(1, 1, 0, 0xA, (s32)&sv, (s32)D_801152A8);
        return 1;
    }
    return 0;
}

