// // sub_103C94 from 0x103c94 to 0x103e84 (496 bytes) // // 4 xrefs: // > sub_103E84 @ 0x103f24 // > sub_103E84 @ 0x10403c // > sub_10449C @ 0x1045dc // > sub_104768 @ 0x104770 // // 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 // __int16 __usercall sub_103C94@(__int64 a1@, __int64 a2@) { __int64 v2; // x28 __int64 v3; // x25 __int64 v4; // x27 unsigned __int64 v7; // x24 unsigned int v8; // w13 int v9; // w14 __int16 v10; // w22 int v11; // w26 unsigned __int64 v12; // x8 __int16 v13; // w23 int v14; // w21 __int16 v15; // w8 unsigned int v16; // w2 __int64 v17; // x0 __int64 v18; // x1 __int16 v19; // w13 unsigned __int64 v20; // x23 unsigned int v21; // w22 __int64 v22; // x0 __int16 v23; // w2 unsigned int v24; // w13 unsigned int v25; // w21 int v26; // w14 int v27; // w22 __int64 v28; // x1 unsigned int v29; // w0 unsigned __int64 v30; // x24 int v31; // w8 unsigned int v32; // w23 __int64 v33; // x0 __int16 v34; // w2 unsigned int v35; // w13 unsigned int v36; // w21 int v37; // w14 int v38; // w23 __int64 v39; // x1 unsigned int v40; // w0 __int64 v41; // x0 unsigned int v42; // w13 unsigned int v43; // w24 int v44; // w14 int v45; // w27 __int64 v46; // x1 __int16 v47; // w2 int v48; // w3 unsigned int v49; // w0 int v50; // w9 int v51; // w10 __int64 v52; // x9 v2 = *(unsigned int *)(a1 + 112); v4 = *(_QWORD *)(a1 + 48); v3 = *(_QWORD *)(a1 + 56); v7 = **(_QWORD **)a2 >> *(_DWORD *)(a2 + 16); v8 = *(unsigned __int16 *)(v4 + 2 * (v7 & v2)); v9 = *(unsigned __int8 *)(v3 + (v8 & 0x7FFF)); v10 = *(_WORD *)(v4 + 2 * ((v7 >> v9) & v2)); v11 = *(unsigned __int8 *)(v3 + (v10 & 0x7FFF)); v12 = v7 >> v9 >> v11; v13 = *(_WORD *)(v4 + 2 * (v12 & v2)); v14 = *(unsigned __int8 *)(v3 + (v13 & 0x7FFF)); v15 = *(_WORD *)(v4 + 2 * ((v12 >> v14) & v2)); if ( (__int16)(v10 | v8 | v13 | v15) < 0 ) { if ( (__int16)v8 < 0 ) { v17 = sub_104774(); v8 = sub_FBCF8(v17, v18, v19, v7); } v9 = *(unsigned __int8 *)(v3 + v8); v20 = v7 >> v9; v21 = *(unsigned __int16 *)(v4 + 2 * ((v7 >> v9) & v2)); if ( *(__int16 *)(v4 + 2 * ((v7 >> v9) & v2)) < 0 ) { v22 = sub_104774(); v23 = v21; v25 = v24; v27 = v26; v29 = sub_FBCF8(v22, v28, v23, v20); v9 = v27; v8 = v25; v21 = v29; } v11 = *(unsigned __int8 *)(v3 + v21); v30 = v20 >> v11; v31 = *(__int16 *)(v4 + 2 * ((v20 >> v11) & v2)); v32 = *(unsigned __int16 *)(v4 + 2 * ((v20 >> v11) & v2)); if ( v31 < 0 ) { v33 = sub_104774(); v34 = v32; v36 = v35; v38 = v37; v40 = sub_FBCF8(v33, v39, v34, v30); v9 = v38; v8 = v36; v32 = v40; } v14 = *(unsigned __int8 *)(v3 + v32); v16 = *(unsigned __int16 *)(v4 + 2 * ((v30 >> v14) & v2)); if ( *(__int16 *)(v4 + 2 * ((v30 >> v14) & v2)) < 0 ) { v41 = sub_104774(); v43 = v42; v45 = v44; v49 = sub_FBCF8(v41, v46, v47, v48); v9 = v45; v8 = v43; v16 = v49; } } else { v16 = v15 & 0x7FFF; } v50 = v11 + v14 + v9 + *(unsigned __int8 *)(v3 + v16) + *(_DWORD *)(a2 + 16); v51 = v50 & 7; v52 = *(_QWORD *)a2 + (v50 >> 3); *(_DWORD *)(a2 + 16) = v51; *(_QWORD *)a2 = v52; return *(_WORD *)(*(_QWORD *)(a1 + 72) + 2LL * (v8 - 1)); }