Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- __int64 __fastcall MergeTintTextures(__int64 npc, __int64 tintTextureArray, __int64 sharedTarget, __int64 unk2, __int64 unk3, __int64 unk4)
- {
- signed __int64 v6; // rax@0
- int v7; // xmm0_4@0
- void *v8; // rsp@1
- bool v9; // zf@1
- __int64 _unk2; // rsi@1
- __int64 sharedTarget3; // rbx@1
- __int64 tintTextureArray1; // r12@1
- __int64 npc2; // r15@1
- signed int v14; // ecx@3
- int *v15; // rax@3
- __int64 headData; // rcx@5
- __int64 defaultTexture; // rcx@6
- __int64 v18; // rbx@7
- __int64 chargenData; // rcx@7
- __int64 textureSet; // rbx@9
- __int64 *v21; // rdx@10
- __int64 *v22; // r9@10
- unsigned __int64 v23; // r8@10
- __int64 *v24; // rcx@10
- __int64 *v25; // r8@10
- unsigned __int64 v26; // rdx@10
- __int64 *v27; // rcx@10
- __int64 *v28; // r8@10
- unsigned __int64 v29; // rdx@10
- __int64 *v30; // rcx@10
- __int64 *v31; // r8@10
- unsigned __int64 v32; // rdx@10
- __int64 race; // rbx@22
- __int64 chargenData1; // rax@22
- __int64 v35; // rdx@22
- __int64 v36; // r8@22
- __int64 morphGroups; // rax@23
- __int64 v38; // rcx@24
- __int64 *v39; // rbx@24
- signed __int64 v40; // rdi@27
- __int64 v41; // r9@32
- int numTintTextures; // eax@32
- __int64 i; // r14@32
- __int64 tintEntry; // rbx@33
- int tintType; // eax@35
- __int64 v46; // rdi@37
- __int64 *v47; // rcx@38
- __int64 *v48; // r8@38
- unsigned __int64 v49; // rdx@38
- __int64 *v50; // rcx@38
- __int64 *v51; // r8@38
- unsigned __int64 v52; // rdx@38
- __int64 *v53; // rcx@38
- __int64 *v54; // r8@38
- unsigned __int64 v55; // rdx@38
- __int64 *v56; // rcx@38
- __int64 *v57; // r8@38
- unsigned __int64 v58; // rdx@38
- signed __int64 diffuse; // rax@38
- __int64 v60; // rax@40
- unsigned __int64 v61; // rcx@40
- signed int v62; // edx@46
- __int64 v63; // rax@52
- signed int v64; // xmm0_4@54
- signed __int64 v65; // rax@56
- signed __int64 normal; // rax@58
- __int64 v67; // rax@60
- unsigned __int64 v68; // rcx@60
- signed __int64 specular; // rax@63
- __int64 v70; // rax@65
- unsigned __int64 v71; // rcx@65
- __int64 tintTemplate; // rdi@69
- signed __int64 tintTexture; // rax@70
- __int64 v74; // rax@72
- unsigned __int64 v75; // rcx@72
- __int64 *v76; // rcx@74
- __int64 *v77; // r8@74
- unsigned __int64 v78; // rdx@74
- __int64 *v79; // rcx@74
- __int64 *v80; // r8@74
- unsigned __int64 v81; // rdx@74
- __int64 *v82; // rcx@74
- __int64 *v83; // r8@74
- unsigned __int64 v84; // rdx@74
- __int64 *v85; // rcx@74
- __int64 *v86; // r8@74
- unsigned __int64 v87; // rdx@74
- int tintPaletteColor; // er15@74
- float v89; // xmm7_4@74
- float v90; // xmm6_4@74
- float v91; // xmm8_4@74
- float v92; // xmm7_4@74
- float v93; // xmm0_4@74
- signed __int64 v94; // rax@74
- signed int v95; // eax@75
- int v96; // eax@77
- int v97; // eax@78
- int v98; // eax@79
- signed int v99; // edx@81
- int v100; // esi@89
- __int64 v101; // r14@89
- __int64 v102; // r15@89
- __int64 v103; // rdi@89
- char *v104; // r10@89
- signed __int64 v105; // r12@89
- char v106; // bl@90
- unsigned int v107; // er8@90
- int v108; // er11@92
- unsigned __int64 v109; // rdx@92
- unsigned int v110; // er13@96
- __int64 v111; // rdi@96
- int v112; // er15@96
- signed int v113; // er10@96
- int *v114; // rbx@96
- char v115; // si@96
- char *v116; // r14@98
- __int64 v117; // rsi@100
- unsigned int v118; // er8@100
- int v119; // er9@101
- signed __int64 v120; // rdx@102
- __int64 v121; // rax@102
- unsigned __int64 v122; // rcx@102
- __int64 v123; // rax@108
- __int64 v124; // rcx@110
- int v125; // eax@119
- signed __int64 hairColorPalettePath; // rax@122
- signed __int64 v127; // rax@123
- __int64 v128; // r8@123
- int v130; // [sp+30h] [bp-B8h]@0
- int v131; // [sp+40h] [bp-A8h]@0
- char v132; // [sp+48h] [bp-A0h]@0
- unsigned int v133; // [sp+50h] [bp-98h]@3
- __int64 v134; // [sp+58h] [bp-90h]@38
- int v135; // [sp+60h] [bp-88h]@38
- __int64 *v136; // [sp+68h] [bp-80h]@5
- __int64 *v137; // [sp+70h] [bp-78h]@5
- __int64 v138; // [sp+78h] [bp-70h]@5
- int v139; // [sp+80h] [bp-68h]@70
- __int64 v140; // [sp+88h] [bp-60h]@1
- int v141; // [sp+90h] [bp-58h]@1
- __int64 v142; // [sp+98h] [bp-50h]@3
- __int64 v143; // [sp+A0h] [bp-48h]@3
- __int64 v144; // [sp+A8h] [bp-40h]@3
- __int64 v145; // [sp+B0h] [bp-38h]@3
- __int64 v146; // [sp+B8h] [bp-30h]@3
- __int64 v147; // [sp+C0h] [bp-28h]@3
- __int64 v148; // [sp+C8h] [bp-20h]@5
- char v149; // [sp+D0h] [bp-18h]@122
- __int64 v150; // [sp+D8h] [bp-10h]@96
- __int64 *v151; // [sp+E0h] [bp-8h]@26
- __int64 v152; // [sp+E8h] [bp+0h]@5
- __int64 sharedTarget4; // [sp+F0h] [bp+8h]@5
- __int64 *v154; // [sp+F8h] [bp+10h]@5
- int *v155; // [sp+100h] [bp+18h]@5
- __int64 *v156; // [sp+108h] [bp+20h]@5
- int *v157; // [sp+110h] [bp+28h]@5
- __int64 v158; // [sp+118h] [bp+30h]@22
- __int64 *v159; // [sp+120h] [bp+38h]@22
- __int64 *v160; // [sp+128h] [bp+40h]@22
- __int64 *v161; // [sp+130h] [bp+48h]@22
- __int64 *v162; // [sp+138h] [bp+50h]@22
- int *v163; // [sp+140h] [bp+58h]@22
- __int64 *v164; // [sp+148h] [bp+60h]@22
- __int64 *v165; // [sp+150h] [bp+68h]@22
- char v166; // [sp+158h] [bp+70h]@60
- char v167; // [sp+164h] [bp+7Ch]@72
- char v168; // [sp+170h] [bp+88h]@40
- char v169; // [sp+17Ch] [bp+94h]@65
- char v170; // [sp+18Ch] [bp+A4h]@89
- char v171; // [sp+1B8h] [bp+D0h]@40
- __int64 v172; // [sp+2C0h] [bp+1D8h]@40
- char v173; // [sp+2C8h] [bp+1E0h]@65
- __int64 v174; // [sp+3D0h] [bp+2E8h]@65
- char v175; // [sp+3D8h] [bp+2F0h]@72
- __int64 v176; // [sp+4E0h] [bp+3F8h]@72
- char v177; // [sp+4E8h] [bp+400h]@60
- __int64 v178; // [sp+5F0h] [bp+508h]@60
- int v179; // [sp+5F8h] [bp+510h]@5
- int v180; // [sp+5FCh] [bp+514h]@92
- int v181[1540]; // [sp+600h] [bp+518h]@3
- __int64 npc3; // [sp+1ED8h] [bp+1DF0h]@86
- char vars18; // [sp+1EE0h] [bp+1DF8h]@3
- char *retaddr; // [sp+1EE8h] [bp+1E00h]@98
- __int64 npc1; // [sp+1EF0h] [bp+1E08h]@1
- int v186; // [sp+1EF8h] [bp+1E10h]@96
- __int64 sharedTarget1; // [sp+1F00h] [bp+1E18h]@1
- sharedTarget1 = sharedTarget;
- npc1 = npc;
- v8 = alloca(v6);
- v9 = (*(_DWORD *)(sharedTarget + 0x234))++ == -1;
- v140 = 0i64;
- v141 = 0;
- _unk2 = unk2;
- sharedTarget3 = sharedTarget;
- tintTextureArray1 = tintTextureArray;
- npc2 = npc;
- if ( v9 )
- memset((void *)(sharedTarget + 0x34), 0, 0x200ui64);
- v133 = 0;
- vars18 = 1;
- v142 = 0i64;
- v143 = 0i64;
- v144 = 0i64;
- v145 = 0i64;
- v146 = 0i64;
- v147 = 0i64;
- v14 = 511;
- v15 = v181;
- do
- {
- --v14;
- *((_QWORD *)v15 - 1) = 0i64;
- *v15 = 0;
- v15 += 3;
- }
- while ( v14 >= 0 );
- memset((void *)_unk2, 0, 0x1400ui64);
- headData = *(_QWORD *)(npc2 + 0x248);
- v148 = _unk2 + 0xA00;
- v138 = _unk2;
- v152 = _unk2 + 0xC00;
- sharedTarget4 = sharedTarget3;
- v136 = &v142;
- v137 = &v140;
- v154 = &v142;
- v155 = &v179;
- v156 = &v152;
- v157 = (int *)&v133;
- if ( headData && (defaultTexture = *(_QWORD *)(headData + 0x10)) != 0
- || (v18 = *(_QWORD *)(npc2 + 0x1B8), (chargenData = *(_QWORD *)(v18 + 8i64 * TESNPC::GetSex(npc2) + 0x698)) != 0)
- && (defaultTexture = *(_QWORD *)(chargenData + 0x10)) != 0 )
- {
- textureSet = sub_1404C14F0(defaultTexture);
- if ( textureSet )
- {
- v21 = v137;
- v22 = v136;
- *((_DWORD *)v136 + 2) = *((_DWORD *)v137 + 2);
- v23 = *(_DWORD *)v21 | ((unsigned __int64)*((_DWORD *)v21 + 1) << 32);
- *(_DWORD *)v22 = *(_DWORD *)v21;
- *((_DWORD *)v22 + 1) = HIDWORD(v23);
- v24 = v137;
- v25 = v136;
- *((_DWORD *)v136 + 5) = *((_DWORD *)v137 + 2);
- v26 = *(_DWORD *)v24 | ((unsigned __int64)*((_DWORD *)v24 + 1) << 32);
- *((_DWORD *)v25 + 3) = *(_DWORD *)v24;
- *((_DWORD *)v25 + 4) = HIDWORD(v26);
- v27 = v137;
- v28 = v136;
- *((_DWORD *)v136 + 8) = *((_DWORD *)v137 + 2);
- v29 = *(_DWORD *)v27 | ((unsigned __int64)*((_DWORD *)v27 + 1) << 32);
- *((_DWORD *)v28 + 6) = *(_DWORD *)v27;
- *((_DWORD *)v28 + 7) = HIDWORD(v29);
- v30 = v137;
- v31 = v136;
- *((_DWORD *)v136 + 11) = *((_DWORD *)v137 + 2);
- v32 = *(_DWORD *)v30 | ((unsigned __int64)*((_DWORD *)v30 + 1) << 32);
- *((_DWORD *)v31 + 9) = *(_DWORD *)v30;
- *((_DWORD *)v31 + 10) = HIDWORD(v32);
- v136 = 0i64;
- LODWORD(v137) = 0;
- if ( (unsigned __int8)BSTextureSet::GetTexture(textureSet, 0i64, (__int64)&v136) && sub_141C6B360((__int64)&v136) )
- {
- HIDWORD(v144) = (_DWORD)v137;
- HIDWORD(v143) = (_DWORD)v136;
- LODWORD(v144) = ((unsigned int)v136 | ((unsigned __int64)HIDWORD(v136) << 32)) >> 32;
- }
- if ( (unsigned __int8)BSTextureSet::GetTexture(textureSet, 1i64, (__int64)&v136) && sub_141C6B360((__int64)&v136) )
- {
- LODWORD(v146) = (_DWORD)v137;
- LODWORD(v145) = (_DWORD)v136;
- HIDWORD(v145) = ((unsigned int)v136 | ((unsigned __int64)HIDWORD(v136) << 32)) >> 32;
- }
- if ( (unsigned __int8)BSTextureSet::GetTexture(textureSet, 7i64, (__int64)&v136) && sub_141C6B360((__int64)&v136) )
- {
- HIDWORD(v147) = (_DWORD)v137;
- HIDWORD(v146) = (_DWORD)v136;
- LODWORD(v147) = ((unsigned int)v136 | ((unsigned __int64)HIDWORD(v136) << 32)) >> 32;
- }
- *(_DWORD *)(v138 + 4i64 * v133) = 14;
- *(_DWORD *)(v138 + 4i64 * v133) |= 0x80u;
- if ( *(_BYTE *)(npc2 + 0x73) & 1 )
- *(_DWORD *)(v138 + 4i64 * v133) |= 0x40u;
- *(_DWORD *)(v148 + 4i64 * v133) = 1065353216;
- sub_14068CC50((__int64)&sharedTarget4);
- ++v133;
- }
- }
- race = *(_QWORD *)(npc2 + 0x1B8);
- v159 = (__int64 *)&v136;
- v158 = npc2;
- v160 = &npc1;
- v161 = &v142;
- v162 = &v138;
- v163 = (int *)&v133;
- v164 = &v148;
- v165 = &sharedTarget4;
- chargenData1 = *(_QWORD *)(race + 8i64 * TESNPC::GetSex(npc2) + 0x698);
- if ( chargenData1 )
- {
- morphGroups = *(_QWORD *)(chargenData1 + 56);
- if ( morphGroups )
- {
- v38 = *(_DWORD *)(morphGroups + 0x10);
- v39 = 0i64;
- if ( (_DWORD)v38 )
- v39 = *(__int64 **)morphGroups;
- v151 = v39;
- if ( (_DWORD)v38 )
- v40 = *(_QWORD *)morphGroups + 8 * v38;
- else
- v40 = 0i64;
- for ( ; v39 != (__int64 *)v40; v151 = v39 )
- {
- if ( (unsigned int)sub_14068CF40(*v39, (__int64)&v158, v7) != 1 )
- break;
- ++v39;
- }
- }
- }
- v41 = v133;
- numTintTextures = *(_DWORD *)(tintTextureArray1 + 0x10) - 1;
- for ( i = numTintTextures; i >= 0; --i )
- {
- tintEntry = *(_QWORD *)(*(_QWORD *)tintTextureArray1 + 8 * i);
- if ( tintEntry && (float)((float)*(_BYTE *)(tintEntry + 0x12) * 0.0099999998) > 0.0 )
- {
- tintType = (*(int (__fastcall **)(_QWORD, __int64, __int64, __int64))(*(_QWORD *)tintEntry + 40i64))(
- *(_QWORD *)(*(_QWORD *)tintTextureArray1 + 8 * i),
- v35,
- v36,
- v41);
- if ( tintType == 1 )
- {
- tintTemplate = *(_QWORD *)(tintEntry + 8);
- if ( tintTemplate )
- {
- v138 = 0i64;
- v139 = 0;
- tintTexture = BSFixedString::GetCString(tintTemplate + 0x20);
- if ( *(_BYTE *)tintTexture )
- {
- sub_141C69D20((__int64)&v175, (char *)tintTexture);
- v74 = sub_141B43160((__int64)&v167, v176);
- v139 = *(_DWORD *)(v74 + 8);
- v75 = *(_DWORD *)v74 | ((unsigned __int64)*(_DWORD *)(v74 + 4) << 32);
- LODWORD(v138) = *(_DWORD *)v74;
- HIDWORD(v138) = HIDWORD(v75);
- nullsub_753(&v175);
- }
- else
- {
- *(__int64 *)((char *)&v138 + 4) = 0i64;
- LODWORD(v138) = 0;
- }
- if ( sub_141C6B360((__int64)&v138) )
- {
- v76 = v137;
- v77 = v136;
- *((_DWORD *)v136 + 2) = *((_DWORD *)v137 + 2);
- v78 = *(_DWORD *)v76 | ((unsigned __int64)*((_DWORD *)v76 + 1) << 32);
- *(_DWORD *)v77 = *(_DWORD *)v76;
- *((_DWORD *)v77 + 1) = HIDWORD(v78);
- v79 = v137;
- v80 = v136;
- *((_DWORD *)v136 + 5) = *((_DWORD *)v137 + 2);
- v81 = *(_DWORD *)v79 | ((unsigned __int64)*((_DWORD *)v79 + 1) << 32);
- *((_DWORD *)v80 + 3) = *(_DWORD *)v79;
- *((_DWORD *)v80 + 4) = HIDWORD(v81);
- v82 = v137;
- v83 = v136;
- *((_DWORD *)v136 + 8) = *((_DWORD *)v137 + 2);
- v84 = *(_DWORD *)v82 | ((unsigned __int64)*((_DWORD *)v82 + 1) << 32);
- *((_DWORD *)v83 + 6) = *(_DWORD *)v82;
- *((_DWORD *)v83 + 7) = HIDWORD(v84);
- v85 = v137;
- v86 = v136;
- *((_DWORD *)v136 + 11) = *((_DWORD *)v137 + 2);
- v87 = *(_DWORD *)v85 | ((unsigned __int64)*((_DWORD *)v85 + 1) << 32);
- *((_DWORD *)v86 + 9) = *(_DWORD *)v85;
- *((_DWORD *)v86 + 10) = HIDWORD(v87);
- LODWORD(v143) = v139;
- LODWORD(v142) = v138;
- HIDWORD(v142) = ((unsigned int)v138 | ((unsigned __int64)HIDWORD(v138) << 32)) >> 32;
- *(_DWORD *)(v138 + 4i64 * v133) |= 1u;
- tintPaletteColor = *(_DWORD *)(tintEntry + 0x18);
- v89 = (float)(unsigned __int8)(signed int)ffloor((float)((float)(unsigned __int8)((unsigned __int16)*(_DWORD *)(tintEntry + 0x18) >> 8)
- * 0.0039215689) * 255.0)
- * 0.0039215689;
- v90 = (float)(unsigned __int8)(signed int)ffloor((float)((float)(unsigned __int8)(*(_DWORD *)(tintEntry + 0x18) >> 16)
- * 0.0039215689) * 255.0)
- * 0.0039215689;
- v91 = powf(
- (float)(unsigned __int8)(signed int)ffloor((float)((float)(unsigned __int8)*(_DWORD *)(tintEntry + 0x18)
- * 0.0039215689) * 255.0)
- * 0.0039215689,
- 2.2);
- v92 = powf(v89, 2.2);
- v93 = powf(v90, 2.2);
- v94 = 2i64 * v133;
- *(float *)(_unk2 + 8 * v94 + 0x200) = v91;
- *(float *)(_unk2 + 8 * v94 + 0x204) = v92;
- *(float *)(_unk2 + 8 * v94 + 0x208) = v93;
- *(_DWORD *)(_unk2 + 8 * v94 + 0x20C) = 998277249;
- *(_DWORD *)(v138 + 4i64 * v133) |= 0x10u;
- *(float *)(v148 + 4i64 * v133) = (float)*(_BYTE *)(tintEntry + 18) * 0.0099999998;
- if ( *(_DWORD *)(tintTemplate + 0x18) == 12 )
- v95 = 3;
- else
- v95 = sub_1402A4630(tintTemplate, tintPaletteColor, (float)*(_BYTE *)(tintEntry + 0x12) * 0.0099999998);
- v96 = v95 - 1;
- if ( v96 )
- {
- v97 = v96 - 1;
- if ( v97 )
- {
- v98 = v97 - 1;
- if ( v98 )
- {
- if ( v98 == 1 )
- v99 = 2048;
- else
- v99 = 128;
- }
- else
- {
- v99 = 1024;
- }
- }
- else
- {
- v99 = 512;
- }
- }
- else
- {
- v99 = 256;
- }
- *(_DWORD *)(v138 + 4i64 * v133) |= v99;
- sub_14068CC50((__int64)&sharedTarget4);
- npc2 = npc3;
- v41 = v133++ + 1;
- continue;
- }
- }
- }
- else if ( tintType == 2 )
- {
- v46 = *(_QWORD *)(tintEntry + 8);
- if ( v46 )
- {
- v47 = v137;
- v48 = v136;
- *((_DWORD *)v136 + 2) = *((_DWORD *)v137 + 2);
- v49 = *(_DWORD *)v47 | ((unsigned __int64)*((_DWORD *)v47 + 1) << 32);
- *(_DWORD *)v48 = *(_DWORD *)v47;
- *((_DWORD *)v48 + 1) = HIDWORD(v49);
- v50 = v137;
- v51 = v136;
- *((_DWORD *)v136 + 5) = *((_DWORD *)v137 + 2);
- v52 = *(_DWORD *)v50 | ((unsigned __int64)*((_DWORD *)v50 + 1) << 32);
- *((_DWORD *)v51 + 3) = *(_DWORD *)v50;
- *((_DWORD *)v51 + 4) = HIDWORD(v52);
- v53 = v137;
- v54 = v136;
- *((_DWORD *)v136 + 8) = *((_DWORD *)v137 + 2);
- v55 = *(_DWORD *)v53 | ((unsigned __int64)*((_DWORD *)v53 + 1) << 32);
- *((_DWORD *)v54 + 6) = *(_DWORD *)v53;
- *((_DWORD *)v54 + 7) = HIDWORD(v55);
- v56 = v137;
- v57 = v136;
- *((_DWORD *)v136 + 11) = *((_DWORD *)v137 + 2);
- v58 = *(_DWORD *)v56 | ((unsigned __int64)*((_DWORD *)v56 + 1) << 32);
- *((_DWORD *)v57 + 9) = *(_DWORD *)v56;
- *((_DWORD *)v57 + 10) = HIDWORD(v58);
- *(float *)(v148 + 4i64 * v133) = (float)*(_BYTE *)(tintEntry + 18) * 0.0099999998;
- v134 = 0i64;
- v135 = 0;
- diffuse = BSFixedString::GetCString(v46 + 0x20);
- if ( *(_BYTE *)diffuse )
- {
- sub_141C69D20((__int64)&v171, (char *)diffuse);
- v60 = sub_141B43160((__int64)&v168, v172);
- v135 = *(_DWORD *)(v60 + 8);
- v61 = *(_DWORD *)v60 | ((unsigned __int64)*(_DWORD *)(v60 + 4) << 32);
- LODWORD(v134) = *(_DWORD *)v60;
- HIDWORD(v134) = HIDWORD(v61);
- nullsub_753(&v171);
- }
- else
- {
- *(__int64 *)((char *)&v134 + 4) = 0i64;
- LODWORD(v134) = 0;
- }
- if ( sub_141C6B360((__int64)&v134) )
- {
- *(_DWORD *)(v138 + 4i64 * v133) |= 2u;
- switch ( *(_DWORD *)(v46 + 0x38) )
- {
- case 1:
- v62 = 256;
- break;
- case 2:
- v62 = 512;
- break;
- case 3:
- v62 = 1024;
- break;
- case 4:
- v62 = 2048;
- break;
- default:
- v62 = 128;
- break;
- }
- *(_DWORD *)(v138 + 4i64 * v133) |= v62;
- if ( *(_DWORD *)(v46 + 24) == 23 )
- {
- *(_DWORD *)(v138 + 4i64 * v133) |= 0x20u;
- v63 = TESNPC::GetHairColor(npc2);
- if ( v63 && *(_BYTE *)(v63 + 0x40) & 2 )
- v64 = *(_DWORD *)(v63 + 0x30);
- else
- v64 = 0x7F7FFFFF;
- v65 = 2i64 * v133;
- *(_DWORD *)(_unk2 + 8 * v65 + 0x200) = v64;
- *(_DWORD *)(_unk2 + 8 * v65 + 0x204) = 0;
- *(_DWORD *)(_unk2 + 8 * v65 + 0x208) = 0;
- *(_DWORD *)(_unk2 + 8 * v65 + 0x20C) = 0;
- }
- HIDWORD(v144) = v135;
- HIDWORD(v143) = v134;
- LODWORD(v144) = ((unsigned int)v134 | ((unsigned __int64)HIDWORD(v134) << 32)) >> 32;
- }
- normal = BSFixedString::GetCString(v46 + 0x28);
- if ( *(_BYTE *)normal )
- {
- sub_141C69D20((__int64)&v177, (char *)normal);
- v67 = sub_141B43160((__int64)&v166, v178);
- v135 = *(_DWORD *)(v67 + 8);
- v68 = *(_DWORD *)v67 | ((unsigned __int64)*(_DWORD *)(v67 + 4) << 32);
- LODWORD(v134) = *(_DWORD *)v67;
- HIDWORD(v134) = HIDWORD(v68);
- nullsub_753(&v177);
- }
- else
- {
- *(__int64 *)((char *)&v134 + 4) = 0i64;
- LODWORD(v134) = 0;
- }
- if ( sub_141C6B360((__int64)&v134) )
- {
- *(_DWORD *)(v138 + 4i64 * v133) |= 4u;
- LODWORD(v146) = v135;
- LODWORD(v145) = v134;
- HIDWORD(v145) = ((unsigned int)v134 | ((unsigned __int64)HIDWORD(v134) << 32)) >> 32;
- }
- specular = BSFixedString::GetCString(v46 + 0x30);
- if ( *(_BYTE *)specular )
- {
- sub_141C69D20((__int64)&v173, (char *)specular);
- v70 = sub_141B43160((__int64)&v169, v174);
- v135 = *(_DWORD *)(v70 + 8);
- v71 = *(_DWORD *)v70 | ((unsigned __int64)*(_DWORD *)(v70 + 4) << 32);
- LODWORD(v134) = *(_DWORD *)v70;
- HIDWORD(v134) = HIDWORD(v71);
- nullsub_753(&v173);
- }
- else
- {
- *(__int64 *)((char *)&v134 + 4) = 0i64;
- LODWORD(v134) = 0;
- }
- if ( sub_141C6B360((__int64)&v134) )
- {
- *(_DWORD *)(v138 + 4i64 * v133) |= 8u;
- HIDWORD(v147) = v135;
- HIDWORD(v146) = v134;
- LODWORD(v147) = ((unsigned int)v134 | ((unsigned __int64)HIDWORD(v134) << 32)) >> 32;
- }
- sub_14068CC50((__int64)&sharedTarget4);
- v41 = v133++ + 1;
- continue;
- }
- }
- v41 = v133;
- }
- }
- v100 = v141;
- v101 = HIDWORD(v140);
- v102 = (unsigned int)v140;
- v103 = 0i64;
- v104 = &v170;
- v105 = 4i64;
- do
- {
- v106 = 0;
- v107 = 0;
- if ( (_DWORD)v41 )
- {
- do
- {
- if ( v106 )
- break;
- v108 = v181[3 * (v103 + v107)];
- v109 = (unsigned int)*(&v179 + 3 * (v103 + v107)) | ((unsigned __int64)(unsigned int)*(&v180 + 3 * (v103 + v107)) << 32);
- if ( v109 != (v102 | (v101 << 32)) || v108 != v100 )
- {
- *((_DWORD *)v104 - 1) = *(&v179 + 3 * (v103 + v107));
- *((_DWORD *)v104 + 1) = v108;
- *(_DWORD *)v104 = HIDWORD(v109);
- v106 = 1;
- }
- ++v107;
- }
- while ( v107 < (unsigned int)v41 );
- }
- v103 += 128i64;
- v104 += 12;
- --v105;
- }
- while ( v105 );
- sub_141AEDA20((__int64)&v150, 0x18i64 * (unsigned int)v41, 8ui64);
- v110 = v133;
- v111 = v150;
- v112 = v186;
- v113 = 128;
- v114 = &v180;
- v115 = 1;
- if ( (_BYTE)sharedTarget1 )
- v110 = 128;
- v116 = retaddr + 8;
- do
- {
- if ( !v115 )
- break;
- v117 = 0i64;
- v118 = 0;
- do
- {
- v119 = v114[1];
- if ( ((unsigned int)*(v114 - 1) | ((unsigned __int64)(unsigned int)*v114 << 32)) != ((unsigned int)v140 | ((unsigned __int64)HIDWORD(v140) << 32))
- || v119 != v141 )
- {
- v120 = 3 * v117;
- *(_DWORD *)(v111 + 8 * v120 + 8) = v119;
- v121 = (unsigned int)*(v114 - 1);
- v122 = v121 | ((unsigned __int64)(unsigned int)*v114 << 32);
- *(_DWORD *)(v111 + 8 * v120) = v121;
- v117 = (unsigned int)(v117 + 1);
- *(_DWORD *)(v111 + 8 * v120 + 4) = HIDWORD(v122);
- *(_DWORD *)(v111 + 8 * v120 + 12) = v118;
- *(_DWORD *)(v111 + 8 * v120 + 16) = v112;
- *(_BYTE *)(v111 + 8 * v120 + 20) = 0;
- }
- ++v118;
- v114 += 3;
- }
- while ( v118 < v113 );
- if ( (_DWORD)v117 )
- {
- if ( !*(_QWORD *)v116 )
- {
- if ( dword_143766600 != 2 )
- sub_141AEE1B0((__int64)&unk_143766180, (volatile signed __int32 *)&dword_143766600);
- v123 = Heap::Allocate((__int64)&unk_143766180, 0x78ui64, 0, 0);
- if ( v123 )
- v123 = sub_141CBA8D0(v123, v110, 1, (_DWORD)v105 == 1);
- v124 = *(_QWORD *)v116;
- if ( *(_QWORD *)v116 != v123 )
- {
- if ( v123 )
- _InterlockedIncrement((volatile signed __int32 *)(v123 + 8));
- *(_QWORD *)v116 = v123;
- if ( v124 )
- {
- _InterlockedDecrement((volatile signed __int32 *)(v124 + 8));
- if ( !v124 )
- (*(void (**)(void))(v0 + 8))();
- }
- }
- if ( !(dword_14589B1F8 & 1) )
- {
- dword_14589B1F8 |= 1u;
- StringCache::Ref::ctor(aHwj3, "[FaceGen]");
- atexit(sub_142AB9820);
- }
- sub_141B16540(*(_QWORD *)v116 + 16i64, (__int64)aHwj3);
- }
- v125 = (*(int (__fastcall **)(_QWORD, __int64, _QWORD))(**(_QWORD **)v116 + 0x148i64))(
- *(_QWORD *)v116,
- v111,
- (unsigned int)v117);
- v113 = 128;
- v115 = v125 == (_DWORD)v117;
- vars18 = v115;
- }
- else
- {
- v115 = vars18;
- }
- LODWORD(v105) = v105 + 1;
- v116 += 8;
- }
- while ( (unsigned int)v105 < 4 );
- hairColorPalettePath = BSFixedString::GetCString(*(_QWORD *)(npc3 + 0x1B8) + 0x6C0i64);
- StringCache::Ref::ctor(&v149, hairColorPalettePath);
- if ( sub_141B167E0((__int64)&v149) )
- {
- v127 = BSFixedString::GetCString((__int64)&v149);
- LOBYTE(v131) = 1;
- LOBYTE(v130) = 0;
- LOBYTE(v128) = 1;
- sub_141C6A050((char *)v127, (__int64)(retaddr + 0x28), v128, 0, 0, v112, v130, 1, v131, v132);
- }
- *((_DWORD *)retaddr + 12) = v133;
- j_StringCache::Ref::Release(&v149);
- sub_141AEDAA0((unsigned __int64 *)&v150);
- return (unsigned __int8)v115;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement