// // sub_180007790 from 0x180007790 to 0x180007a63 (723 bytes) // // 2 xrefs: // > sub_180017630 @ 0x180017929 // > @ 0x1801f639c // // This function is hookable on this platform! // // Using BromaIDA 8.0.0 @ https://github.com/Stazzical/BromaIDA // Using bindings at commit ba9f177b at Thu Jul 16 22:52:06 2026 from https://github.com/geode-sdk/bindings // __int64 __fastcall sub_180007790(__int64 a1, _QWORD *a2) { __int64 v2; // rbx int v6; // eax int v7; // ebp int v8; // esi int v9; // esi int v10; // eax __int64 v11; // rax __int64 v12; // rcx int v13; // r14d __int64 v14; // rsi unsigned __int8 v15; // cl int v16; // eax int v17; // esi int v18; // eax int v19; // esi int v20; // eax __int64 v21; // rsi v2 = *(_QWORD *)(a1 + 32); if ( !v2 ) return 4294967167LL; v6 = sub_180001340((__int64)a2, 8) + 1; *(_DWORD *)(v2 + 24) = v6; v7 = 0; *(_QWORD *)(v2 + 72) = sub_180018340(16, (unsigned int)(120 * v6)); v8 = 0; if ( *(int *)(v2 + 24) > 0 ) { while ( !(unsigned int)sub_180001A10(a2, *(_QWORD *)(v2 + 72) + 120LL * v8) ) { if ( ++v8 >= *(_DWORD *)(v2 + 24) ) goto LABEL_6; } return 4294967163LL; } LABEL_6: v9 = sub_180001340((__int64)a2, 6); if ( v9 >= 0 ) { while ( !(unsigned int)sub_180001340((__int64)a2, 16) ) { if ( --v9 < 0 ) goto LABEL_9; } return 4294967163LL; } LABEL_9: v10 = sub_180001340((__int64)a2, 6); *(_DWORD *)(v2 + 16) = v10 + 1; v11 = sub_1800182F0((unsigned int)(8 * (v10 + 1))); v12 = *(unsigned int *)(v2 + 16); *(_QWORD *)(v2 + 56) = v11; v13 = 0; *(_QWORD *)(v2 + 48) = sub_1800182F0(v12); if ( *(int *)(v2 + 16) > 0 ) { v14 = 0; do { *(_BYTE *)(v14 + *(_QWORD *)(v2 + 48)) = sub_180001340((__int64)a2, 16); v15 = *(_BYTE *)(v14 + *(_QWORD *)(v2 + 48)); if ( v15 > 1u ) return 4294967163LL; if ( v15 ) *(_QWORD *)(*(_QWORD *)(v2 + 56) + 8 * v14) = sub_180006640(a1, a2); if ( !*(_QWORD *)(*(_QWORD *)(v2 + 56) + 8 * v14) ) return 4294967163LL; ++v13; ++v14; } while ( v13 < *(_DWORD *)(v2 + 16) ); } v16 = sub_180001340((__int64)a2, 6) + 1; *(_DWORD *)(v2 + 20) = v16; v17 = 0; *(_QWORD *)(v2 + 64) = sub_1800182F0((unsigned int)(40 * v16)); if ( *(int *)(v2 + 20) > 0 ) { while ( !(unsigned int)sub_180009F30(*(_QWORD *)(v2 + 64) + 40LL * v17, a1, a2) ) { if ( ++v17 >= *(_DWORD *)(v2 + 20) ) goto LABEL_19; } return 4294967163LL; } LABEL_19: v18 = sub_180001340((__int64)a2, 6) + 1; *(_DWORD *)(v2 + 12) = v18; v19 = 0; *(_QWORD *)(v2 + 40) = sub_1800182F0((unsigned int)(40 * v18)); if ( *(int *)(v2 + 12) > 0 ) { while ( !(unsigned int)sub_180001340((__int64)a2, 16) && !(unsigned int)sub_180007E10(*(_QWORD *)(v2 + 40) + 40LL * v19, a1, a2) ) { if ( ++v19 >= *(_DWORD *)(v2 + 12) ) goto LABEL_23; } return 4294967163LL; } LABEL_23: v20 = sub_180001340((__int64)a2, 6); *(_DWORD *)(v2 + 8) = v20 + 1; *(_QWORD *)(v2 + 32) = sub_1800182F0((unsigned int)(2 * (v20 + 1))); if ( *(int *)(v2 + 8) > 0 ) { v21 = 0; do { *(_BYTE *)(v21 + *(_QWORD *)(v2 + 32)) = sub_180001340((__int64)a2, 1); if ( (unsigned int)sub_180001340((__int64)a2, 16) ) return 4294967163LL; if ( (unsigned int)sub_180001340((__int64)a2, 16) ) return 4294967163LL; *(_BYTE *)(v21 + *(_QWORD *)(v2 + 32) + 1) = sub_180001340((__int64)a2, 8); if ( *(unsigned __int8 *)(v21 + *(_QWORD *)(v2 + 32) + 1) >= *(int *)(v2 + 12) ) return 4294967163LL; ++v7; v21 += 2; } while ( v7 < *(_DWORD *)(v2 + 8) ); } if ( (unsigned int)sub_180001340((__int64)a2, 1) != 1 ) return 4294967163LL; return 0; }