Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- _DWORD *__cdecl ParseCH_Segment7_Entry(int bufferOffset, int buffer, int canBeZero)
- {
- int v3; // edi
- unsigned int v4; // ebp
- _DWORD *result; // eax
- char v6; // al
- _DWORD *actorInfoPtr; // eax
- _DWORD *resultActorInfo; // esi
- _DWORD *v9; // eax
- int v10; // ecx
- double v11; // st7
- int v12; // eax
- void *v13; // eax
- int v14; // eax
- char *v15; // eax
- int v16; // eax
- int v17; // eax
- float bufferOffseta; // [esp+Ch] [ebp+4h]
- float bufferOffsetb; // [esp+Ch] [ebp+4h]
- v3 = bufferOffset;
- v4 = *(_DWORD *)(bufferOffset + 28);
- if ( !v4 )
- {
- if ( *(_BYTE *)(bufferOffset + 4) == 1 )
- *(_DWORD *)bufferOffset = -1;
- return 0;
- }
- if ( !canBeZero )
- {
- result = *(_DWORD **)bufferOffset;
- if ( *(_DWORD *)bufferOffset )
- return result;
- }
- v6 = *(_BYTE *)(bufferOffset + 4);
- switch ( v6 )
- {
- case 2:
- sub_40D1D0(v4);
- return 0;
- case 1:
- *(_DWORD *)bufferOffset = -1;
- return 0;
- case 4:
- return 0;
- }
- actorInfoPtr = ActorInfo_Ctor();
- resultActorInfo = actorInfoPtr;
- if ( canBeZero )
- actorInfoPtr[6] |= 0x100u;
- else
- *(_DWORD *)bufferOffset = actorInfoPtr;
- actorInfoPtr[105] = bufferOffset;
- *((_WORD *)actorInfoPtr + 200) = 0;
- if ( *(_BYTE *)(bufferOffset + 4) == 3 )
- {
- v9 = sub_40F5A0(v4, 0);
- resultActorInfo[89] = v9;
- if ( !v9 )
- {
- LABEL_27:
- free(resultActorInfo);
- *(_DWORD *)bufferOffset = 0;
- return 0;
- }
- v10 = v9[2] + 288 * *(unsigned __int8 *)(bufferOffset + 5);
- if ( *(_WORD *)(v10 + 38) == 100 )
- {
- resultActorInfo[6] &= 0xFFEFFFFF;
- v11 = 1.0;
- }
- else
- {
- resultActorInfo[6] |= 0x100000u;
- v11 = 100.0 / (double)*(unsigned __int16 *)(v10 + 38);
- }
- *((double *)resultActorInfo + 56) = v11;
- v4 = *(_DWORD *)(v10 + 16);
- resultActorInfo[4] = v4;
- *((_WORD *)resultActorInfo + 180) = *(unsigned __int8 *)(bufferOffset + 5);
- *((_WORD *)resultActorInfo + 200) = *(unsigned __int8 *)(v10 + 28);
- *((float *)resultActorInfo + 93) = (double)*(unsigned int *)(v10 + 248);
- sub_4421A0(resultActorInfo, v10);
- }
- else
- {
- *((float *)actorInfoPtr + 93) = 50.0;
- }
- *((float *)resultActorInfo + 94) = *((float *)resultActorInfo + 93) * 0.6000000238418579;
- if ( v4 )
- {
- v12 = sub_40F000(v4);
- resultActorInfo[16] = v12;
- if ( !v12 )
- {
- v13 = (void *)resultActorInfo[89];
- if ( v13 )
- sub_40EAB0(v13, 0);
- goto LABEL_27;
- }
- if ( (unsigned int)*((unsigned __int16 *)resultActorInfo + 200) >= *(_DWORD *)(v12 + 28) )
- *((_WORD *)resultActorInfo + 200) = 0;
- if ( !sub_4116F0(v4) && !*(_WORD *)(*(_DWORD *)(resultActorInfo[16] + 8) + 46) )
- resultActorInfo[6] |= 0x200u;
- v14 = resultActorInfo[16];
- if ( *(_DWORD *)(v14 + 12) >= 0x10u && *(_WORD *)(*(_DWORD *)(v14 + 8) + 1262) )
- resultActorInfo[6] |= 0x40u;
- }
- if ( v4 == 16795317 || v4 == 134221760 )
- resultActorInfo[20] = 32;
- v15 = sub_4106E0(v4);
- strncpy((char *)resultActorInfo, v15, 7u);
- resultActorInfo[4] = v4;
- *((float *)resultActorInfo + 21) = (double)*(unsigned __int16 *)(bufferOffset + 6);
- if ( *(_BYTE *)(bufferOffset + 4) != 3 )
- *((_WORD *)resultActorInfo + 200) = *(unsigned __int8 *)(bufferOffset + 5);
- if ( *(_BYTE *)(bufferOffset + 13) )
- resultActorInfo[6] |= 4u;
- v16 = *(unsigned __int8 *)(bufferOffset + 12);
- resultActorInfo[19] = v16;
- resultActorInfo[18] = v16;
- bufferOffseta = (double)*(signed __int16 *)(bufferOffset + 16);
- *((float *)resultActorInfo + 14) = bufferOffseta;
- *((float *)resultActorInfo + 12) = bufferOffseta;
- *((float *)resultActorInfo + 8) = bufferOffseta;
- bufferOffsetb = (double)*(signed __int16 *)(v3 + 18);
- *((float *)resultActorInfo + 15) = bufferOffsetb;
- *((float *)resultActorInfo + 13) = bufferOffsetb;
- *((float *)resultActorInfo + 9) = bufferOffsetb;
- v17 = *(_DWORD *)(v3 + 32);
- *(_DWORD *)((char *)resultActorInfo + 306) |= 0x10000u;
- resultActorInfo[24] = v17;
- resultActorInfo[23] = v17;
- resultActorInfo[27] = -1;
- *((_WORD *)resultActorInfo + 34) = -1;
- resultActorInfo[33] = 0;
- resultActorInfo[32] = 0;
- *((_BYTE *)resultActorInfo + 412) = *(_BYTE *)(v3 + 14);
- *((_BYTE *)resultActorInfo + 413) = *(_BYTE *)(v3 + 15);
- if ( *(_BYTE *)(v3 + 8) )
- {
- if ( *(_BYTE *)(v3 + 8) == 1 )
- {
- resultActorInfo[6] &= 0xFFFFFFF7;
- }
- else if ( *(_BYTE *)(v3 + 8) == 2 )
- {
- resultActorInfo[6] |= 1u;
- }
- }
- else
- {
- resultActorInfo[6] |= 8u;
- }
- sub_40EA00(resultActorInfo);
- if ( !sub_423910(resultActorInfo) )
- {
- free(resultActorInfo);
- *(_DWORD *)v3 = 0;
- resultActorInfo = 0;
- }
- return resultActorInfo;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement