// // sub_180002DE0 from 0x180002de0 to 0x1800030b4 (724 bytes) // // 2 xrefs: // > sub_180002C10 @ 0x180002db5 // > @ 0x1800491a4 // // 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 // // Hidden C++ exception states: #wind=2 void __fastcall sub_180002DE0(__int64 a1, __int64 a2) { __int64 v2; // r14 _QWORD *v3; // rdx __int64 v4; // r8 __int64 v5; // rcx __int64 v6; // rax __int64 v7; // rcx void *v8; // rcx unsigned __int64 v9; // rbx __int64 v10; // rax __int64 v11; // rcx void *v12; // rcx cocos2d::CCUserDefault *v13; // rax _QWORD *v14; // rsi size_t v15; // r13 size_t v16; // r15 char *v17; // rdi size_t v18; // rax void *v19; // rax const char *v20; // rcx char *v21; // rcx void *Block[2]; // [rsp+28h] [rbp-48h] BYREF __int128 v23; // [rsp+38h] [rbp-38h] char *FileName[2]; // [rsp+48h] [rbp-28h] BYREF __int128 v25; // [rsp+58h] [rbp-18h] v2 = *(_QWORD *)(a2 + 8); v3 = (_QWORD *)(v2 + 40); if ( *(_QWORD *)(v2 + 64) > 0xFu ) v3 = (_QWORD *)*v3; *(_OWORD *)Block = 0; v23 = 0; v4 = -1; do ++v4; while ( *((_BYTE *)v3 + v4) ); sub_180003AB0(Block, v3); v6 = cocos2d::CCUserDefault::sharedUserDefault(v5); cocos2d::CCUserDefault::setStringForKey(v6, "current-version-code", Block); if ( *((_QWORD *)&v23 + 1) > 0xFu ) { v8 = Block[0]; if ( (unsigned __int64)(*((_QWORD *)&v23 + 1) + 1LL) >= 0x1000 ) { v8 = *((void **)Block[0] - 1); if ( (unsigned __int64)((char *)Block[0] - (char *)v8 - 8) > 0x1F ) invalid_parameter_noinfo_noreturn(); } j_j_free(v8); } *(_OWORD *)Block = 0; *(_QWORD *)&v23 = 0; v9 = 15; *((_QWORD *)&v23 + 1) = 15; LOBYTE(Block[0]) = 0; v10 = cocos2d::CCUserDefault::sharedUserDefault(v7); cocos2d::CCUserDefault::setStringForKey(v10, "downloaded-version-code", Block); if ( *((_QWORD *)&v23 + 1) > 0xFu ) { v12 = Block[0]; if ( (unsigned __int64)(*((_QWORD *)&v23 + 1) + 1LL) >= 0x1000 ) { v12 = *((void **)Block[0] - 1); if ( (unsigned __int64)((char *)Block[0] - (char *)v12 - 8) > 0x1F ) invalid_parameter_noinfo_noreturn(); } j_j_free(v12); } v13 = (cocos2d::CCUserDefault *)cocos2d::CCUserDefault::sharedUserDefault(v11); cocos2d::CCUserDefault::flush(v13); cocos2d::extension::AssetsManager::setSearchPath((cocos2d::extension::AssetsManager *)v2); v14 = (_QWORD *)(v2 + 8); v15 = *(_QWORD *)(v2 + 24); if ( 0x7FFFFFFFFFFFFFFFLL - v15 < 0x20 ) sub_180003D90(); if ( *(_QWORD *)(v2 + 32) > 0xFu ) v14 = (_QWORD *)*v14; *(_OWORD *)FileName = 0; v25 = 0; v16 = v15 + 32; v17 = (char *)FileName; if ( v15 + 32 > 0xF ) { v9 = v16 | 0xF; if ( (v16 | 0xF) <= 0x7FFFFFFFFFFFFFFFLL ) { if ( v9 < 0x16 ) v9 = 22; if ( v9 + 1 < 0x1000 ) { if ( v9 == -1 ) v17 = nullptr; else v17 = (char *)operator new(v9 + 1); LABEL_31: FileName[0] = v17; goto LABEL_32; } v18 = v9 + 40; if ( v9 + 40 < v9 + 1 ) Concurrency::cancel_current_task(); } else { v9 = 0x7FFFFFFFFFFFFFFFLL; v18 = 0x8000000000000027uLL; } v19 = operator new(v18); if ( !v19 ) goto LABEL_39; v17 = (char *)(((unsigned __int64)v19 + 39) & 0xFFFFFFFFFFFFFFE0uLL); *((_QWORD *)v17 - 1) = v19; goto LABEL_31; } LABEL_32: *(_QWORD *)&v25 = v15 + 32; *((_QWORD *)&v25 + 1) = v9; memcpy(v17, v14, v15); qmemcpy(&v17[v15], "cocos2dx-update-temp-package.zip", 32); v17[v16] = 0; v20 = (const char *)FileName; if ( *((_QWORD *)&v25 + 1) > 0xFu ) v20 = FileName[0]; remove(v20); if ( v2 ) (*(void (__fastcall **)(_QWORD))(**(_QWORD **)(v2 + 200) + 16LL))(*(_QWORD *)(v2 + 200)); if ( *((_QWORD *)&v25 + 1) > 0xFu ) { v21 = FileName[0]; if ( (unsigned __int64)(*((_QWORD *)&v25 + 1) + 1LL) >= 0x1000 ) { v21 = *((char **)FileName[0] - 1); if ( (unsigned __int64)(FileName[0] - v21 - 8) > 0x1F ) LABEL_39: invalid_parameter_noinfo_noreturn(); } j_j_free(v21); } }