Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- int __thiscall I3D_mirror::ProcessMirror(I3D_mirror *this)
- {
- I3D_mirror *v1; // ebx
- int v2; // eax
- int result; // eax
- int v4; // edx
- _DWORD *v5; // eax
- int v6; // ecx
- long double v7; // st7
- double v8; // st7
- long double v9; // st7
- int v10; // eax
- int v11; // ecx
- int v12; // eax
- char *v13; // ebp
- int v14; // edx
- int v15; // eax
- float *v16; // ebp
- float v17; // STE0_4
- float v18; // STDC_4
- float v19; // STD8_4
- float *v20; // edi
- int v21; // esi
- double v22; // st7
- double v23; // st6
- long double v24; // st6
- float v25; // edx
- double v26; // st7
- double v27; // st6
- int v28; // eax
- int v29; // ecx
- _DWORD *v30; // ebp
- I3D_frame **v31; // esi
- int v32; // eax
- int v33; // eax
- _DWORD *v34; // edi
- int j; // eax
- float v36; // eax
- unsigned int v37; // edx
- float v38; // eax
- I3D_frame *v39; // edi
- float *v40; // eax
- float *v41; // eax
- _DWORD *v42; // ecx
- float v43; // edx
- I3D_frame *v44; // esi
- int v45; // eax
- float v46; // [esp+C4h] [ebp-104h]
- I3D_frame **i; // [esp+C4h] [ebp-104h]
- float v48; // [esp+C8h] [ebp-100h]
- float v49; // [esp+CCh] [ebp-FCh]
- float v50; // [esp+CCh] [ebp-FCh]
- float v51; // [esp+D0h] [ebp-F8h]
- float v52; // [esp+D0h] [ebp-F8h]
- float v53; // [esp+D4h] [ebp-F4h]
- int v54; // [esp+D4h] [ebp-F4h]
- float v55; // [esp+D8h] [ebp-F0h]
- float *v56; // [esp+DCh] [ebp-ECh]
- int v57; // [esp+E0h] [ebp-E8h]
- float v58; // [esp+E4h] [ebp-E4h]
- float v59; // [esp+E8h] [ebp-E0h]
- float v60; // [esp+ECh] [ebp-DCh]
- float v61; // [esp+F0h] [ebp-D8h]
- float v62; // [esp+F4h] [ebp-D4h]
- float v63; // [esp+F8h] [ebp-D0h]
- char v64; // [esp+FCh] [ebp-CCh]
- float v65; // [esp+104h] [ebp-C4h]
- float v66[8]; // [esp+108h] [ebp-C0h]
- float v67; // [esp+128h] [ebp-A0h]
- int v68; // [esp+138h] [ebp-90h]
- int v69; // [esp+13Ch] [ebp-8Ch]
- int v70; // [esp+140h] [ebp-88h]
- char v71; // [esp+148h] [ebp-80h]
- float v72; // [esp+168h] [ebp-60h]
- float v73; // [esp+16Ch] [ebp-5Ch]
- float v74; // [esp+170h] [ebp-58h]
- char v75; // [esp+188h] [ebp-40h]
- v1 = this;
- v2 = *((_DWORD *)this + 163);
- if ( !(v2 & 4) )
- {
- if ( !(v2 & 1) )
- return 0;
- *((_DWORD *)this + 163) = v2 | 4;
- if ( !(*((_BYTE *)this + 172) & 0x20) )
- I3D_frame::UpdateWMatrixProc((I3D_frame *)this);
- S_matrix::operator*((float *)v1 + 164, v66, (float *)v1 + 4);
- v4 = v69;
- v5 = (_DWORD *)((char *)v1 + 504);
- *v5 = v68;
- v6 = v70;
- v5[1] = v4;
- v5[2] = v6;
- v58 = 1.0;
- v59 = 1.0;
- v60 = 1.0;
- S_vector::RotateByMatrix(&v58, &v61, v66);
- v7 = v63 * v63 + v62 * v62 + v61 * v61;
- *((float *)v1 + 130) = v7;
- *((float *)v1 + 129) = sqrt(v7);
- S_matrix::Inverse((I3D_mirror *)((char *)v1 + 524), (const struct S_matrix *)v66);
- if ( !(*((_BYTE *)v1 + 172) & 0x20) )
- I3D_frame::UpdateWMatrixProc((I3D_frame *)v1);
- v48 = *((float *)v1 + 12);
- v49 = *((float *)v1 + 13);
- v51 = *((float *)v1 + 14);
- v8 = v48 * v48 + v49 * v49 + v51 * v51;
- v46 = v8;
- if ( fabs(v8 - 1.0) >= 0.00000000999999993922529 )
- {
- if ( v46 >= 0.0000000099999999 )
- {
- v9 = 1.0 / sqrt(v46);
- v48 = v48 * v9;
- v49 = v49 * v9;
- v51 = v51 * v9;
- }
- else if ( v48 == 0.0 )
- {
- if ( v51 == 0.0 )
- {
- if ( v49 >= 0.0 )
- v49 = 1.0;
- else
- v49 = -1.0;
- }
- else if ( v51 >= 0.0 )
- {
- v51 = 1.0;
- }
- else
- {
- v51 = -1.0;
- }
- }
- else if ( v48 >= 0.0 )
- {
- v48 = 1.0;
- }
- else
- {
- v48 = -1.0;
- }
- }
- v58 = v48;
- v59 = v49;
- v60 = v51;
- S_matrix::SetDir((S_matrix *)v66, (const struct S_vector *)&v58);
- if ( !(*((_BYTE *)v1 + 172) & 0x20) )
- I3D_frame::UpdateWMatrixProc((I3D_frame *)v1);
- v10 = *((_DWORD *)v1 + 17);
- v11 = *((_DWORD *)v1 + 18);
- v68 = *((_DWORD *)v1 + 16);
- v69 = v10;
- v70 = v11;
- S_matrix::Inverse((I3D_mirror *)((char *)v1 + 588), (const struct S_matrix *)v66);
- qmemcpy(&v71, v66, 0x40u);
- v72 = v67 * -1.0;
- v73 = v73 * -1.0;
- v74 = v74 * -1.0;
- qmemcpy((char *)v1 + 588, S_matrix::operator*((float *)v1 + 147, (float *)&v75, (float *)&v71), 0x40u);
- }
- dword_107F7708 = 0;
- dword_107F771C = (int)v1;
- FindVisualsR(*(struct #11 **)(*((_DWORD *)v1 + 121) + 532));
- FindVisualsR(*(struct #11 **)(*((_DWORD *)v1 + 121) + 540));
- if ( !dword_107F7708 )
- {
- *((_DWORD *)v1 + 163) &= 0xFFFFFDFF;
- return 0;
- }
- (*(void (__stdcall **)(struct IDirect3DDevice8 *, _DWORD, _DWORD, unsigned int, _DWORD, _DWORD, _DWORD))(*(_DWORD *)m_pD3DDevice8 + 0x90))(
- m_pD3DDevice8,
- 0,
- 0,
- (m_HardwareCaps & 0x10 | 8) >> 2,
- 0,
- 0,
- 0);
- v12 = *((_DWORD *)v1 + 184);
- if ( v12 < dword_106F2834 )
- v12 = dword_106F2834;
- if ( dword_106F2830 < v12 )
- {
- dword_106F2830 = v12;
- v13 = (char *)operator new(24 * v12);
- v14 = 0;
- if ( dword_106F2834 > 0 )
- {
- v15 = 0;
- do
- {
- qmemcpy(&v13[v15], (char *)LVertList + v15, 0x18u);
- ++v14;
- v15 += 24;
- }
- while ( v14 < dword_106F2834 );
- }
- operator delete(LVertList);
- LVertList = v13;
- }
- v16 = (float *)&pCurrentCamera->I3D_frame__AddRef;
- dword_106F2834 = *((_DWORD *)v1 + 184);
- if ( !(pCurrentCamera[2].I3D_frame__Update & 0x20) )
- I3D_frame::UpdateWMatrixProc(pCurrentCamera);
- v53 = *(float *)&pCurrentCamera[4].I3D_frame__SetName * 0.99000001;
- if ( !(*((_BYTE *)v1 + 172) & 0x20) )
- I3D_frame::UpdateWMatrixProc((I3D_frame *)v1);
- v17 = *((float *)v1 + 180) * 255.0;
- v18 = *((float *)v1 + 181) * 255.0;
- v19 = *((float *)v1 + 182) * 255.0;
- v20 = (float *)LVertList;
- v21 = (signed int)v19 | (((signed int)v18 | (((signed int)v17 | ((signed int)255.0 << 8)) << 8)) << 8);
- v56 = (float *)*((_DWORD *)v1 + 186);
- if ( *((_DWORD *)v1 + 184) )
- {
- v57 = *((_DWORD *)v1 + 184);
- do
- {
- S_vector::operator*(v56, &v61, (float *)v1 + 4);
- v22 = v61 - v16[16];
- v50 = v62 - v16[17];
- v52 = v63 - v16[18];
- v23 = v22 * v22 + v52 * v52 + v50 * v50;
- v55 = v23;
- if ( fabs(v23 - 1.0) >= 0.00000000999999993922529 )
- {
- if ( v55 >= 0.0000000099999999 )
- {
- v24 = 1.0 / sqrt(v55);
- v22 = v22 * v24;
- v50 = v50 * v24;
- v52 = v52 * v24;
- }
- else if ( v22 == 0.0 )
- {
- if ( v52 == 0.0 )
- {
- if ( v50 >= 0.0 )
- v50 = 1.0;
- else
- v50 = -1.0;
- }
- else if ( v52 >= 0.0 )
- {
- v52 = 1.0;
- }
- else
- {
- v52 = -1.0;
- }
- }
- else if ( v22 >= 0.0 )
- {
- v22 = 1.0;
- }
- else
- {
- v22 = -1.0;
- }
- }
- v20 += 6;
- v65 = v52 * v53;
- v58 = v22 * v53 + v16[16];
- v25 = v58;
- v26 = v50 * v53 + v16[17];
- v61 = v58;
- v59 = v26;
- v62 = v59;
- v27 = v65 + v16[18];
- v60 = v27;
- v63 = v60;
- *(v20 - 5) = v26;
- *(v20 - 6) = v25;
- *(v20 - 4) = v27;
- *((_DWORD *)v20 - 3) = v21;
- v56 += 3;
- --v57;
- }
- while ( v57 );
- }
- if ( m_CurrZCompare )
- {
- m_CurrZCompare = 0;
- (*(void (__stdcall **)(struct IDirect3DDevice8 *, signed int, signed int))(*(_DWORD *)m_pD3DDevice8 + 200))(
- m_pD3DDevice8,
- 23,
- 8);
- }
- if ( m_CurrFogState )
- {
- m_CurrFogState = 0;
- (*(void (__stdcall **)(struct IDirect3DDevice8 *, signed int, _DWORD))(*(_DWORD *)m_pD3DDevice8 + 200))(
- m_pD3DDevice8,
- 28,
- 0);
- }
- if ( m_CurrColorOp != 4 )
- {
- m_CurrColorOp = 4;
- (*(void (__stdcall **)(struct IDirect3DDevice8 *, _DWORD, signed int, signed int))(*(_DWORD *)m_pD3DDevice8 + 252))(
- m_pD3DDevice8,
- 0,
- 1,
- 4);
- }
- if ( m_CurrAlphaState )
- {
- m_CurrAlphaState = 0;
- (*(void (__stdcall **)(struct IDirect3DDevice8 *, signed int, _DWORD))(*(_DWORD *)m_pD3DDevice8 + 200))(
- m_pD3DDevice8,
- 27,
- 0);
- (*(void (__stdcall **)(struct IDirect3DDevice8 *, signed int, _DWORD))(*(_DWORD *)m_pD3DDevice8 + 0xC8))(
- m_pD3DDevice8,
- 15,
- 0);
- }
- m_CullMode = 3;
- if ( m_CurrCullState != 1 )
- {
- m_CurrCullState = 1;
- (*(void (__stdcall **)(struct IDirect3DDevice8 *, signed int, signed int))(*(_DWORD *)m_pD3DDevice8 + 0xC8))(
- m_pD3DDevice8,
- 22,
- 1);
- }
- if ( m_CurrCullState != 3 )
- {
- m_CurrCullState = 3;
- (*(void (__stdcall **)(struct IDirect3DDevice8 *, signed int, enum _D3DCULL))(*(_DWORD *)m_pD3DDevice8 + 200))(
- m_pD3DDevice8,
- 22,
- m_CullMode);
- }
- if ( m_CurrClipState != 1 )
- {
- m_CurrClipState = 1;
- (*(void (__stdcall **)(struct IDirect3DDevice8 *, signed int, signed int))(*(_DWORD *)m_pD3DDevice8 + 200))(
- m_pD3DDevice8,
- 136,
- 1);
- }
- (*(void (__stdcall **)(IGraph *, void *))(*(_DWORD *)pGlobalIGraph + 84))(pGlobalIGraph, &unk_10106188);
- (*(void (__stdcall **)(struct IDirect3DDevice8 *, _DWORD, _DWORD))(*(_DWORD *)m_pD3DDevice8 + 0xF4))(
- m_pD3DDevice8,
- 0,
- 0);
- (*(void (__stdcall **)(IGraph *, signed int, _DWORD, _DWORD, _DWORD, void *, _DWORD))(*(_DWORD *)pGlobalIGraph + 0x5C))(
- pGlobalIGraph,
- 3,
- *((_DWORD *)v1 + 184),
- *((_DWORD *)v1 + 187),
- *((_DWORD *)v1 + 185),
- LVertList,
- 0);
- if ( m_CurrZCompare != 1 )
- {
- m_CurrZCompare = 1;
- (*(void (__stdcall **)(struct IDirect3DDevice8 *, signed int, signed int))(*(_DWORD *)m_pD3DDevice8 + 0xC8))(
- m_pD3DDevice8,
- 23,
- 4);
- }
- v54 = dword_107F7708;
- for ( i = (I3D_frame **)dword_107F7700; v54; i = v31 + 1 )
- {
- v28 = *((_DWORD *)v1 + 124);
- v29 = *((_DWORD *)v1 + 122);
- --v54;
- if ( !v28 )
- goto LABEL_77;
- while ( 1 )
- {
- --v28;
- if ( *(I3D_frame **)(*(_DWORD *)v29 + 8) == *i )
- break;
- v29 += 4;
- if ( !v28 )
- goto LABEL_77;
- }
- v30 = *(_DWORD **)v29;
- if ( *(_DWORD *)v29 )
- {
- v31 = i;
- }
- else
- {
- LABEL_77:
- v31 = i;
- v30 = (_DWORD *)(*(int (__stdcall **)(I3D_driver *, int))(*(_DWORD *)pI3DDriver + 72))(
- pI3DDriver,
- (*i)[6].I3D_frame__SetOn);
- if ( !v30 )
- {
- dbgPrintf(`string');
- return 0;
- }
- v32 = *((_DWORD *)v1 + 123);
- if ( *((_DWORD *)v1 + 124) >= v32 )
- {
- v33 = *((_DWORD *)v1 + 125) + v32;
- *((_DWORD *)v1 + 123) = v33;
- v34 = operator new(4 * v33);
- for ( j = 0; j < *((_DWORD *)v1 + 124); ++j )
- v34[j] = *(_DWORD *)(*((_DWORD *)v1 + 122) + 4 * j);
- operator delete(*((void **)v1 + 122));
- *((_DWORD *)v1 + 122) = v34;
- }
- *(_DWORD *)(*((_DWORD *)v1 + 122) + 4 * (*((_DWORD *)v1 + 124))++) = v30;
- v36 = *(float *)v30;
- v30[119] = 0x10000;
- (*(void (__stdcall **)(_DWORD *, I3D_frame *))(LODWORD(v36) + 64))(v30, *i);
- v30[2] = *i;
- (*(void (__stdcall **)(I3D_frame *))(*i)->I3D_frame__AddRef)(*i);
- v37 = v30[119] & 0xFFFFFFBF | 0x10000;
- v30[43] |= 0x200000u;
- v38 = *(float *)v30;
- v30[119] = v37;
- (*(void (__stdcall **)(_DWORD *, _DWORD, signed int))(LODWORD(v38) + 32))(v30, 0, 0x1E00);
- }
- v39 = *v31;
- if ( v30[71] != (*v31)[3].I3D_frame__DebugDraw )
- {
- if ( v39[6].I3D_frame__SetName & 0x40 )
- {
- v40 = (float *)&unk_10106188;
- }
- else
- {
- if ( !(v39[2].I3D_frame__Update & 0x20) )
- I3D_frame::UpdateWMatrixProc(*v31);
- v40 = (float *)&v39->I3D_frame__SetDir;
- }
- qmemcpy(v30 + 20, S_matrix::operator*(v40, (float *)&v75, (float *)v1 + 147), 0x40u);
- v41 = S_matrix::GetScale((float *)v30 + 20, (float *)&v64);
- v42 = v30 + 36;
- *v42 = *(_DWORD *)v41;
- v42[1] = *((_DWORD *)v41 + 1);
- v43 = *(float *)v30;
- v42[2] = *((_DWORD *)v41 + 2);
- v30[43] = v30[43] & 0xFFFFFFD7 | 0x40000014;
- (*(void (__stdcall **)(_DWORD *))(LODWORD(v43) + 28))(v30);
- v44 = *i;
- if ( !((*i)[6].I3D_frame__SetName & 0x20000) )
- (*(void (__stdcall **)(I3D_frame *))(v44->I3D_frame__AddRef + 108))(*i);
- I3D_visual::SetBoundVolume((I3D_visual *)v30, (const struct I3D_bvolume *)&v44[6]);
- v30[71] = (*i)[3].I3D_frame__DebugDraw;
- v31 = i;
- }
- v45 = v30[119];
- if ( v45 & 0x800 )
- v30[134] = (*v31)[7].I3D_frame__SetCallback;
- (*(void (__thiscall **)(_DWORD *))(*v30 + 112))(v30);
- v30[80] = RenderNumber;
- }
- result = *((_DWORD *)v1 + 124);
- if ( !result )
- *((_DWORD *)v1 + 163) &= 0xFFFFFDFF;
- return result;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement