Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- int __usercall graphics_Decompression_@<eax>(int a1@<eax>, int a2@<edx>, int a3@<ecx>, int a4@<ebx>)
- {
- int v4; // eax@25
- int v5; // eax@28
- int v6; // eax@28
- int v7; // eax@32
- int v8; // eax@32
- signed int v9; // edx@36
- int v10; // eax@54
- int v11; // eax@55
- int v12; // edx@88
- int v13; // edx@98
- int v14; // eax@103
- signed int v15; // edx@105
- unsigned __int16 v16; // ax@106
- unsigned __int16 v17; // ax@109
- signed int v18; // edx@109
- unsigned __int16 v19; // ax@111
- unsigned __int16 v20; // ax@114
- __int64 v21; // rax@116
- int v22; // eax@117
- unsigned __int16 v24; // [sp+0h] [bp-90h]@40
- unsigned __int16 v25; // [sp+4h] [bp-8Ch]@3
- __int16 v26; // [sp+8h] [bp-88h]@105
- __int16 v27; // [sp+Ah] [bp-86h]@105
- __int16 v28; // [sp+Ch] [bp-84h]@105
- __int16 v29; // [sp+Eh] [bp-82h]@105
- int v30; // [sp+10h] [bp-80h]@1
- int v31; // [sp+14h] [bp-7Ch]@1
- int v32; // [sp+18h] [bp-78h]@1
- int v33; // [sp+1Ch] [bp-74h]@20
- int v34; // [sp+20h] [bp-70h]@20
- int v35; // [sp+24h] [bp-6Ch]@2
- int v36; // [sp+28h] [bp-68h]@2
- int v37; // [sp+2Ch] [bp-64h]@2
- int v38; // [sp+30h] [bp-60h]@2
- int v39; // [sp+34h] [bp-5Ch]@25
- int v40; // [sp+38h] [bp-58h]@53
- int v41; // [sp+3Ch] [bp-54h]@1
- int v42; // [sp+40h] [bp-50h]@25
- int v43; // [sp+44h] [bp-4Ch]@2
- int v44; // [sp+48h] [bp-48h]@88
- int v45; // [sp+4Ch] [bp-44h]@123
- int v46; // [sp+50h] [bp-40h]@36
- int v47; // [sp+54h] [bp-3Ch]@88
- int v48; // [sp+58h] [bp-38h]@88
- int v49; // [sp+5Ch] [bp-34h]@88
- int v50; // [sp+60h] [bp-30h]@88
- char *v51; // [sp+64h] [bp-2Ch]@105
- int v52; // [sp+68h] [bp-28h]@1
- int v53; // [sp+6Ch] [bp-24h]@52
- _WORD *v54; // [sp+70h] [bp-20h]@96
- int v55; // [sp+74h] [bp-1Ch]@1
- int v56; // [sp+78h] [bp-18h]@1
- int v57; // [sp+7Ch] [bp-14h]@15
- int v58; // [sp+80h] [bp-10h]@26
- int v59; // [sp+84h] [bp-Ch]@26
- int v60; // [sp+88h] [bp-8h]@1
- int v61; // [sp+8Ch] [bp-4h]@54
- v32 = a1;
- v30 = a2;
- v31 = a4;
- v41 = a3;
- v52 = 0;
- v60 = 0;
- v55 = 0;
- v56 = a3 + 35;
- if ( *(_DWORD *)(a1 + 32) == -1515870811 )
- {
- v35 = (*(_DWORD *)(v32 + 16) >> 16) - *(_WORD *)(v32 + 64);
- v36 = (*(_DWORD *)(v32 + 20) >> 16) - *(_WORD *)(v32 + 66);
- v37 = *(_WORD *)(v32 + 36);
- v38 = *(_WORD *)(v32 + 38);
- v43 = 0;
- *(_WORD *)(v56 + 4) = v35;
- *(_WORD *)(v56 + 6) = v36;
- *(_WORD *)(v56 + 8) = v37;
- *(_WORD *)(v56 + 10) = v38;
- *(_BYTE *)(v56 + 12) = 8 * (*(_BYTE *)(v32 + 42) & 0x1F);
- *(_BYTE *)(v56 + 13) = 8 * (((signed int)*(_WORD *)(v32 + 42) >> 5) & 0x1F);
- *(_BYTE *)(v56 + 14) = 8 * (((signed int)*(_WORD *)(v32 + 42) >> 10) & 0x1F);
- if ( *(_BYTE *)(v32 + 30) & 0x80 )
- {
- v25 = *(_WORD *)(v32 + 30) & 0x300;
- if ( v25 < 0x100u )
- {
- if ( !v25 )
- v43 |= 0x40000000u;
- }
- else if ( v25 <= 0x100u )
- {
- v43 |= 0x50000000u;
- }
- else if ( v25 >= 0x200u )
- {
- if ( v25 <= 0x200u )
- {
- v43 |= 0x60000000u;
- }
- else if ( v25 == 768 )
- {
- v43 |= 0x70000000u;
- }
- }
- }
- *(_DWORD *)v56 = v43;
- v57 = 4;
- }
- else
- {
- if ( *(_WORD *)(v32 + 60) == 262 )
- {
- v55 = v32;
- v32 = dword_55423C;
- }
- else if ( *(_WORD *)(v32 + 60) == 263 )
- {
- v55 = v32;
- v32 = dword_5543B4;
- }
- v33 = v30;
- v34 = v31;
- if ( *(_BYTE *)(v32 + 44) & 0x20 )
- {
- v57 = 3;
- }
- else
- {
- v43 = 0;
- if ( v55 )
- {
- v35 = *(_DWORD *)(v55 + 16) >> 16;
- v36 = *(_DWORD *)(v55 + 20) >> 16;
- }
- else
- {
- v35 = *(_DWORD *)(v32 + 16) >> 16;
- v36 = *(_DWORD *)(v32 + 20) >> 16;
- }
- v39 = (*(_DWORD *)(v32 + 32) >> 24) & 0x1F;
- v42 = (*(_DWORD *)(v32 + 32) >> 24) & 0xE0;
- v37 = *(_WORD *)(v32 + 36);
- v38 = *(_WORD *)(v32 + 38);
- v4 = *(_WORD *)(v32 + 40);
- if ( v4 == -1 )
- {
- LOWORD(v4) = word_5932AC;
- v58 = v4;
- LOWORD(v4) = word_5932AE;
- v59 = v4;
- v43 |= 0x60000000u;
- }
- else if ( v55 )
- {
- v5 = 160 * v39 + 2 * *(_WORD *)(v55 + 40);
- LOWORD(v5) = *(__int16 *)((char *)word_591EA8 + v5);
- v58 = v5;
- v6 = 160 * v39 + 2 * *(_WORD *)(v55 + 40);
- LOWORD(v6) = *(__int16 *)((char *)word_590AA8 + v6);
- v59 = v6;
- v43 |= 0x40000000u;
- }
- else if ( *(_WORD *)(v32 + 40) < 80 && *(_WORD *)(v32 + 40) >= 0 )
- {
- v7 = 160 * v39 + 2 * *(_WORD *)(v32 + 40);
- LOWORD(v7) = *(__int16 *)((char *)word_591EA8 + v7);
- v58 = v7;
- v8 = 160 * v39 + 2 * *(_WORD *)(v32 + 40);
- LOWORD(v8) = *(__int16 *)((char *)word_590AA8 + v8);
- v59 = v8;
- }
- else
- {
- v58 = 0;
- v59 = 250;
- }
- *(_WORD *)(v41 + 8) = v37;
- *(_WORD *)(v41 + 10) = v38;
- *(_WORD *)(v41 + 16) = v58;
- *(_WORD *)(v41 + 18) = v59;
- if ( *(_BYTE *)(v32 + 30) & 8 )
- {
- *(_WORD *)(v41 + 16) = word_5932AA;
- *(_WORD *)(v41 + 18) = word_5932A8;
- *(_BYTE *)(v41 + 20) = 4 * ((*(_BYTE *)(v32 + 42) & 0x1F) + 1);
- *(_BYTE *)(v41 + 21) = 4 * (((signed int)*(_WORD *)(v32 + 42) >> 5) & 0x1F) + 4;
- *(_BYTE *)(v41 + 22) = 4 * (((signed int)*(_WORD *)(v32 + 42) >> 10) & 0x1F) + 4;
- }
- else
- {
- if ( v39 == 31 )
- {
- v9 = (word_554900 + 128) * (*(_WORD *)(v32 + 72) + 128);
- v46 = (v9 - (__CFSHL__(v9 >> 31, 7) + (v9 >> 31 << 7))) >> 7;
- }
- else
- {
- v46 = *(_WORD *)(v32 + 72) + 128;
- }
- *(_BYTE *)(v41 + 20) = (v46 * (unsigned __int8)word_5C3C86
- - (__CFSHL__(v46 * (unsigned __int8)word_5C3C86 >> 31, 7)
- + (v46 * (unsigned __int8)word_5C3C86 >> 31 << 7))) >> 7;
- *(_BYTE *)(v41 + 21) = (v46 * HIBYTE(word_5C3C86)
- - (__CFSHL__(v46 * HIBYTE(word_5C3C86) >> 31, 7)
- + (v46 * HIBYTE(word_5C3C86) >> 31 << 7))) >> 7;
- *(_BYTE *)(v41 + 22) = (v46 * (unsigned __int8)word_5C3C88
- - (__CFSHL__(v46 * (unsigned __int8)word_5C3C88 >> 31, 7)
- + (v46 * (unsigned __int8)word_5C3C88 >> 31 << 7))) >> 7;
- }
- *(_WORD *)(v41 + 23) = 0;
- *(_WORD *)(v41 + 25) = 0;
- *(_WORD *)(v41 + 27) = 4096;
- *(_WORD *)(v41 + 29) = 4096;
- *(_DWORD *)(v41 + 31) = 0;
- if ( *(_BYTE *)(v32 + 30) & 0x80 )
- {
- v24 = *(_WORD *)(v32 + 30) & 0x300;
- if ( v24 < 0x100u )
- {
- if ( !v24 )
- v43 |= 0x40000000u;
- }
- else if ( v24 <= 0x100u )
- {
- v43 |= 0x50000000u;
- }
- else if ( v24 >= 0x200u )
- {
- if ( v24 <= 0x200u )
- {
- v43 |= 0x60000000u;
- }
- else if ( v24 == 768 )
- {
- v43 |= 0x70000000u;
- }
- }
- }
- v53 = 3;
- if ( v42 & 0x80 )
- {
- v53 = 0;
- v40 = (*(_DWORD *)(v32 + 32) >> 16) & 0xFF;
- if ( v42 & 0x40 )
- {
- v10 = 20 * v39 + 2 * v40;
- LOWORD(v10) = *(__int16 *)((char *)word_5B78B0 + v10);
- v61 = v10;
- }
- else
- {
- v11 = 20 * v39 + 2 * v40;
- LOWORD(v11) = *(__int16 *)((char *)word_5B75B0 + v11);
- v61 = v11;
- v43 |= 0x1000000u;
- }
- if ( *(_BYTE *)(v32 + 44) & 1 || *(_BYTE *)(v32 + 30) & 0x40 )
- {
- v33 = 0;
- v34 = 0;
- }
- if ( v39 == 31 && *(_WORD *)(v32 + 60) != 1445 )
- {
- *(_WORD *)(v41 + 4) = v35 - v33;
- *(_WORD *)(v41 + 6) = v36 - v34;
- if ( *(_BYTE *)(v32 + 30) & 0x10 )
- {
- v43 |= 0x800000u;
- v53 = 1;
- }
- if ( *(_BYTE *)(v32 + 30) & 0x20 )
- {
- v43 |= 0x400000u;
- v53 = 1;
- }
- }
- else
- {
- if ( !(*(_BYTE *)(v32 + 44) & 1) && !(*(_BYTE *)(v32 + 30) & 0x40) )
- {
- v35 = 52428 * v35 >> 16;
- v36 = 55705 * v36 >> 16;
- }
- *(_WORD *)(v41 + 8) -= *(_WORD *)(v32 + 28);
- v37 -= *(_WORD *)(v32 + 28);
- if ( *(_BYTE *)(v32 + 30) & 0x10 )
- {
- v43 |= 0x800000u;
- v53 = 1;
- *(_WORD *)(v41 + 4) = v35 - v33 - (v37 - *(_WORD *)(v32 + 64));
- }
- else
- {
- *(_WORD *)(v41 + 4) = v35 - v33 - *(_WORD *)(v32 + 64);
- }
- if ( *(_BYTE *)(v32 + 30) & 0x20 )
- {
- v43 |= 0x400000u;
- v53 = 1;
- *(_WORD *)(v41 + 6) = v36 - v34 - (v38 - *(_WORD *)(v32 + 66));
- }
- else
- {
- *(_WORD *)(v41 + 6) = v36 - v34 - *(_WORD *)(v32 + 66);
- }
- }
- if ( *(_DWORD *)(v32 + 48) == 16777472 )
- {
- v43 |= 0x8000000u;
- }
- else
- {
- v53 = 2;
- *(_WORD *)(v41 + 27) = 16 * *(_WORD *)(v32 + 48);
- *(_WORD *)(v41 + 29) = 16 * (*(_DWORD *)(v32 + 48) >> 16);
- }
- if ( *(_WORD *)(v41 + 4) < 320
- && *(_WORD *)(v41 + 4) + *(_WORD *)(v41 + 8) > 0
- && *(_WORD *)(v41 + 6) < 240
- && *(_WORD *)(v41 + 6) + *(_WORD *)(v41 + 10) > 0 )
- {
- *(_DWORD *)v41 = v43;
- *(_WORD *)(v41 + 12) = v61;
- *(_BYTE *)(v41 + 14) = *(_WORD *)(v32 + 32) >> 8;
- *(_BYTE *)(v41 + 15) = *(_BYTE *)(v32 + 32);
- v57 = v53;
- }
- else
- {
- v57 = 3;
- }
- }
- else
- {
- v53 = 0;
- v44 = sub_41A340(*(_WORD *)(v32 + 60));
- v47 = *(_DWORD *)(v32 + 56);
- v48 = *(_WORD *)(v32 + 64);
- v49 = *(_WORD *)(v32 + 66);
- v50 = *(_WORD *)(v32 + 30);
- if ( v39 == 30 )
- {
- v54 = word_53EF3C;
- LOWORD(v12) = word_53EF3C[1] + word_5B78B0[0];
- v61 = v12;
- }
- else
- {
- if ( v44 < 0 || v44 >= 2 )
- return 3;
- if ( !dword_5932B0[v44] )
- {
- if ( word_554716 )
- dword_5932B0[v44] = (int)*(&off_53EFD0 + 32 * v44);
- else
- dword_5932B0[v44] = *(&dword_53EF60[32 * v44] + v39);
- }
- v54 = (_WORD *)sub_41A211(v44, v32);
- if ( !v54 )
- return 3;
- v13 = 2 * v44;
- LOWORD(v13) = v54[1] + word_53F060[v44];
- v61 = v13;
- v43 |= 0x1000000u;
- }
- if ( *(_DWORD *)(v54 + 7) != v47 )
- {
- if ( !dword_5B7830[v39] )
- return 3;
- v14 = v37 + 3;
- LOBYTE(v14) = (v37 + 3) & 0xFC;
- if ( (unsigned int)(4 * dword_5C3C5C + v38 * v14) >= 0xC000 )
- {
- nullsub_10();
- dword_5C3C5C = 0;
- }
- *(_DWORD *)(v54 + 7) = *(_DWORD *)(v32 + 56);
- v26 = ((v61 & 0xF) << 6) + v54[2] / 2;
- v27 = ((unsigned __int16)(((signed __int16)v61
- - (__CFSHL__((signed __int16)v61 >> 31, 4)
- + 16 * ((signed __int16)v61 >> 31))) >> 4) << 8)
- + v54[3];
- v15 = v37 + 3;
- LOBYTE(v15) = (v37 + 3) & 0xFC;
- v28 = v15 / 2;
- v29 = v38;
- v51 = (char *)&unk_5B7B30 + 4 * dword_5C3C5C;
- if ( v42 & 0x20 )
- {
- v16 = v37 + 3;
- LOBYTE(v16) = (v37 + 3) & 0xFC;
- sub_418032(
- *(_DWORD *)dword_5B7830[v39] + dword_5B7830[v39],
- dword_5B7830[v39] + (*(_DWORD *)(v32 + 32) & 0xFFFFFF),
- (int)v51,
- v16 | (v38 << 16));
- }
- else if ( v42 & 0x40 )
- {
- if ( v39 == 30 )
- {
- v17 = v37 + 3;
- LOBYTE(v17) = (v37 + 3) & 0xFC;
- sub_4167C8(
- dword_5B7830[30] + *(_DWORD *)dword_5B7830[30],
- dword_5B7830[30] + (*(_DWORD *)(v32 + 32) & 0xFFFFFF),
- (int)v51,
- v17 | (v38 << 16));
- sub_41B053(&unk_5B7B30, v37);
- v37 >>= 1;
- v18 = v37 + 3;
- LOBYTE(v18) = (v37 + 3) & 0xFC;
- v28 = v18 / 2;
- }
- else
- {
- v51 = (char *)&unk_5B7B30 + 4 * dword_5C3C5C;
- if ( !v52 )
- {
- v19 = v37 + 3;
- LOBYTE(v19) = (v37 + 3) & 0xFC;
- sub_417072(
- *(_DWORD *)dword_5B7830[v39] + dword_5B7830[v39],
- dword_5B7830[v39] + (*(_DWORD *)(v32 + 32) & 0xFFFFFF),
- (v27 << 11) + 2 * v26 + dword_5C5A54,
- v19 | (v38 << 16));
- }
- v60 = 1;
- }
- }
- else
- {
- v20 = v37 + 3;
- LOBYTE(v20) = (v37 + 3) & 0xFC;
- sub_417C32(
- *(_DWORD *)dword_5B7830[v39] + dword_5B7830[v39],
- dword_5B7830[v39] + (*(_DWORD *)(v32 + 32) & 0xFFFFFF),
- (int)v51,
- v20 | (v38 << 16));
- }
- if ( !(_WORD)v60 )
- {
- HIDWORD(v21) = v51;
- LODWORD(v21) = &v26;
- GPU_UploadToVram(v21);
- }
- v22 = v37 + 3;
- LOBYTE(v22) = (v37 + 3) & 0xFC;
- dword_5C3C5C += (unsigned int)(v38 * v22) >> 2;
- }
- *(_WORD *)(v41 + 12) = v61;
- *(_BYTE *)(v41 + 14) = *((_BYTE *)v54 + 4);
- *(_BYTE *)(v41 + 15) = *((_BYTE *)v54 + 6);
- if ( *(_BYTE *)(v32 + 44) & 1 || *(_BYTE *)(v32 + 30) & 0x40 )
- {
- v33 = 0;
- v34 = 0;
- }
- else
- {
- v35 = 52428 * v35 >> 16;
- v36 = 55705 * v36 >> 16;
- }
- if ( *(_WORD *)(v32 + 28) )
- {
- v45 = 52428 * *(_WORD *)(v32 + 28) >> 16;
- if ( *(_WORD *)(v41 + 8) < v45 )
- v45 = *(_WORD *)(v41 + 8);
- *(_WORD *)(v41 + 8) -= v45;
- *(_BYTE *)(v41 + 14) += v45;
- v37 -= v45;
- }
- if ( v50 & 0x10 )
- {
- v43 |= 0x800000u;
- v53 = 1;
- *(_WORD *)(v41 + 4) = v35 - v33 - (v37 - v48);
- }
- else
- {
- *(_WORD *)(v41 + 4) = v35 - v33 - v48;
- }
- if ( v50 & 0x20 )
- {
- v43 |= 0x400000u;
- v53 = 1;
- *(_WORD *)(v41 + 6) = v36 - v34 - (v38 - v49);
- }
- else
- {
- *(_WORD *)(v41 + 6) = v36 - v34 - v49;
- }
- if ( *(_DWORD *)(v32 + 48) == 16777472 )
- {
- v43 |= 0x8000000u;
- }
- else
- {
- v53 = 2;
- *(_WORD *)(v41 + 27) = 16 * *(_WORD *)(v32 + 48);
- *(_WORD *)(v41 + 29) = 16 * (*(_DWORD *)(v32 + 48) >> 16);
- }
- *(_DWORD *)v41 = v43;
- if ( *(_WORD *)(v41 + 4) < 320
- && *(_WORD *)(v41 + 4) + *(_WORD *)(v41 + 8) > 0
- && *(_WORD *)(v41 + 6) < 240
- && *(_WORD *)(v41 + 6) + *(_WORD *)(v41 + 10) > 0 )
- {
- v57 = v53;
- }
- else
- {
- v57 = 3;
- }
- }
- }
- }
- return v57;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement