=== lever-free bodies in ov_MAIN_012 sharing a callee or global with func_80161E08 (17 found; top 6 by shared symbols) — read them for the SHAPE ===
--- func_80145B24 (src/shared/ov/func_80145B24.h:13) shares 2: D_800AF630 func_800291DC ---
void func_80145B24(void)
{
    s32 iVar1;
    s32 uVar2;
    u8 *p;
    p = &D_800AF630;
    iVar1 = func_80029504();
    uVar2 = func_800291DC(8);
    if ((uVar2 & 0x8000) != 0) {
        func_800291C8(8, 0);
        func_80162120();
    }
    if (iVar1 >= 0x6A4) {
        func_80029124(0x1A, 0);
        func_80029124(0x8E, 0);
        func_80029124(0x143, 0);
        if ((D_80078EC0 & 0x7F) != 0) {
            D_80078EC0 = 1;
        }
        func_80165A50((s32)&D_80126B58);
        func_80029514(0x4B0);
    }
    *(s16 *)(p + 0xA3DA) = 0x3000;
}

--- func_801621CC (src/ov_MAIN_012/ov_MAIN_012_jr_8015A3C8.c:5891) shares 2: D_80078EB0 func_800291DC ---
s32 func_801621CC(s32 arg0) {

    extern u8 D_80078E78[];
    extern u8 D_80078EB0;
    extern u8 D_80078EB1;
    extern s32 D_80180EBC;
    s32 s0 = arg0;       /* $s0: arg0, crosses the call */
    u8 *s1 = D_80078E78; /* $s1: base, hoisted for the loop */
    s32 i;
    u32 a2;
    s32 d;                                       /* $a0: natural alloc; load via $v0 temp */
    s32 v, last, hi, lo;
    char pad[8];                                 /* phantom 8B local -> frame 0x28 (vars=8) */

    a2 = func_800291DC(8);
    if ((a2 & 0x8000) == 0) {
        return 0;
    }
    a2 &= 0x7FFF;
    if (((a2 >> 8) == D_80078EB1) && ((a2 & 0xFF) <= (u32)D_80078EB0)) {
        return (s32)&D_80180EBC;
    }
    d = s1[0x39] - 1;
    i = 0;
    if (s0 <= 0) {
        return 0;
    }
    hi = (a2 >> 8) & 0xFF;
    last = s0 - 1;
    do {
        if ((s8)d < 0) {
            d = 0x17;
        }
        v = (s8)d;
        if (hi == v) {
            if (i != last) {
                return (s32)&D_80180EBC;
            }
            i++;
            if ((u32)s1[0x38] < (u32)(a2 & 0xFF)) {
                return (s32)&D_80180EBC;
            }
            goto bot;
        }
        i++;
    bot:
        do { d--; } while (0);
    } while (i < s0);
    return 0;
}

--- func_8016AB6C (src/ov_MAIN_012/ov_MAIN_012_jr_8016AB6C.c:2852) shares 2: func_8001CE28 func_80024054 ---
s32 func_8016AB6C(s32 arg0) {
    typedef struct Obj_8016AB6C {
        s32 unk0;
        s32 unk4;
        u8  pad8[0xE - 0x8];
        s16 unkE;
        u8  pad10[0x24 - 0x10];
        u8  unk24, unk25, unk26, unk27;
        u8  pad28[0x2E - 0x28];
        s16 unk2E;
        s16 unk30;
    } Obj_8016AB6C;
    typedef struct Ent_8016AB6C {
        u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE;
        s32 unk10, unk14, unk18, unk1C;
        Obj_8016AB6C *unk20;
        s16 unk24, unk26, unk28, unk2A;
        s32 unk2C;
        s32 unk30;
    } Ent_8016AB6C;
    typedef struct SVec_8016AB6C {
        s16 vx, vy, vz, pad;
    } SVec_8016AB6C;

    extern s32 func_801783D0(s32 a0, s32 a1);
    extern s32 func_80024054(u8 *a0, u8 *a1);
    extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1);
    extern s32 rand(void);
    extern void func_801465C0(void);
    extern void func_80146C3C(u8 *a0);
    extern void func_800D20C0(void *a0, void *a1, s32 a2);
    extern u8 D_801814AC[];
    extern u8 D_80184668[];
    extern u8 D_801814BC[];
    extern u8 D_80184690[];

    SVec_8016AB6C sp10;
    SVec_8016AB6C sp18;
    s16 var_s0;
    s16 var_v1;
    s16 var_s3;
    s16 tmp;
    s32 temp_v0;
    u32 r;
    u8 var_c2;
    Obj_8016AB6C *obj;

    temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0);
    var_s0 = 3;
    var_v1 = -0x1000;
    ((Ent_8016AB6C *)arg0)->unk30 = temp_v0;
    do {
        if (temp_v0 & var_v1) {
            goto lout;
        }
        var_s0--;
        var_v1 >>= 4;
    } while (var_s0 >= 0);
lout:
    switch (((Ent_8016AB6C *)arg0)->unk2C) {
    case 0:
        ((Ent_8016AB6C *)arg0)->unk26 = 1;
        ((Ent_8016AB6C *)arg0)->unk24 = 0x60;
        ((Ent_8016AB6C *)arg0)->unkA -= 0x20;
        break;
    case 1:
    case 5:
        ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000;
        r = ((u32(*)())rand)();
        tmp = var_s0 + 1;
        var_s0 = tmp;
        ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF;
        ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF;
        ((Ent_8016AB6C *)arg0)->unk26 = 4;
        ((Ent_8016AB6C *)arg0)->unk24 = 0x80;
        ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4);
        break;
    case 2:
    case 4:
        ((Ent_8016AB6C *)arg0)->unk26 = 4;
        ((Ent_8016AB6C *)arg0)->unk24 = 0x80;
        ((Ent_8016AB6C *)arg0)->unkA -= 0x18;
        break;
    case 3:
        tmp = var_s0 + 1;
        var_s0 = tmp;
        var_s0++;
        ((Ent_8016AB6C *)arg0)->unk26 = 4;
        ((Ent_8016AB6C *)arg0)->unk24 = 0x80;
        ((Ent_8016AB6C *)arg0)->unkA -= 0x18;
        ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10;
        break;
    case 6:
    case 7:
        obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0);
        if (obj == 0) {
            ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0));
            return;
        }
        sp10.vx = ((Ent_8016AB6C *)arg0)->unk6;
        sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18;
        sp10.vz = ((Ent_8016AB6C *)arg0)->unkE;
        ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6);
        ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx;
        ((Ent_8016AB6C *)arg0)->unkA = sp10.vy;
        ((Ent_8016AB6C *)arg0)->unkE = sp10.vz;
        if (((Ent_8016AB6C *)arg0)->unk2C == 6) {
            var_s3 = func_80024054(D_801814AC, D_80184668) + 3;
            func_8001CE28(obj, D_80184668);
        } else {
            var_s3 = func_80024054(D_801814BC, D_80184690) + 9;
            func_8001CE28(obj, D_80184690);
        }
        obj->unkE = var_s3;
        obj->unk4 |= 0x04000000;
        if (((Ent_8016AB6C *)arg0)->unk2C == 6) {
            obj->unk27 = 0xB5;
            var_s0 = 0x70;
        } else {
            obj->unk27 = 0xAE;
            var_s0 = 0xB0;
        }
        var_c2 = var_s0;
        var_s0 = var_s3 >> 2;
        obj->unk2E = -8;
        obj->unk30 = 0;
        obj->unk26 = var_c2;
        obj->unk25 = var_c2;
        obj->unk24 = var_c2;
        ((Ent_8016AB6C *)arg0)->unk20 = obj;
        break;
    }
    ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4);
    ((Ent_8016AB6C *)arg0)->unk28 = var_s0;
    ((Ent_8016AB6C *)arg0)->unk1C = 0xB;
    ((Ent_8016AB6C *)arg0)->unk2++;
}

--- func_80162120 (src/shared/ov/func_80162120.h:6) shares 1: func_800291DC ---
void func_80162120(void) {
    s32 v0;
    if ((s16)func_800291DC(8) == 0) {
        v0 = func_800D0D7C(0, 1);
        func_800291C8(8, (s16)(v0 | 0x8000));
    }
}

--- func_80162714 (src/shared/ov/func_80162714.h:6) shares 1: func_800291DC ---
void func_80162714(void) {
    s32 v0;
    if ((s16)func_800291DC(0x12) == 0) {
        v0 = func_800D0D7C(0xC, 0);
        func_800291C8(0x12, (s16)(v0 | 0x8000));
    }
}

--- func_801620C4 (src/shared/ov/func_801620C4.h:5) shares 1: func_800291DC ---
int func_801620C4(void) {
    short local;
    int lo;
    local = func_800291DC(8) & 0x7FFF;
    local = func_800D0E30(&local);
    lo = *(unsigned char *)&local;
    return (short)(*((unsigned char *)&local + 1) * 100 + lo);
}

