Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- __int64 __fastcall UpdateFaceGenTints(__int64 a1)
- {
- __int64 facegenManager; // r14@1
- __int64 v2; // r13@1
- signed __int64 v3; // r15@1
- int v4; // edi@1
- unsigned int v5; // ebx@1
- DWORD v6; // ecx@3
- int v7; // ecx@6
- int v8; // ecx@7
- int v9; // ecx@8
- __int64 v10; // rcx@10
- __int64 v11; // rax@15
- void (__fastcall *v12)(_QWORD); // rax@17
- __int64 v13; // rcx@20
- __int64 npcTarget1; // r15@26
- int v15; // ebx@31
- int i; // er13@31
- __int64 npcTarget; // rbx@36
- __int64 tintList; // rdx@37
- __int64 chargenData; // rax@41
- __int64 npcTarget2; // rcx@41
- __int64 *v21; // rcx@42
- __int64 v22; // rax@45
- void (__fastcall *v23)(_QWORD); // rax@47
- __int64 v24; // rcx@51
- __int64 v25; // r14@51
- __int64 v26; // rbx@51
- unsigned int v27; // edx@64
- unsigned int v28; // eax@65
- __int64 npc1; // rbx@66
- __int64 v30; // rdx@67
- __int64 v31; // rax@71
- __int64 v32; // rcx@71
- __int64 v33; // rax@71
- __int64 v34; // rbx@71
- signed __int64 v35; // r14@71
- __int64 result; // rax@86
- __int64 a5; // [sp+20h] [bp-A8h]@0
- __int64 a6; // [sp+28h] [bp-A0h]@0
- __int64 tintListTarget; // [sp+30h] [bp-98h]@36
- unsigned int v40; // [sp+40h] [bp-88h]@36
- __int64 tintListTarget2; // [sp+48h] [bp-80h]@26
- __int16 v42; // [sp+50h] [bp-78h]@26
- char v43; // [sp+52h] [bp-76h]@26
- __int64 v44; // [sp+58h] [bp-70h]@26
- __int64 v45; // [sp+60h] [bp-68h]@26
- __int64 v46; // [sp+68h] [bp-60h]@26
- __int64 v47; // [sp+70h] [bp-58h]@26
- __int64 v48; // [sp+78h] [bp-50h]@26
- __int64 v49; // [sp+80h] [bp-48h]@34
- __int16 v50; // [sp+88h] [bp-40h]@34
- char v51; // [sp+8Ah] [bp-3Eh]@34
- __int64 v52; // [sp+90h] [bp-38h]@34
- __int64 v53; // [sp+98h] [bp-30h]@42
- __int64 v54; // [sp+A0h] [bp-28h]@42
- __int64 v55; // [sp+A8h] [bp-20h]@42
- __int64 v56; // [sp+B0h] [bp-18h]@42
- __int64 v57; // [sp+B8h] [bp-10h]@42
- __int16 v58; // [sp+C0h] [bp-8h]@42
- char v59; // [sp+C2h] [bp-6h]@42
- __int64 v60; // [sp+C8h] [bp+0h]@42
- __int64 v61; // [sp+D0h] [bp+8h]@19
- __int64 v62; // [sp+D8h] [bp+10h]@19
- __int64 v63; // [sp+E0h] [bp+18h]@19
- __int64 v64; // [sp+E8h] [bp+20h]@19
- __int64 v65; // [sp+F0h] [bp+28h]@19
- __int16 v66; // [sp+F8h] [bp+30h]@19
- char v67; // [sp+FAh] [bp+32h]@19
- __int64 v68; // [sp+100h] [bp+38h]@19
- __int64 v69; // [sp+108h] [bp+40h]@49
- __int64 v70; // [sp+110h] [bp+48h]@49
- __int64 v71; // [sp+118h] [bp+50h]@49
- __int64 v72; // [sp+120h] [bp+58h]@49
- __int64 v73; // [sp+128h] [bp+60h]@49
- __int16 v74; // [sp+130h] [bp+68h]@49
- char v75; // [sp+132h] [bp+6Ah]@49
- __int64 v76; // [sp+138h] [bp+70h]@49
- __int64 vars10; // [sp+198h] [bp+D0h]@1
- __int64 vars18; // [sp+1A0h] [bp+D8h]@24
- __int64 vars20; // [sp+1A8h] [bp+E0h]@53
- __int64 vars28; // [sp+1B0h] [bp+E8h]@73
- facegenManager = a1;
- v2 = a1 + 0x3228;
- v3 = *(_QWORD *)(*MK_FP(__GS__, 88i64) + 8i64 * (unsigned int)TlsIndex) + 2496i64;
- v4 = *(_DWORD *)v3;
- *(_DWORD *)v3 = 78;
- vars10 = v3;
- sub_1400244C0(a1 + 0x3228);
- v5 = 0;
- while ( _InterlockedCompareExchange((volatile signed __int32 *)&dword_1458A6EF4, 1, 0) != 1 )
- {
- if ( v5 >= 0x2710 )
- {
- v6 = 1;
- }
- else
- {
- ++v5;
- v6 = 0;
- }
- Sleep(v6);
- }
- _mm_mfence();
- v7 = *(_DWORD *)(facegenManager + 0x34A0);
- if ( !v7 )
- {
- vars18 = facegenManager;
- if ( *(_QWORD *)(facegenManager + 0x31F0) && *(_QWORD *)(facegenManager + 0x31F8) )
- {
- npcTarget1 = facegenManager + 0x31B8;
- sub_140677C60(facegenManager + 0x31B8, facegenManager + 0x31F0);
- v45 = 0i64;
- v46 = 0i64;
- v47 = 0i64;
- v48 = 0i64;
- tintListTarget2 = 0i64;
- v42 = 0;
- v43 = 0;
- v44 = 0i64;
- sub_140677C60(facegenManager + 0x31F0, (__int64)&v45);
- sub_140677BC0((__int64)&v45);
- }
- else
- {
- npcTarget1 = facegenManager + 0x31B8;
- if ( !(unsigned __int8)sub_140679020((__int64)&vars18, facegenManager + 0x31B8) )
- goto LABEL_64;
- }
- if ( *(_QWORD *)npcTarget1 && *(_QWORD *)(facegenManager + 0x31C0) )
- {
- if ( *(_BYTE *)(facegenManager + 0x31E2) )
- {
- v15 = *(_DWORD *)(facegenManager + 0x31B0);
- for ( i = v15 + (unsigned __int64)sub_14067BB30(facegenManager + 0x80); i; --i )
- {
- if ( !(unsigned __int8)sub_140679020((__int64)&vars18, facegenManager + 0x31F0) )
- break;
- if ( *(_QWORD *)(facegenManager + 0x31F0) != *(_QWORD *)npcTarget1 )
- break;
- sub_140677C60(npcTarget1, facegenManager + 0x31F0);
- v45 = 0i64;
- v46 = 0i64;
- v47 = 0i64;
- v48 = 0i64;
- v49 = 0i64;
- v50 = 0;
- v51 = 0;
- v52 = 0i64;
- sub_140677C60(facegenManager + 0x31F0, (__int64)&v45);
- sub_140677BC0((__int64)&v45);
- *(_BYTE *)(facegenManager + 0x31E2) = 1;
- }
- v2 = facegenManager + 0x3228;
- }
- sub_141AEF440((__int64)&tintListTarget);
- unknown_libname_6459((__int64)&v40);
- npcTarget = *(_QWORD *)npcTarget1;
- v40 = 0;
- if ( npcTarget == GetBaseForm(g_player) )
- tintList = *(_QWORD *)(g_player + 0xD00);
- else
- tintList = *(_QWORD *)(npcTarget + 0x300);
- if ( tintList )
- CopyCharacterTints(&tintListTarget, tintList);
- chargenData = TESNPC::GetChargenData(npcTarget);
- sub_1402A2920((__int64)&tintListTarget, chargenData);
- npcTarget2 = *(_QWORD *)npcTarget1;
- if ( *(_BYTE *)(facegenManager + 0x31E2) )
- {
- sub_140687190(npcTarget2, (__int64)&tintListTarget, 0i64);
- sub_1406782E0(facegenManager, npcTarget1);
- v53 = 0i64;
- v54 = 0i64;
- v55 = 0i64;
- v56 = 0i64;
- v57 = 0i64;
- v58 = 0;
- v59 = 0;
- v60 = 0i64;
- sub_140677C60(npcTarget1, (__int64)&v53);
- v21 = &v53;
- }
- else
- {
- LOBYTE(a6) = 0;
- LODWORD(a5) = 0;
- if ( (unsigned __int8)sub_1406873A0(
- npcTarget2,
- (__int64)&tintListTarget,
- *(_QWORD *)(facegenManager + 0x31E8),
- *(_QWORD *)(facegenManager + 0x3230),
- a5,
- a6) )
- {
- *(_DWORD *)(facegenManager + 0x34A0) = 1;
- *(_BYTE *)(facegenManager + 0x34F9) = *(_QWORD *)npcTarget1 == GetBaseForm(g_player);
- LABEL_51:
- v24 = tintListTarget;
- v25 = 0i64;
- v26 = tintListTarget;
- if ( !v40 )
- v26 = 0i64;
- vars20 = v26;
- if ( v40 )
- v25 = tintListTarget + 8i64 * v40;
- if ( v26 != v25 )
- {
- do
- {
- if ( *(_QWORD *)v26 )
- (***(void (__fastcall ****)(_QWORD, _QWORD))v26)(*(_QWORD *)v26, 1i64);
- v26 += 8i64;
- }
- while ( v26 != v25 );
- v24 = tintListTarget;
- vars20 = v26;
- }
- if ( v24 )
- {
- sub_141AEF660(&tintListTarget);
- v40 = 0;
- if ( tintListTarget )
- {
- sub_141AEF660(&tintListTarget);
- v40 = 0;
- }
- }
- nullsub_681(&v40);
- nullsub_682(&tintListTarget);
- LABEL_85:
- v3 = vars10;
- goto LABEL_86;
- }
- v22 = *(_QWORD *)(npcTarget1 + 0x10);
- if ( v22 )
- *(_BYTE *)(v22 + 0x83) = 0;
- v23 = *(void (__fastcall **)(_QWORD))(npcTarget1 + 0x18);
- if ( v23 )
- v23(*(_QWORD *)(npcTarget1 + 0x20));
- v69 = 0i64;
- v70 = 0i64;
- v71 = 0i64;
- v72 = 0i64;
- v73 = 0i64;
- v74 = 0;
- v75 = 0;
- v76 = 0i64;
- sub_140677C60(npcTarget1, (__int64)&v69);
- v21 = &v69;
- }
- sub_140677BC0((__int64)v21);
- goto LABEL_51;
- }
- LABEL_64:
- v27 = *(_DWORD *)(facegenManager + 0x3498);
- if ( v27 == -1 )
- {
- sub_1406851F0(facegenManager + 0x3238);
- }
- else
- {
- v28 = sub_140678390(facegenManager, v27);
- *(_DWORD *)(facegenManager + 0x3498) = v28;
- if ( v28 != -1 )
- {
- npc1 = *(_QWORD *)(*(_QWORD *)(facegenManager + 0x3480) + 8i64 * v28);
- sub_141AEF440((__int64)&tintListTarget2);
- unknown_libname_6459((__int64)&v44);
- LODWORD(v44) = 0;
- if ( npc1 == GetBaseForm(g_player) )
- v30 = *(_QWORD *)(g_player + 0xD00);
- else
- v30 = *(_QWORD *)(npc1 + 0x300);
- if ( v30 )
- CopyCharacterTints(&tintListTarget2, v30);
- v31 = TESNPC::GetChargenData(npc1);
- sub_1402A2920((__int64)&tintListTarget2, v31);
- LOBYTE(a6) = 1;
- LODWORD(a5) = 0;
- sub_1406873A0(
- npc1,
- (__int64)&tintListTarget2,
- *(_QWORD *)(facegenManager + 0x3478),
- *(_QWORD *)(facegenManager + 0x3230),
- a5,
- a6);
- v32 = tintListTarget2;
- v33 = (unsigned int)v44;
- v34 = tintListTarget2;
- *(_DWORD *)(facegenManager + 0x34A0) = 3;
- v35 = 0i64;
- if ( !(_DWORD)v33 )
- v34 = 0i64;
- vars28 = v34;
- if ( (_DWORD)v33 )
- v35 = v32 + 8 * v33;
- if ( v34 != v35 )
- {
- do
- {
- if ( *(_QWORD *)v34 )
- (***(void (__fastcall ****)(_QWORD, _QWORD))v34)(*(_QWORD *)v34, 1i64);
- v34 += 8i64;
- }
- while ( v34 != v35 );
- v32 = tintListTarget2;
- vars28 = v34;
- }
- if ( v32 )
- {
- sub_141AEF660(&tintListTarget2);
- LODWORD(v44) = 0;
- if ( tintListTarget2 )
- {
- sub_141AEF660(&tintListTarget2);
- LODWORD(v44) = 0;
- }
- }
- nullsub_681(&v44);
- nullsub_682(&tintListTarget2);
- }
- }
- goto LABEL_85;
- }
- v8 = v7 - 1;
- if ( v8 )
- {
- v9 = v8 - 1;
- if ( v9 )
- {
- if ( v9 == 1 )
- {
- v10 = *(_QWORD *)(facegenManager + 0x3478);
- if ( !v10 || (unsigned __int8)sub_140688250(v10) )
- *(_DWORD *)(facegenManager + 0x34A0) = 0;
- }
- }
- else
- {
- if ( sub_140677FD0(facegenManager) )
- {
- v11 = *(_QWORD *)(facegenManager + 0x31C8);
- if ( v11 )
- *(_BYTE *)(v11 + 131) = 0;
- v12 = *(void (__fastcall **)(_QWORD))(facegenManager + 0x31D0);
- if ( v12 )
- v12(*(_QWORD *)(facegenManager + 0x31D8));
- }
- else
- {
- sub_1406782E0(facegenManager, facegenManager + 0x31B8);
- sub_1406851F0(facegenManager + 0x3238);
- }
- v61 = 0i64;
- v62 = 0i64;
- v63 = 0i64;
- v64 = 0i64;
- v65 = 0i64;
- v66 = 0;
- v67 = 0;
- v68 = 0i64;
- sub_140677C60(facegenManager + 0x31B8, (__int64)&v61);
- sub_140677BC0((__int64)&v61);
- *(_DWORD *)(facegenManager + 0x34A0) = 0;
- *(_BYTE *)(facegenManager + 0x34F9) = 0;
- }
- }
- else
- {
- v13 = *(_QWORD *)(facegenManager + 0x31E8);
- if ( v13 )
- {
- if ( (unsigned __int8)sub_140688250(v13) )
- {
- sub_1406882D0(*(_QWORD *)(facegenManager + 0x31E8), *(_QWORD *)(facegenManager + 0x3230));
- *(_DWORD *)(facegenManager + 0x34A0) = 2;
- }
- }
- else
- {
- *(_DWORD *)(facegenManager + 0x34A0) = 0;
- }
- }
- LABEL_86:
- result = *(_DWORD *)(v2 + 4);
- if ( (_DWORD)result == 1 )
- {
- *(_DWORD *)v2 = 0;
- _mm_mfence();
- result = (unsigned int)_InterlockedCompareExchange((volatile signed __int32 *)(v2 + 4), 0, 1);
- }
- else
- {
- _InterlockedDecrement((volatile signed __int32 *)(v2 + 4));
- }
- _mm_mfence();
- _InterlockedExchange((volatile signed __int32 *)&dword_1458A6EF4, 0);
- *(_DWORD *)v3 = v4;
- return result;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement