=== lever-free bodies in ov_SC03_091 sharing a callee or global with func_80188B64 (48 found; top 6 by shared symbols) — read them for the SHAPE ===
--- func_8018771C (src/ov_SC03_091/ov_SC03_091_jr_8018326C.c:5598) shares 5: D_801152A8 D_80126B78 func_8012F14C func_8012F568 func_80135888 ---
s32 aF8018771C(s32 arg0, s32 arg1) {
    s32 buf1[2];
    s32 buf2[2];
    s32 a1v;

    func_8012F14C((s32)D_80126B78 + 0x34, (s32)D_801A8C14, (s32)buf1);
    func_8012F14C((s32)D_80126B78 + 0x34, (s32)(D_801A8C14 + 4), (s32)buf2);
    if (func_80135888(*(s32 *)(arg0 + 0x20), *(s32 *)(arg0 + 0x58), (s32)buf1, (s32)buf2) != 0) {
        if (*(u16 *)(arg0 + 0x70) & 0xF) {
            a1v = 0x2001;
        } else {
            a1v = 1;
        }
        func_8012F568(1, a1v, *(s16 *)(*(s32 *)(arg0 + 0x20) + 0x12), arg1, (s32)buf2, (s32)D_801152A8);
        return 1;
    }
    return 0;
}

--- func_8012DF34 (src/shared/ov/func_8012DF34.h:7) shares 3: D_801152A8 func_8012F568 func_80135888 ---
s32 func_8012DF34(s32 a0, s32 a1, s32 a2) {
    s32 s0 = a2;
    s32 *p = &D_80126B58;
    if (a0 != 0) {
        if (*(s16 *)(a0 + 0xAA) != 0) {
            return 0;
        }
    }
    if (func_80135888(*(s32 *)((s32)p + 0x20), *(s32 *)((s32)p + 0x38), a1, s0) != 0) {
        func_8012F568(1, 1, 0, 0xA, s0, (s32)D_801152A8);
        return 1;
    }
    return 0;
}

--- func_8012AE00 (src/shared/ov/func_8012AE00.h:8) shares 2: D_80126B78 func_80135888 ---
s32 func_8012AE00(s32 a0) {
    s16 sp10[3];
    s16 sp18[4];
    struct V8 sp20;
    s32 r1, r2;
    s32 base;
    s32 p18 = (s32)sp18;
    sp10[0] = *(u16 *)(a0 + 0x3A);
    sp10[1] = *(u16 *)(a0 + 0x3E);
    sp10[2] = *(u16 *)(a0 + 0x42);
    sp18[0] = *(u16 *)(a0 + 0x6);
    sp18[1] = *(u16 *)(a0 + 0xA);
    sp18[2] = *(u16 *)(a0 + 0xE);
    base = (s32)&D_80126B58;
    sp20 = *(struct V8 *)sp18;
    if (func_80135888((s32)D_80126B78, (s32)D_80126B90, (s32)sp10, (s32)&sp20) == 0) {
        return 0;
    }
    base += 4;
    r1 = func_80013478(base, (s32)sp10);
    r2 = func_80013478(base, p18);
    if (r1 < r2) {
        return 0;
    }
    *(s32 *)(a0 + 0x4) = *(s32 *)(a0 + 0x38);
    *(s32 *)(a0 + 0x8) = *(s32 *)(a0 + 0x3C);
    *(s32 *)(a0 + 0xC) = *(s32 *)(a0 + 0x40);
    return 1;
}

--- func_8012E138 (src/shared/ov/func_8012E138.h:10) shares 2: func_8012F14C func_80135888 ---
void func_8012E138(int model) {
    struct Cam8012E138 cam;
    int bufB[2];
    int bufA[2];
    int m;
    short s;
    cam.a = D_80126B5E;
    cam.b = D_80126B62;
    cam.c = D_80126B66;
    func_8012F038(*(int *)(model + 0x20) + 0x34, &cam, bufA);
    m = *(int *)(model + 0x20);
    if (m != 0) {
        int mm;
        func_80049CAC(m + 0x10, m + 0x34);
        mm = *(int *)(model + 0x20);
        s = *(u16 *)(model + 6) + *(u16 *)(model + 0x50);
        *(u16 *)(mm + 8) = s;
        *(int *)(mm + 0x48) = s;
        s = *(u16 *)(model + 0xA) + *(u16 *)(model + 0x52);
        *(u16 *)(mm + 0xA) = s;
        *(int *)(mm + 0x4C) = s;
        s = *(u16 *)(model + 0xE) + *(u16 *)(model + 0x54);
        *(u16 *)(mm + 0xC) = s;
        *(u16 *)(mm + 0x2C) = *(u16 *)(mm + 0x2C) | 1;
        *(int *)(mm + 0x50) = s;
    }
    func_8012F14C(*(int *)(model + 0x20) + 0x34, bufA, bufB);
    if (func_80135888(*(int *)(model + 0x20), *(int *)(model + 0x58), bufB, &cam)) {
        D_80126B5E = cam.a;
        D_80126B62 = cam.b;
        D_80126B66 = cam.c;
    }
}

--- func_8014D820 (src/ov_SC03_091/ov_SC03_091_after.c:1549) shares 2: D_801152A8 func_80135888 ---
s32 func_8014D820(s32 a0, u16 *a1, u16 *a2)
{

    extern u8 D_801202A0[];
    extern u8 D_8018E580[];
    extern u8 D_801152A8[];
    extern s16 D_801152AC;
  /* BLOCK-SCOPE types — see the header note. `Ent` at file scope collides with
     src/shared/engine_types.h:434 and kills the TU's cc1 stage (exit 33). */
  typedef struct
  {
    u16 x;
    u16 y;
    u16 z;
    u16 w;
  } V4;
  typedef struct EntD820
  {
    u16 f0;
    u16 f2;
    u16 f4;
    u16 x;
    u16 f8;
    u16 y;
    u16 fC;
    u16 z;
    u8 p10[0x10];
    s32 f20;
    u8 p24[0x34];
    s32 f58;
    u16 f5C;
    u16 f5E;
    u8 p60[0x10C - 0x60];
  } Ent;
  int new_var2;
  s16 new_var3;
  V4 out[3];
  V4 pos;
  Desc desc;
  Ent *ent;
  Ent *p;
  s32 dx;
  s32 dz;
  s32 ex;
  s32 ez;
  s32 r1;
  s32 r2;
  s32 r3;
  s32 ang;
  s32 x0;
  s32 y0;
  s32 z0;
  s32 tx;
  s32 tz;
  s32 ty;
  s32 r;
  s32 t;
  s32 u;
  s32 a0v;
  t = a2[0];
  u = a1[0];
  dx = t - u;
a0v = a0;
  new_var3 = (s16) dx;
  t = a2[2];
  u = a1[2];
  dz = t - u;
  if (((s16) (dx | dz)) == 0)
  {
    goto fail;
  }
  desc.x = dx;
  desc.y = a2[1] - a1[1];
  desc.z = a2[2] - a1[2];
  ent = *((Ent **) (a0v + 0x170));
  if (ent->f0 == 0)
  {
    goto fail;
  }
  if ((ent->f5C & 0x1000) == 0)
  {
    goto fail;
  }
  if (ent->f58 == 0)
  {
    goto fail;
  }
  if (func_80135A4C(ent->f20, ent->f58, (s32 *) a1, (s32) a2) == 0)
  {
    goto fail;
  }
  ex = ent->x - (*((u16 *) (a0v + 6)));
  ez = ent->z - (*((u16 *) (a0v + 0xE)));
  r1 = (s16) ratan2((s16) dz, new_var3);
  r2 = (s16) ratan2((s16) ez, (s16) ex);
  r3 = (s16) func_80012A60(r1, r2);
  if (0x400 <= r3)
  {
    goto fail;
  }
  desc.f20 = 0;
  desc.f1C = 0;
  desc.f18 = 0;
  x0 = ent->x;
  pos.x = x0;
  y0 = ent->y;
  pos.y = y0;
  z0 = ent->z;
  tx = x0 + desc.x;
  pos.z = z0;
  tz = z0 + desc.z;
  desc.x = tx;
  desc.z = tz;
  ty = (y0 + desc.y) + 8;
  desc.y = ty;
  if (currentLocationId != 0x3008)
  {
    for (p = (Ent *) D_801202A0; p < (Ent *) (D_801202A0 + 0x6480); p++)
    {
      if (p == ent)
      {
        continue;
      }
      if (p->f0 == 0)
      {
        continue;
      }
      if (p->f5C == 0)
      {
        continue;
      }
      if (p->f58 == 0)
      {
        continue;
      }
      func_80135888(p->f20, p->f58, (s32) (&pos), (s32) (&desc));
    }

  }
  else
  {
    ang = ratan2(((s16) x0) - ((s16) tx), ((s16) z0) - ((s16) tz)) & 0xFFF;
    func_800139C8(ang, D_8018E580, &out[0]);
    func_800139C8((s16) (ang - 0x155), D_8018E580, &out[1]);
    func_800139C8((s16) (ang + 0x155), D_8018E580, &out[2]);
    out[0].x += pos.x;
    out[0].y = pos.y;
    out[0].z += pos.z;
    out[1].x += pos.x;
    out[1].y = pos.y;
    out[1].z += pos.z;
    out[2].x += pos.x;
    out[2].y = pos.y;
    out[2].z += pos.z;
    for (p = (Ent *) D_801202A0; p < (Ent *) (D_801202A0 + 0x6480); p++)
    {
      if (p == ent)
      {
        continue;
      }
      if (p->f0 == 0)
      {
        continue;
      }
      if (p->f5C == 0)
      {
        continue;
      }
      if (p->f58 == 0)
      {
        continue;
      }
      if (func_8014DCE0((s32) p, (s32) (&pos), (s32) (&out[0])) != 0)
      {
        __builtin_memcpy((void *) ((s32) (&desc)), (void *) ((s32) (&pos)), 8);
      }
    }

  }
  r = func_80133784(0, &pos, (s32) (&desc));
  if ((r == 0) || ((r == 0x2000) && (((*(u16 *) D_801152A8) | ((u16) D_801152AC)) == 0)))
  {
    ent->x = desc.x - desc.f18;
    ent->y = desc.y;
    ent->z = desc.z - desc.f20;
    desc.x -= pos.x;
    desc.y -= pos.y;
    desc.z -= pos.z;
    *((u16 *) (a0v + 6)) = a1[0] + desc.x;
    new_var2 = desc.y;
    new_var2 = new_var2 + 0x10;
    *((u16 *) (a0v + 0xA)) = a1[1] + new_var2;
    *((u16 *) (a0v + 0xE)) = a1[2] + desc.z;
  }
  else
  {
    *((u16 *) (a0v + 6)) = a1[0];
    *((u16 *) (a0v + 0xA)) = a1[1] + 0x10;
    *((u16 *) (a0v + 0xE)) = a1[2];
  }
  return 1;
  fail:
  *((s32 *) (a0v + 0x170)) = 0;

  return 0;
}

--- func_801484B0 (src/shared/ov/func_801484B0.h:5) shares 1: D_80126B78 ---
void func_801484B0(s32 a0, s32 a1) {
    func_801485B8(*(s32 *)((s32)D_80126B78 + 0x20) - 0x10, a0, a1);
}

