Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- int __usercall ReadComplexField@<eax>(__int64 Index@<rax>, __int64 a2@<rbx>, __int64 a3@<rbp>, __int64 a4@<rdi>, __int64 a5@<rsi>, __int64 ArrayAreaStartPointer@<r10>, __int64 a7@<r11>, __int64 a8@<r12>, __int64 a9@<r13>, struct_StreamReader2 *StreamReader2@<r14>, __int64 a11@<r15>, __int64 a12, __int64 a13, __int64 a14, __int64 a15, __int64 a16, __int64 a17, __int64 a18, int a19, int a20, int a21, __int64 a22, __int64 a23)
- {
- _UNKNOWN *v23; // rbx@1
- __int64 v24; // rbp@1
- __int64 IntCounter; // rcx@2
- __int64 currentPOS; // r8@2
- ArrayRepListEntry *ArrayRepList; // rax@2
- __int64 Repeats; // r9@2
- unsigned int *tArray; // rsi@2
- ComplexField *CFieldDesc; // rdx@2
- _DWORD *ActualOffset; // rdi@2
- FieldDescriptor *FieldDesc; // rcx@2
- unsigned int FieldType; // eax@2
- bool v34; // cf@3
- ComplexField *tCField; // r10@5
- signed __int64 Size; // rsi@7
- __int64 count; // r11@7
- FieldDescriptor *tField; // rax@8
- __int64 count2; // rbx@18
- ComplexField *v40; // rbp@22
- __int64 count3; // rbx@27
- __int64 v43; // rax@28
- __int64 v44; // rax@29
- *(_QWORD *)(a7 + 32) = a2;
- *(_QWORD *)(a7 - 16) = a3;
- *(_QWORD *)(a7 - 24) = a5;
- *(_QWORD *)(a7 - 32) = a4;
- *(_QWORD *)(a7 - 40) = a8;
- *(_QWORD *)(a7 - 48) = a9;
- *(_QWORD *)(a7 - 56) = a11;
- v23 = &unk_141D66DC0;
- v24 = (__int64)&unk_14289EA50;
- do
- {
- IntCounter = 3 * Index;
- currentPOS = (unsigned int)Index;
- ArrayRepList = (ArrayRepListEntry *)StreamReader2->EBXEntry.ArrayRepListOffset;
- Repeats = ArrayRepList[(unsigned __int64)(4 * IntCounter) / 0xC].Repeats;
- tArray = (unsigned int *)(ArrayAreaStartPointer + ArrayRepList[(unsigned __int64)(4 * IntCounter) / 0xC].offset);
- CFieldDesc = &StreamReader2->EBXEntry.ComplexDescOffset[ArrayRepList[(unsigned __int64)(4 * IntCounter) / 0xC].Index];
- ActualOffset = (_DWORD *)(StreamReader2->ArrayStart + *(_DWORD *)(StreamReader2->ArrayRepList2 + 4 * currentPOS));
- *(ActualOffset - 1) = Repeats;
- FieldDesc = &StreamReader2->EBXEntry.FieldDescStart[CFieldDesc->fieldStartIndex];
- FieldType = ((unsigned int)FieldDesc->type >> 4) & 0x1F;
- if ( (signed int)FieldType < 0xA )
- {
- switch ( FieldType )
- {
- case 8u:
- tCField = &StreamReader2->EBXEntry.ComplexDescOffset[FieldDesc->reference];
- if ( tCField->secondarySize & 0x8000 )
- {
- if ( (_DWORD)Repeats )
- {
- Size = (char *)tArray - (char *)ActualOffset;
- count = Repeats;
- do
- {
- CFieldDesc = (ComplexField *)tCField->numField;
- currentPOS = *(_DWORD *)((char *)ActualOffset + Size);
- FieldDesc = 0i64;
- tField = &StreamReader2->EBXEntry.FieldDescStart[tCField->fieldStartIndex];
- if ( tCField->numField )
- {
- while ( tField->offset != (_DWORD)currentPOS )
- {
- FieldDesc = (FieldDescriptor *)(unsigned int)((_DWORD)FieldDesc + 1);
- ++tField;
- if ( (unsigned int)FieldDesc >= (unsigned int)CFieldDesc )
- {
- goto LABEL_13;
- }
- }
- FieldDesc = (FieldDescriptor *)tField->secondaryOffset;
- *ActualOffset = (_DWORD)FieldDesc;
- }
- LABEL_13:
- ++ActualOffset;
- --count;
- }
- while ( count );
- }
- }
- else
- {
- sub_1441D0E8C();
- }
- break;
- case 3u:
- if ( (_DWORD)Repeats )
- {
- count2 = Repeats;
- do
- {
- ReadField_0((struct_StreamReader3 *)StreamReader2, tArray, ActualOffset);
- ++tArray;
- ActualOffset += 2;
- --count2;
- }
- while ( count2 );
- }
- break;
- case 2u:
- v40 = &StreamReader2->EBXEntry.ComplexDescOffset[FieldDesc->reference];
- JUMPOUT((v40->type >> 15) & 1, 0, NormalFieldReader);
- v34 = (signed int)Repeats * (unsigned __int64)v40->offset >> 32 != 0;
- sub_1441D0E8C();
- v24 = (__int64)&unk_14289EA50;
- break;
- default:
- if ( FieldType == 7 && (_DWORD)Repeats )
- {
- count3 = Repeats;
- do
- {
- v43 = *tArray;
- if ( (_DWORD)v43 == -1 )
- {
- a22 = v24;
- sub_142FCFFAF((__int64)&a22, (__int64)CFieldDesc);
- v44 = v24;
- }
- else
- {
- v44 = StreamReader2->qword4D0 + v43;
- }
- *(_QWORD *)ActualOffset = v44;
- ActualOffset += 2;
- ++tArray;
- --count3;
- }
- while ( count3 );
- }
- break;
- }
- }
- else
- {
- v34 = (signed int)Repeats * (unsigned __int64)*((_BYTE *)v23 + (signed int)FieldType) >> 32 != 0;
- sub_1441D0E8C();
- }
- ArrayAreaStartPointer = a23;
- Index = (unsigned int)(a21 + 1);
- v23 = &unk_141D66DC0;
- a21 = Index;
- }
- while ( (unsigned int)Index < StreamReader2->EBXEntry.Header.numArrayRepeater );
- return sub_142FF1326(FieldDesc, CFieldDesc, currentPOS, Repeats, a12, a13, a14, a15, a16, a17, a18);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement