Created
December 31, 2013 15:22
-
-
Save NateShoffner/8198284 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <windows.h> | |
#include <math.h> | |
#include <defs.h> | |
//------------------------------------------------------------------------- | |
// Data declarations | |
extern int dword_401820[508]; // weak | |
extern int dword_402010[4]; // weak | |
extern int dword_402020; // weak | |
extern __int64 qword_403038; // weak | |
extern char byte_403040[4]; // weak | |
extern int dword_403044; // weak | |
extern int dword_403048; // weak | |
extern int dword_40304C; // weak | |
extern int dword_403050; // weak | |
extern int dword_403054; // weak | |
extern void *off_403058; // weak | |
extern int dword_40307C[]; // weak | |
extern int dword_4030A0[]; // weak | |
extern int *off_4030C4; // weak | |
extern char byte_4030E8; // weak | |
extern __int128 xmmword_4037F0; // weak | |
extern __int128 xmmword_403800; // weak | |
extern __int128 xmmword_403810; // weak | |
extern __int128 xmmword_403820; // weak | |
extern __int128 xmmword_403830; // weak | |
extern float flt_403850; // weak | |
extern int dword_403858; // weak | |
extern int dword_40385C; // weak | |
extern float flt_403860; // weak | |
extern int dword_403868; // weak | |
extern int dword_40386C; // weak | |
extern int dword_403870[4]; // weak | |
extern float flt_403880; // weak | |
extern int dword_403888; // weak | |
extern int dword_40388C; // weak | |
extern int dword_403890[4]; // weak | |
extern int dword_4038A0[4]; // weak | |
extern int dword_4038B0[4]; // weak | |
extern int dword_4038D0[4092]; // weak | |
extern __int128 xmmword_4078C0; // weak | |
extern float flt_4078D0; // weak | |
extern int dword_4078D8; // weak | |
extern int dword_4078DC; // weak | |
extern int dword_4078E0[4]; // weak | |
extern __int64 qword_4078F0; // weak | |
extern __int64 qword_4078F8[]; // weak | |
extern __int64 qword_407900[]; // weak | |
extern __int64 qword_408100; // weak | |
extern __int16 word_408108; // weak | |
extern int dword_40810A; // weak | |
extern __int16 word_40810E; // weak | |
extern __int16 word_408110; // weak | |
extern __int16 word_408112; // weak | |
extern __int16 word_408114; // weak | |
extern __int16 word_408116; // weak | |
extern __int64 qword_408118; // weak | |
extern int dword_408120; // weak | |
extern int dword_408124; // weak | |
extern _UNKNOWN loc_408150; // weak | |
extern int dword_4082A5; // weak | |
extern int dword_4082B0; // weak | |
extern int dword_4082C9; // weak | |
extern int dword_4082CF; // weak | |
extern _UNKNOWN loc_408310; // weak | |
extern int dword_4084C7; // weak | |
extern int dword_4084D2; // weak | |
extern int dword_4084F3; // weak | |
extern int dword_4084F9; // weak | |
extern int dword_408508[62]; // weak | |
extern _UNKNOWN loc_40B89F; // weak | |
extern _UNKNOWN loc_40F942; // weak | |
extern _UNKNOWN loc_4126F2; // weak | |
extern _UNKNOWN unk_43642C; // weak | |
extern _UNKNOWN unk_436634; // weak | |
extern char a0ayHvmksDa6c[16]; // weak | |
extern _UNKNOWN unk_43669C; // weak | |
extern _UNKNOWN unk_4366AC; // weak | |
extern _UNKNOWN unk_4366BC; // weak | |
extern _UNKNOWN unk_4366CC; // weak | |
extern char aGetprocesswind[]; // idb | |
extern char aGetuserobjecti[]; // idb | |
extern char aGetlastactivep[]; // idb | |
extern char aGetactivewindo[]; // idb | |
extern char aMessageboxw[]; // idb | |
extern const WCHAR LibFileName[]; // idb | |
extern char aErrorDispatchi[]; // idb | |
extern char aErrorSendingOu[]; // idb | |
extern char aErrorReceiving[]; // idb | |
extern char byte_4382F0[]; // weak | |
extern _UNKNOWN unk_4388EC; // weak | |
extern int dword_4388F0[]; // weak | |
extern char byte_438970[]; // weak | |
extern char aWavDeath_wav[14]; // weak | |
extern char aYouVeBeenKille[23]; // weak | |
extern int dword_438AC0; // weak | |
extern char byte_438AC4; // weak | |
extern int dword_438AC8; // weak | |
extern char byte_438ACC; // weak | |
extern char aHeadModelHasTh[36]; // weak | |
extern char aTorsoModelHasT[37]; // weak | |
extern char aTorsocModelHas[38]; // weak | |
extern char aArmsModelHasTh[36]; // weak | |
extern char aLegModelHasThe[35]; // weak | |
extern char aLegcModelHasTh[36]; // weak | |
extern char aR[]; // idb | |
extern char aConfig_ini[]; // idb | |
extern char aSS[]; // idb | |
extern char aWb[]; // idb | |
extern char aLastmap_vxl[]; // idb | |
extern char aCouldnTOpenLas[26]; // weak | |
extern char aQuitMapTransfe[18]; // weak | |
extern char aDownloadingMap[30]; // weak | |
extern char aServerDiscon_0[54]; // weak | |
extern char aServerTimeoutV[54]; // weak | |
extern char aCouldnTGetIpAd[24]; // weak | |
extern char aCouldnTLoadMap[23]; // weak | |
extern char aName[5]; // weak | |
extern char aDeuce[6]; // weak | |
extern char aWavIntro_wav[14]; // weak | |
extern char aRb[]; // idb | |
extern char aCouldNotOpenCu[34]; // weak | |
extern char SubKey[]; // idb | |
extern char aXres[5]; // weak | |
extern char aYres[5]; // weak | |
extern char aVol[4]; // weak | |
extern char aClient_exe[11]; // weak | |
extern char aServerConnecti[60]; // weak | |
extern char aErrorVisitAceS[68]; // weak | |
extern char aPngKnumb_png[]; // idb | |
extern char aPngSemi_png[]; // idb | |
extern char aPngTarget_png[]; // idb | |
extern char aPngIcon_png[]; // idb | |
extern char aWavWaterjump_w[18]; // weak | |
extern char aWavJump_wav[13]; // weak | |
extern char aWavWaterland_w[18]; // weak | |
extern char aWavLand_wav[13]; // weak | |
extern char aWavFallhurt_wa[17]; // weak | |
extern char aWavWade1_wav[14]; // weak | |
extern char aWavFootstep1_w[18]; // weak | |
extern char aWavWade2_wav[14]; // weak | |
extern char aWavFootstep2_w[18]; // weak | |
extern char aWavWade3_wav[14]; // weak | |
extern char aWavFootstep3_w[18]; // weak | |
extern char aWavWade4_wav[14]; // weak | |
extern char aWavFootstep4_w[18]; // weak | |
extern char aWavWoosh_wav[14]; // weak | |
extern char aWavHitground_w[18]; // weak | |
extern char aWavSwitch_wav[15]; // weak | |
extern char aWavSemishoot_w[18]; // weak | |
extern char aWavHitplayer_w[18]; // weak | |
extern char aWavPin_wav[12]; // weak | |
extern char aWavExplode_wav[16]; // weak | |
extern char aWavBounce_wav[15]; // weak | |
extern int dword_438F68; // weak | |
extern __int64 qword_438F6C; // weak | |
extern __int16 word_438F74; // weak | |
extern char byte_438F76; // weak | |
extern char aWavBuild_wav[14]; // weak | |
extern char aWavPickup_wav[15]; // weak | |
extern int dword_438F98; // weak | |
extern int dword_438F9C; // weak | |
extern int dword_438FA0; // weak | |
extern int dword_438FA4; // weak | |
extern __int16 word_438FA8; // weak | |
extern int dword_438FAC; // weak | |
extern int dword_438FB0; // weak | |
extern int dword_438FB4; // weak | |
extern int dword_438FB8; // weak | |
extern char byte_438FBC; // weak | |
extern char aHasDroppedGree[26]; // weak | |
extern char aHasDroppedBlue[25]; // weak | |
extern char aHasCapturedGre[27]; // weak | |
extern char aHasCapturedBlu[26]; // weak | |
extern char aServerDisconne[58]; // weak | |
extern char aWavWaterexplod[21]; // weak | |
extern char aWavDebris_wav[15]; // weak | |
extern char aWavChat_wav[13]; // weak | |
extern char aVolumeI[]; // idb | |
extern char aWavSemireload_[19]; // weak | |
extern char aD[]; // idb | |
extern char aDD[]; // idb | |
extern char aControls___[12]; // weak | |
extern char aPressBToGoBlue[19]; // weak | |
extern char aPressGToGoGree[20]; // weak | |
extern char aMovementWSADJu[42]; // weak | |
extern char aWalkShiftFireL[43]; // weak | |
extern char aReloadRScoresT[44]; // weak | |
extern char aColorSelectArr[42]; // weak | |
extern char aWeapons15OrMou[43]; // weak | |
extern char aCouldNotLoadKv[24]; // weak | |
extern char aLoadkv6MallocN[34]; // weak | |
extern char aVoxsetframebuf[38]; // weak | |
extern char aProblemCreatin[]; // idb | |
extern char aProblemCalling[]; // idb | |
extern char name[]; // idb | |
extern char aGetAutomationN[100]; // weak | |
extern char aContentLength[]; // idb | |
extern char aI[]; // idb | |
extern char asc_43930C[]; // idb | |
extern char WindowName[]; // idb | |
extern char aInitdirectdraw[]; // idb | |
extern char aInitdirectdr_0[]; // idb | |
extern char Caption[]; // idb | |
extern char aInitdirectinpu[]; // idb | |
extern char aInitdirectin_1[]; // idb | |
extern char aInitdirectin_0[]; // idb | |
extern char Text[]; // idb | |
extern char aCreatesoundbuf[]; // idb | |
extern char aQuery___listen[]; // idb | |
extern char aError_0[]; // idb | |
extern char aSorryThisProgr[]; // idb | |
extern _UNKNOWN unk_439A34; // weak | |
extern _UNKNOWN unk_439A3C; // weak | |
extern void *off_43C200; // weak | |
extern _UNKNOWN unk_43C2B0; // weak | |
extern void *off_43C2C8; // weak | |
extern int dword_43C588; // weak | |
extern HANDLE hConsoleOutput; // idb | |
extern int dword_43D014; // weak | |
extern int dword_43D018; // weak | |
extern int dword_43D020; // weak | |
extern int dword_43D024; // weak | |
extern int dword_43D04C; // weak | |
extern __int64 qword_43D050; // weak | |
extern void *off_43D058; // weak | |
extern __int64 qword_43D068; // weak | |
extern __int64 qword_43D070; // weak | |
extern void *off_43D07C; // weak | |
extern void *off_43D084; // weak | |
extern void *off_43D08C; // weak | |
extern void *off_43D094; // weak | |
extern char byte_43D098; // weak | |
extern int dword_43D09C; // weak | |
extern __int64 qword_43D0A0; // weak | |
extern __int64 qword_43D0A8; // weak | |
extern __int64 qword_43D0B0; // weak | |
extern __int64 qword_43D210; // weak | |
extern int dword_43D218[]; // weak | |
extern int dword_43D264; // weak | |
extern int dword_43D268[]; // weak | |
extern int (__cdecl *off_43D298)(_DWORD); // weak | |
extern int (__cdecl *off_43D29C)(_DWORD); // weak | |
extern int (*off_43D2A0)(void); // weak | |
extern int dword_43D404; // weak | |
extern int dword_43D408; // weak | |
extern int dword_43D40C; // weak | |
extern int dword_43D410; // weak | |
extern int dword_43D414; // weak | |
extern int dword_43D418; // weak | |
extern int dword_43D41C; // weak | |
extern int dword_43D420; // weak | |
extern int dword_43D424; // weak | |
extern int dword_43D428; // weak | |
extern int dword_43D42C; // weak | |
extern int dword_43D430; // weak | |
extern PVOID dword_43D740; // idb | |
extern PVOID dword_43D74C; // idb | |
extern PVOID dword_43DD88; // idb | |
extern int dword_43DEFC; // weak | |
extern int dword_43DF00; // weak | |
extern PVOID dword_43E014; // idb | |
extern PVOID dword_43E018; // idb | |
extern PVOID dword_43E01C; // idb | |
extern PVOID dword_43E020; // idb | |
extern PVOID dword_43E024; // idb | |
extern int dword_43E384; // weak | |
extern int dword_43E388[]; // weak | |
extern _UNKNOWN unk_43E788; // weak | |
extern int dword_43E7D4; // weak | |
extern signed int byte_43E7D8[8192]; // idb | |
extern int dword_4467D8; // weak | |
extern int dword_4467DC; // weak | |
extern int dword_4467E0; // weak | |
extern int dword_4467E4; // weak | |
extern int dword_4467E8[]; // weak | |
extern _UNKNOWN unk_446830; // weak | |
extern int dword_446834; // weak | |
extern _UNKNOWN unk_446838; // weak | |
extern char byte_4468B8[]; // weak | |
extern int dword_4468F8; // weak | |
extern int dword_4468FC; // weak | |
extern int dword_446900; // weak | |
extern int dword_446904; // weak | |
extern int dword_446908[]; // weak | |
extern int dword_446988[]; // weak | |
extern int dword_44698C; // weak | |
extern int dword_446990; // weak | |
extern int dword_446994; // weak | |
extern int dword_446998; // weak | |
extern int dword_44699C; // weak | |
extern int dword_4469A0; // weak | |
extern int dword_4469A4; // weak | |
extern int dword_4469A8; // weak | |
extern int dword_4469AC; // weak | |
extern int dword_4469B0; // weak | |
extern int dword_4469B4; // weak | |
extern char byte_4469B8[]; // weak | |
extern int dword_446BB8; // weak | |
extern int dword_446BBC; // weak | |
extern int dword_446BC0[]; // weak | |
extern char byte_4473BF[]; // weak | |
extern char byte_4473C0[]; // weak | |
extern char byte_4473C1[]; // weak | |
extern char byte_4473C2[]; // weak | |
extern int dword_456CA8[]; // weak | |
extern int dword_456CAC[]; // weak | |
extern int dword_4573C0[]; // weak | |
extern int dword_4573C4[]; // weak | |
extern _UNKNOWN unk_4574B0; // weak | |
extern int dword_457590; // weak | |
extern int dword_457594; // weak | |
extern _UNKNOWN unk_457598; // weak | |
extern int dword_457618; // weak | |
extern int dword_45761C; // weak | |
extern int dword_457620; // weak | |
extern int dword_457624; // weak | |
extern _UNKNOWN unk_457628; // weak | |
extern int dword_457E28[]; // weak | |
extern int dword_458628[]; // weak | |
extern int dword_458728; // weak | |
extern int dword_45872C; // weak | |
extern int dword_458730[]; // weak | |
extern _UNKNOWN unk_458970; // weak | |
extern int dword_458B30; // weak | |
extern int dword_458B34; // weak | |
extern int dword_458B38; // weak | |
extern int dword_458B3C; // weak | |
extern int dword_458B40; // weak | |
extern int dword_458B44; // weak | |
extern int dword_458B48; // weak | |
extern int dword_458B4C; // weak | |
extern int dword_458B50; // weak | |
extern int dword_458B54; // weak | |
extern int dword_458B58; // weak | |
extern int dword_458B5C; // weak | |
extern int dword_458B60; // weak | |
extern int dword_458B64; // weak | |
extern int dword_458B68; // weak | |
extern int dword_458B6C; // weak | |
extern int dword_458B70; // weak | |
extern int dword_458B74; // weak | |
extern int dword_458B78; // weak | |
extern int dword_458B7C; // weak | |
extern int dword_458B80; // weak | |
extern int dword_458B84; // weak | |
extern int dword_458B88; // weak | |
extern int dword_458B8C; // weak | |
extern int dword_458B90; // weak | |
extern int dword_458B94; // weak | |
extern int dword_458B98; // weak | |
extern int dword_458B9C; // weak | |
extern int dword_458BA0; // weak | |
extern int dword_458BA4; // weak | |
extern int dword_458BA8; // weak | |
extern int dword_458BAC; // weak | |
extern int dword_458BB0; // weak | |
extern int dword_458BB4; // weak | |
extern int dword_458BB8; // weak | |
extern int dword_458BBC; // weak | |
extern int dword_458BC0; // weak | |
extern int dword_458BC4; // weak | |
extern int dword_458BC8; // weak | |
extern int dword_458BCC; // weak | |
extern int dword_458BD0; // weak | |
extern int dword_458BD4; // weak | |
extern int dword_458BD8; // weak | |
extern int dword_458BDC; // weak | |
extern int dword_458BE0; // weak | |
extern int dword_458BE4; // weak | |
extern int dword_458BE8; // weak | |
extern int dword_458BEC; // weak | |
extern int dword_458BF0; // weak | |
extern int dword_458BF4; // weak | |
extern int dword_458BF8; // weak | |
extern int dword_458BFC; // weak | |
extern int dword_458C00; // weak | |
extern int dword_458C04; // weak | |
extern int dword_458C08; // weak | |
extern int dword_458C0C; // weak | |
extern int dword_458C10; // weak | |
extern int dword_458C14; // weak | |
extern int dword_458C18; // weak | |
extern int dword_458C1C; // weak | |
extern int dword_458C20; // weak | |
extern int dword_458C24; // weak | |
extern int dword_458C28; // weak | |
extern int dword_458C2C; // weak | |
extern int dword_458C30[]; // weak | |
extern int dword_4590B0; // weak | |
extern int dword_4590B4; // weak | |
extern int dword_4590B8; // weak | |
extern int dword_4590BC; // weak | |
extern int dword_4590C0; // weak | |
extern int dword_4590C4; // weak | |
extern int dword_4590C8; // weak | |
extern int dword_4590CC; // weak | |
extern float flt_4590D0; // weak | |
extern float flt_459104; // weak | |
extern float flt_459108; // weak | |
extern float flt_45910C; // weak | |
extern int dword_459110[]; // weak | |
extern int dword_45E110[]; // weak | |
extern int dword_45F110; // weak | |
extern int dword_45F114; // weak | |
extern float flt_45F118; // weak | |
extern int dword_45F124; // weak | |
extern int dword_45F128; // weak | |
extern _UNKNOWN dword_45F12C; // weak | |
extern int dword_45F130; // weak | |
extern __int64 qword_45F134; // weak | |
extern int dword_45F13C; // weak | |
extern float flt_45F140; // weak | |
extern __int64 qword_45F144; // weak | |
extern float flt_4605C8; // weak | |
extern int dword_4605CC; // weak | |
extern __int64 qword_4605D0; // weak | |
extern int dword_4605E0; // weak | |
extern int dword_4605E4; // weak | |
extern float flt_4605E8; // weak | |
extern float flt_4605EC; // weak | |
extern float flt_4605F0; // weak | |
extern __int64 qword_4605F4; // weak | |
extern float flt_4605FC; // weak | |
extern float flt_460600; // weak | |
extern float flt_460604; // weak | |
extern _UNKNOWN unk_460608; // weak | |
extern float flt_462F94[]; // weak | |
extern float flt_462FE0; // weak | |
extern float flt_462FE4; // weak | |
extern int dword_462FE8; // weak | |
extern int dword_462FEC; // weak | |
extern int dword_463000[]; // weak | |
extern _UNKNOWN unk_46309C; // weak | |
extern _UNKNOWN unk_4630A0; // weak | |
extern int dword_4630A4; // weak | |
extern __int64 qword_4630A8[]; // weak | |
extern __int64 qword_4630B0[]; // weak | |
extern __int16 word_4638B0; // weak | |
extern _UNKNOWN unk_4638B2; // weak | |
extern __int16 word_4638B4; // weak | |
extern __int16 word_4638B6; // weak | |
extern int dword_4638B8; // weak | |
extern int dword_4638BC; // weak | |
extern int dword_4638C0; // weak | |
extern int dword_4638C4; // weak | |
extern int dword_4638C8; // weak | |
extern int dword_4638CC; // weak | |
extern __int64 qword_4638D0[]; // weak | |
extern __int64 qword_4678D0[]; // weak | |
extern float flt_4678D8; // weak | |
extern int dword_4678DC; // weak | |
extern int dword_4678E0; // weak | |
extern int dword_4678E4; // weak | |
extern float flt_4678E8; // weak | |
extern int dword_4678EC; // weak | |
extern int dword_4678F0; // weak | |
extern int dword_4678F4; // weak | |
extern int dword_4678F8; // weak | |
extern int dword_4678FC; // weak | |
extern int dword_467900; // weak | |
extern int dword_467904; // weak | |
extern int dword_467B08; // weak | |
extern int dword_467B0C; // weak | |
extern float flt_467D14; // weak | |
extern int dword_467D18; // weak | |
extern int dword_467D20; // weak | |
extern int dword_467D24; // weak | |
extern int dword_467D30; // weak | |
extern int dword_467D34; // weak | |
extern int dword_467D44; // weak | |
extern int dword_467D88; // weak | |
extern WNDCLASSA WndClass; // idb | |
extern LARGE_INTEGER PerformanceCount; // idb | |
extern int dword_467DC0[]; // weak | |
extern int dword_4681C0; // weak | |
extern int dword_4681C4; // weak | |
extern int dword_4681C8; // weak | |
extern int dword_4681CC; // weak | |
extern _UNKNOWN unk_4681D0; // weak | |
extern int dword_468230[]; // weak | |
extern int dword_468234[]; // weak | |
extern _UNKNOWN unk_468238; // weak | |
extern _UNKNOWN unk_4682A0; // weak | |
extern _UNKNOWN unk_468308; // weak | |
extern _UNKNOWN unk_468370; // weak | |
extern _UNKNOWN unk_4683D8; // weak | |
extern int dword_468440; // weak | |
extern int dword_468444; // weak | |
extern int dword_468448; // weak | |
extern int dword_46844C; // weak | |
extern int dword_468450; // weak | |
extern int dword_468454; // weak | |
extern int dword_468458; // weak | |
extern int dword_46845C; // weak | |
extern int dword_468460; // weak | |
extern int dword_468464; // weak | |
extern char byte_468468; // weak | |
extern void *dword_46846C; // idb | |
extern int dword_468470; // weak | |
extern int dword_468474; // weak | |
extern int dword_468478; // weak | |
extern int dword_46847C; // weak | |
extern int dword_468480[]; // weak | |
extern int dword_468484[]; // weak | |
extern int dword_468488[]; // weak | |
extern int dword_46848C[]; // weak | |
extern int dword_468490[]; // weak | |
extern int dword_468494[]; // weak | |
extern float flt_468498[]; // weak | |
extern float flt_46849C[]; // weak | |
extern float flt_4684A0[]; // weak | |
extern float flt_4684A4[]; // weak | |
extern float flt_4684A8[]; // weak | |
extern float flt_4684AC[]; // weak | |
extern int dword_4684D0[]; // weak | |
extern int dword_4684D4[]; // weak | |
extern int dword_4684D8[]; // weak | |
extern int dword_4684DC[]; // weak | |
extern int dword_4684E0[]; // weak | |
extern int dword_4684E4[]; // weak | |
extern int dword_4684E8[]; // weak | |
extern int dword_4684EC[]; // weak | |
extern int dword_4684F0[]; // weak | |
extern int dword_4684F4[]; // weak | |
extern int dword_4684F8[]; // weak | |
extern int dword_4684FC[]; // weak | |
extern int dword_468500[]; // weak | |
extern int dword_468524[]; // weak | |
extern float flt_468528[]; // weak | |
extern float flt_46852C[]; // weak | |
extern float flt_468530[]; // weak | |
extern float flt_468534[]; // weak | |
extern float flt_468538[]; // weak | |
extern float flt_46853C[]; // weak | |
extern float flt_468540[]; // weak | |
extern float flt_468544[]; // weak | |
extern float flt_468548[]; // weak | |
extern float flt_46854C[]; // weak | |
extern float flt_468550[]; // weak | |
extern float flt_468554[]; // weak | |
extern int dword_468578[]; // weak | |
extern float flt_46857C[]; // weak | |
extern float flt_468580[]; // weak | |
extern float flt_468584[]; // weak | |
extern int dword_468588[]; // weak | |
extern int dword_46858C[]; // weak | |
extern int dword_468590[]; // weak | |
extern int dword_468594[]; // weak | |
extern int dword_468598[]; // weak | |
extern int dword_46859C[]; // weak | |
extern int dword_4685A0[]; // weak | |
extern int dword_4685A4[]; // weak | |
extern int dword_4685A8[]; // weak | |
extern int dword_4685CC[]; // weak | |
extern float flt_4685D0[]; // weak | |
extern float flt_4685D4[]; // weak | |
extern float flt_4685D8[]; // weak | |
extern int dword_4685DC[]; // weak | |
extern int dword_4685E0[]; // weak | |
extern int dword_4685E4[]; // weak | |
extern int dword_4685E8[]; // weak | |
extern int dword_4685EC[]; // weak | |
extern int dword_4685F0[]; // weak | |
extern int dword_4685F4[]; // weak | |
extern int dword_4685F8[]; // weak | |
extern int dword_4685FC[]; // weak | |
extern int dword_468620[]; // weak | |
extern int dword_468624[]; // weak | |
extern float flt_468630[]; // weak | |
extern float flt_468634[]; // weak | |
extern float flt_468638[]; // weak | |
extern float flt_46863C[]; // weak | |
extern float flt_468640[]; // weak | |
extern float flt_468644[]; // weak | |
extern float flt_468648[]; // weak | |
extern float flt_46864C[]; // weak | |
extern float flt_468650[]; // weak | |
extern int dword_468674[]; // weak | |
extern int dword_468678[]; // weak | |
extern int dword_46867C[]; // weak | |
extern int dword_468680[]; // weak | |
extern int dword_468684[]; // weak | |
extern int dword_468688[]; // weak | |
extern int dword_46868C[]; // weak | |
extern int dword_468690[]; // weak | |
extern int dword_468694[]; // weak | |
extern int dword_468698[]; // weak | |
extern int dword_46869C[]; // weak | |
extern int dword_4686A0[]; // weak | |
extern int dword_4686A4[]; // weak | |
extern int dword_4686C8[]; // weak | |
extern _UNKNOWN unk_4686CC; // weak | |
extern float flt_4686D0[]; // weak | |
extern float flt_4686D4[]; // weak | |
extern int dword_4686D8[]; // weak | |
extern int dword_4686DC[]; // weak | |
extern int dword_4686E0[]; // weak | |
extern int dword_4686E4[]; // weak | |
extern int dword_4686E8[]; // weak | |
extern int dword_4686EC[]; // weak | |
extern int dword_4686F0[]; // weak | |
extern int dword_4686F4[]; // weak | |
extern int dword_4686F8[]; // weak | |
extern int dword_46871C[]; // weak | |
extern float flt_468720[]; // weak | |
extern float flt_468724[]; // weak | |
extern float flt_468728[]; // weak | |
extern float flt_46872C[]; // weak | |
extern float flt_468730[]; // weak | |
extern float flt_468734[]; // weak | |
extern float flt_468738[]; // weak | |
extern float flt_46873C[]; // weak | |
extern float flt_468740[]; // weak | |
extern float flt_468744[]; // weak | |
extern float flt_468748[]; // weak | |
extern float flt_46874C[]; // weak | |
extern float flt_468750[]; // weak | |
extern float flt_468754[]; // weak | |
extern int dword_468758[]; // weak | |
extern int dword_4687DC[]; // weak | |
extern int dword_4687E0[]; // weak | |
extern int dword_4687E4[]; // weak | |
extern int dword_4687E8[]; // weak | |
extern int dword_4687EC[]; // weak | |
extern int dword_4687F0[]; // weak | |
extern int dword_4687F4[]; // weak | |
extern int dword_4687F8[]; // weak | |
extern int dword_4687FC[]; // weak | |
extern int dword_468800[]; // weak | |
extern int dword_468804[]; // weak | |
extern int dword_468808[]; // weak | |
extern int dword_46880C[]; // weak | |
extern int dword_468810[]; // weak | |
extern int dword_468814[]; // weak | |
extern int dword_468818[]; // weak | |
extern int dword_46881C[]; // weak | |
extern int dword_468820[]; // weak | |
extern int dword_468824[]; // weak | |
extern int dword_468828[]; // weak | |
extern int dword_46882C[]; // weak | |
extern int dword_468830[]; // weak | |
extern int dword_468834[]; // weak | |
extern int dword_468838[]; // weak | |
extern int dword_468840[]; // weak | |
extern _UNKNOWN unk_468844; // weak | |
extern char byte_468853[]; // weak | |
extern int dword_46FF00[]; // weak | |
extern int dword_46FF04[]; // weak | |
extern int dword_46FF08[]; // weak | |
extern int dword_46FF0C[]; // weak | |
extern int dword_46FF10[]; // weak | |
extern int dword_46FF14[]; // weak | |
extern int dword_46FFC0; // weak | |
extern int dword_46FFC4; // weak | |
extern int dword_46FFCC; // weak | |
extern void *dword_46FFD0; // idb | |
extern int dword_46FFD4; // weak | |
extern int dword_46FFD8; // weak | |
extern int dword_46FFDC; // weak | |
extern LPDIRECTDRAW lpDD; // idb | |
extern int dword_46FFE4; // weak | |
extern int dword_46FFE8; // weak | |
extern int dword_46FFEC; // weak | |
extern int dword_46FFF0; // weak | |
extern void *dword_46FFF4; // idb | |
extern int dword_46FFF8; // weak | |
extern int dword_46FFFC; // weak | |
extern void *dword_470000; // idb | |
extern int dword_470004; // weak | |
extern int dword_470008; // weak | |
extern int dword_47000C; // weak | |
extern char byte_470010; // weak | |
extern char byte_470011; // weak | |
extern char byte_470012; // weak | |
extern char byte_470013; // weak | |
extern char byte_470016; // weak | |
extern char byte_470017; // weak | |
extern int dword_470018; // weak | |
extern int (__cdecl *dword_47001C)(_DWORD, _DWORD); // weak | |
extern HANDLE hObject; // idb | |
extern HANDLE dword_470024; // idb | |
extern int dword_470028; // weak | |
extern int dword_47002C; // weak | |
extern int dword_470030; // weak | |
extern int dword_470034; // weak | |
extern int dword_470038; // weak | |
extern int dword_47003C; // weak | |
extern LPDIRECTSOUND dword_470040; // idb | |
extern int dword_470044; // weak | |
extern int dword_470048; // weak | |
extern int (__stdcall *dword_47004C)(_DWORD, _DWORD, _DWORD, _DWORD); // weak | |
extern int dword_47005C; // weak | |
extern int dword_470064; // weak | |
extern int dword_470068; // weak | |
extern UINT uNumber; // idb | |
extern int dword_470080[]; // weak | |
extern _UNKNOWN unk_47028C; // weak | |
extern _UNKNOWN unk_470290; // weak | |
extern _UNKNOWN unk_4702AC; // weak | |
extern int dword_4711C8; // weak | |
extern int dword_4711CC; // weak | |
extern HWND hWnd; // idb | |
extern _UNKNOWN unk_4711E0; // weak | |
extern int dword_4716E0; // weak | |
extern _DWORD dword_4716E4; // idb | |
extern int dword_471700[]; // weak | |
extern int dword_471704; // weak | |
extern int dword_471708; // weak | |
extern int dword_47170C; // weak | |
extern int dword_471710; // weak | |
extern int dword_471714; // weak | |
extern int dword_471718; // weak | |
extern int dword_47171C; // weak | |
extern int dword_471720; // weak | |
extern int dword_471724; // weak | |
extern int dword_471728; // weak | |
extern int dword_47172C; // weak | |
extern int dword_471730; // weak | |
extern int dword_471734; // weak | |
extern int dword_471738; // weak | |
extern int dword_47173C; // weak | |
extern int dword_471740; // weak | |
extern int dword_471744; // weak | |
extern int dword_471748; // weak | |
extern int dword_47174C; // weak | |
extern int dword_471750; // weak | |
extern int dword_471754; // weak | |
extern int dword_471758; // weak | |
extern int dword_47175C; // weak | |
extern int dword_471760; // weak | |
extern int dword_471764; // weak | |
extern int dword_471768; // weak | |
extern int dword_47176C; // weak | |
extern int dword_471770; // weak | |
extern int dword_471774; // weak | |
extern int dword_471778; // weak | |
extern int dword_47177C; // weak | |
extern char byte_471780[]; // weak | |
extern int dword_471880[]; // weak | |
extern int dword_471884; // weak | |
extern int dword_471888; // weak | |
extern int dword_47188C; // weak | |
extern int dword_471890; // weak | |
extern int dword_471894; // weak | |
extern int dword_471898; // weak | |
extern int dword_47189C; // weak | |
extern int dword_4718A0; // weak | |
extern int dword_4718A4; // weak | |
extern int dword_4718A8; // weak | |
extern int dword_4718AC; // weak | |
extern int dword_4718B0; // weak | |
extern int dword_4718B4; // weak | |
extern int dword_4718B8; // weak | |
extern int dword_4718BC; // weak | |
extern int dword_4718C0; // weak | |
extern int dword_4718C4; // weak | |
extern int dword_4718C8; // weak | |
extern int dword_4718CC; // weak | |
extern int dword_4718D0; // weak | |
extern int dword_4718D4; // weak | |
extern int dword_4718D8; // weak | |
extern int dword_4718DC; // weak | |
extern int dword_4718E0; // weak | |
extern int dword_4718E4; // weak | |
extern int dword_4718E8; // weak | |
extern int dword_4718EC; // weak | |
extern int dword_4718F0; // weak | |
extern int dword_4718F4; // weak | |
extern int dword_4718F8; // weak | |
extern int dword_4718FC; // weak | |
extern int dword_471900; // weak | |
extern char byte_471920[]; // weak | |
extern char byte_471921; // weak | |
extern char byte_47192F; // weak | |
extern char byte_471931; // weak | |
extern char byte_471933; // weak | |
extern char byte_47193D; // weak | |
extern char byte_47193E; // weak | |
extern char byte_47193F; // weak | |
extern char byte_471940; // weak | |
extern char byte_471942; // weak | |
extern char byte_47194A; // weak | |
extern char byte_471950; // weak | |
extern char byte_471952; // weak | |
extern char byte_471959; // weak | |
extern char byte_47196A; // weak | |
extern char byte_47196E; // weak | |
extern char byte_4719E8; // weak | |
extern char byte_4719EB; // weak | |
extern char byte_4719ED; // weak | |
extern char byte_4719F0; // weak | |
extern _UNKNOWN unk_471A20; // weak | |
extern _UNKNOWN unk_471A24; // weak | |
extern HINSTANCE hInstance; // idb | |
extern int dword_471F24; // weak | |
extern int dword_471F28; // weak | |
extern int dword_471F40[]; // weak | |
extern int dword_471F44[]; // weak | |
extern float flt_4F1F40; // weak | |
extern float flt_4F1F44; // weak | |
extern float flt_4F1F48; // weak | |
extern int (__cdecl *dword_4F1F4C)(_DWORD, _DWORD, _DWORD); // weak | |
extern int dword_4F1F50; // weak | |
extern int dword_4F1F54; // weak | |
extern float flt_4F1F58; // weak | |
extern int dword_4F1F5C; // weak | |
extern int dword_4F1F60; // weak | |
extern int dword_4F1F80[]; // weak | |
extern int dword_5F1780[]; // weak | |
extern int dword_5F1F80; // weak | |
extern float flt_5F1F90; // weak | |
extern float flt_5F1F94; // weak | |
extern float flt_5F1F98; // weak | |
extern int dword_5F1FA0[]; // weak | |
extern int dword_5F5FA0[]; // weak | |
extern int dword_6F5FA0; // weak | |
extern int dword_6F5FA4; // weak | |
extern _UNKNOWN unk_6F5FC0; // weak | |
extern _UNKNOWN unk_6F5FC4; // weak | |
extern int dword_701FC0; // weak | |
extern _UNKNOWN unk_701FC4; // weak | |
extern int dword_701FE0[]; // weak | |
extern int dword_701FE4[]; // weak | |
extern int dword_701FE8[]; // weak | |
extern int dword_701FF8[]; // weak | |
extern int dword_701FFC[]; // weak | |
extern int dword_702000[]; // weak | |
extern int dword_702004[]; // weak | |
extern int dword_702008[]; // weak | |
extern int dword_70200C[]; // weak | |
extern int dword_702010[]; // weak | |
extern int dword_702014[]; // weak | |
extern _UNKNOWN unk_702018; // weak | |
extern int dword_702760; // weak | |
extern int dword_702764; // weak | |
extern __int64 qword_702768; // weak | |
extern float flt_702770; // weak | |
extern float flt_702774; // weak | |
extern float flt_702778; // weak | |
extern int dword_70277C; // weak | |
extern int dword_702780[]; // weak | |
extern int dword_702784; // weak | |
extern _UNKNOWN unk_7027A0; // weak | |
extern _UNKNOWN unk_7027A4; // weak | |
extern _UNKNOWN unk_7F7F7F; // weak | |
extern _UNKNOWN unk_C08011; // weak | |
extern _UNKNOWN unk_C80000; // weak | |
extern _UNKNOWN unk_CA0000; // weak | |
extern _UNKNOWN unk_CCCCFF; // weak | |
extern _UNKNOWN unk_CCFFCC; // weak | |
extern _UNKNOWN unk_FF0000; // weak | |
extern _UNKNOWN unk_FFFF00; // weak | |
extern _UNKNOWN unk_FFFFFF; // weak | |
extern _UNKNOWN unk_1000000; // weak | |
extern _UNKNOWN unk_1010001; // weak | |
extern _UNKNOWN unk_11D0000; // weak | |
extern _UNKNOWN unk_1380000; // weak | |
extern _UNKNOWN unk_17F0000; // weak | |
extern _UNKNOWN unk_1900000; // weak | |
extern _UNKNOWN unk_2000000; // weak | |
extern int dword_27027C0[]; // weak | |
extern int dword_27027C4[]; // weak | |
extern int dword_27027C8[]; // weak | |
extern _UNKNOWN unk_271A7C4; // weak | |
extern char byte_271A7E0[]; // weak | |
extern char byte_271A7E1[]; // weak | |
extern __int16 word_271A7E2[]; // weak | |
extern int dword_271AFE0; // weak | |
extern int dword_271AFE4; // weak | |
extern int dword_271AFE8; // weak | |
extern _UNKNOWN unk_271AFEC; // weak | |
extern int dword_273A7E0; // weak | |
extern int dword_273A7E8[]; // weak | |
extern int dword_273A7EC; // weak | |
extern int dword_273A800[]; // weak | |
extern int dword_273A804[]; // weak | |
extern int dword_273B808; // weak | |
extern int dword_273B80C; // weak | |
extern int dword_273B810; // weak | |
extern int dword_273B818[]; // weak | |
extern int dword_273B81C; // weak | |
extern int (__cdecl *dword_273B820)(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD); // weak | |
extern _UNKNOWN unk_273B840; // weak | |
extern int dword_273B950; // weak | |
extern int (__cdecl *dword_273B954)(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD); // weak | |
extern int dword_273B958; // weak | |
extern _UNKNOWN unk_273B964; // weak | |
extern _UNKNOWN unk_273C54C; // weak | |
extern float flt_273C554; // weak | |
extern float flt_273C558; // weak | |
extern float flt_273C55C; // weak | |
extern __int64 qword_273C560; // weak | |
extern float flt_273C584; // weak | |
extern float flt_273C5A8; // weak | |
extern int dword_273C5C0[]; // weak | |
extern int dword_273C9C0; // weak | |
extern int dword_273C9C4; // weak | |
extern char byte_273C9C8; // weak | |
extern int dword_273C9CC; // weak | |
extern char byte_273C9D0; // weak | |
extern int dword_273C9D4; // weak | |
extern int dword_273C9D8; // weak | |
extern void *dword_273C9DC; // idb | |
extern float flt_273C9E0; // weak | |
extern int dword_273CA00[]; // weak | |
extern int dword_273CA04; // weak | |
extern int dword_273CA08; // weak | |
extern int dword_273CA0C; // weak | |
extern int dword_273CA10; // weak | |
extern int dword_273CA14; // weak | |
extern int dword_273CA18; // weak | |
extern int dword_273CA1C; // weak | |
extern int dword_273CA20; // weak | |
extern int dword_273CA24; // weak | |
extern int dword_273CA28; // weak | |
extern int dword_273CA2C; // weak | |
extern int dword_273CA30; // weak | |
extern int dword_273CA34; // weak | |
extern int dword_273CA38; // weak | |
extern int dword_273CA3C; // weak | |
extern int dword_273CA40; // weak | |
extern int dword_273CA44; // weak | |
extern int dword_273CA48; // weak | |
extern int dword_273CA4C; // weak | |
extern int dword_273CA50; // weak | |
extern int dword_273CA54; // weak | |
extern int dword_273CA58; // weak | |
extern int dword_273CA5C; // weak | |
extern int dword_273CA60; // weak | |
extern int dword_273CA64; // weak | |
extern int dword_273CA68; // weak | |
extern int dword_273CA6C; // weak | |
extern int dword_273CA70; // weak | |
extern int dword_273CA74; // weak | |
extern void *dword_273CA78; // idb | |
extern int dword_273CA7C; // weak | |
extern int dword_273CA80; // weak | |
extern int dword_273CB60[]; // weak | |
extern int dword_283CB60; // weak | |
extern float flt_283CC40; // weak | |
extern float flt_283CC44; // weak | |
extern float flt_283CC48; // weak | |
extern float flt_283CC4C; // weak | |
extern float flt_283CC50; // weak | |
extern float flt_283CC54; // weak | |
extern float flt_283CC58; // weak | |
extern float flt_283CC5C; // weak | |
extern float flt_283CC60; // weak | |
extern float flt_283CC64; // weak | |
extern float flt_283CC68; // weak | |
extern float flt_283CC6C; // weak | |
extern int dword_283CC90; // weak | |
extern int dword_283CC94; // idb | |
extern _UNKNOWN unk_283CCA0; // weak | |
extern void *dword_283CD10; // idb | |
extern int dword_283CD14; // weak | |
extern int dword_283CD18; // weak | |
extern int dword_283CD1C; // weak | |
extern int dword_283CD20; // weak | |
extern __int64 qword_283CD24; // weak | |
extern int dword_283CD2C; // weak | |
extern int dword_283CD30; // weak | |
extern _UNKNOWN unk_283CD40; // weak | |
extern _UNKNOWN unk_283CD94; // weak | |
extern __int32 dword_283CDB0; // idb | |
extern int dword_283CDC0[]; // weak | |
extern __int16 word_283CEBE; // weak | |
extern char word_283CEC0[]; // idb | |
extern int dword_283CF14; // weak | |
extern void *dword_283CF18; // idb | |
extern char byte_283CF1C[]; // weak | |
extern char byte_283CF1D[]; // weak | |
extern char byte_283CF1E[]; // weak | |
extern int dword_283CF20[]; // weak | |
extern int dword_283CF2C; // weak | |
extern int dword_283D020; // weak | |
extern float flt_283D040[]; // weak | |
extern float flt_283D044[]; // weak | |
extern float flt_283D048[]; // weak | |
extern float flt_283D04C[]; // weak | |
extern float flt_283D050[]; // weak | |
extern float flt_283D054[]; // weak | |
extern float flt_283D058[]; // weak | |
extern float flt_283D05C[]; // weak | |
extern float flt_283D060[]; // weak | |
extern float flt_283D064[]; // weak | |
extern float flt_283D068[]; // weak | |
extern float flt_283D06C[]; // weak | |
extern int dword_283D070[]; // weak | |
extern int dword_283D074[]; // weak | |
extern int dword_283D078[]; // weak | |
extern _UNKNOWN unk_283D07C; // weak | |
extern float flt_283D088[]; // weak | |
extern int dword_283D08C[]; // weak | |
extern int dword_283D090[]; // weak | |
extern float flt_283D094; // weak | |
extern float flt_283D098; // weak | |
extern float flt_283D09C; // weak | |
extern int dword_283D0E0; // weak | |
extern int dword_283D0E4; // weak | |
extern float flt_283D0E8; // weak | |
extern float flt_283D0EC; // weak | |
extern float flt_283D0F0; // weak | |
extern int dword_283D138; // weak | |
extern float flt_283D13C; // weak | |
extern float flt_283D140; // weak | |
extern float flt_283D144; // weak | |
extern int dword_283D18C; // weak | |
extern _UNKNOWN unk_283D194; // weak | |
extern _UNKNOWN unk_283D1BC; // weak | |
extern void *dword_2842440; // idb | |
extern int dword_2842444; // weak | |
extern int dword_2842448; // weak | |
extern int dword_284244C; // weak | |
extern int dword_2842450; // weak | |
extern int dword_2842454; // weak | |
extern int dword_2842458; // weak | |
extern int dword_284245C; // weak | |
extern int dword_2842460; // weak | |
extern int dword_2842464; // weak | |
extern int dword_2842468; // weak | |
extern _UNKNOWN unk_284247E; // weak | |
extern char byte_284247F[]; // weak | |
extern char unk_2842480[]; // idb | |
extern _UNKNOWN unk_2842481; // weak | |
extern _BYTE byte_2842482[2]; // idb | |
extern __int64 qword_2842484; // weak | |
extern __int16 word_284248C; // weak | |
extern char byte_284248E[]; // weak | |
extern _UNKNOWN unk_2842496; // weak | |
extern char byte_28424DF; // weak | |
extern int dword_28425A0; // weak | |
extern void *dword_28425B0; // idb | |
extern int dword_28425B4; // weak | |
extern int dword_28425B8; // weak | |
extern u_long hostlong; // idb | |
extern _UNKNOWN unk_28425C0; // weak | |
extern int dword_28465C0; // weak | |
extern int dword_28465E0[]; // weak | |
extern int dword_28465E4[]; // weak | |
extern int dword_28465E8[]; // weak | |
extern float flt_28465EC[]; // weak | |
extern float flt_28465F0[]; // weak | |
extern float flt_28465F4[]; // weak | |
extern int dword_28465F8[]; // weak | |
extern int dword_28465FC[]; // weak | |
extern float flt_28485E0; // weak | |
extern int dword_28485E4; // weak | |
extern int dword_28485E8; // weak | |
extern int dword_2848600[]; // weak | |
extern int dword_2848700; // weak | |
extern void *dword_2848704; // idb | |
extern int dword_2848708; // weak | |
extern int dword_2848720; // weak | |
extern _UNKNOWN unk_28487F0; // weak | |
extern void *dword_28487FC; // idb | |
extern int dword_2848800; // weak | |
//------------------------------------------------------------------------- | |
// Function declarations | |
#define __thiscall __cdecl // Test compile in C mode | |
BOOL __cdecl sub_401000(); | |
// char __usercall sub_4030F0<al>(__m64 a1<mm4>, __m64 a2<mm5>, int a3, int a4, int a5, int a6, int a7, int a8, int a9, int a10, int a11, int a12, int a13, int a14, int a15, int a16, int a17, int a18, int a19, int a20, int a21, int a22, int a23, int a24, int a25, int a26, int a27, int a28, int a29, int a30, int a31, int a32, int a33, int a34, int a35, int a36, int a37, int a38, int a39, int a40, int a41, int a42, int a43, int a44, int a45, int a46, int a47, int a48, int a49, int a50, int a51, int a52, int a53, int a54, int a55, int a56, int a57, int a58, int a59, int a60, int a61, int a62, int a63); | |
// void __cdecl abort(); | |
// void __cdecl free(void *); | |
// void *__cdecl malloc(size_t); | |
// __time64_t __cdecl _time64(__time64_t *Time); | |
// void __cdecl perror(const char *); | |
// char *__cdecl strncpy(char *, const char *, size_t); | |
// int sprintf(char *, const char *, ...); | |
// int sscanf(const char *, const char *, ...); | |
// char *__cdecl strchr(const char *, int); | |
// __int32 __cdecl atol(const char *); | |
// int __cdecl atoi(const char *); | |
// char *__cdecl fgets(char *, int, FILE *); | |
// FILE *__cdecl fopen(const char *, const char *); | |
// size_t __cdecl fread(void *, size_t, size_t, FILE *); | |
// int __cdecl rand(); | |
// size_t __cdecl fwrite(const void *, size_t, size_t, FILE *); | |
// char *__cdecl strrchr(const char *, int); | |
// __int32 __cdecl ftell(FILE *); | |
// int __cdecl fseek(FILE *, __int32, int); | |
// int __cdecl fclose(FILE *); | |
// __int32 __cdecl _filelength(int); | |
// char *__cdecl strstr(const char *, const char *); | |
// int __cdecl _LN49(UINT uExitCode); idb | |
// int __cdecl feof(FILE *); | |
void *__cdecl sub_40A5F9(void *a1); | |
// int _invalid_parameter_noinfo(void); weak | |
PVOID __cdecl sub_40A7E8(); | |
// int *__cdecl _errno(); | |
// unsigned __int32 *__cdecl __doserrno(); | |
void *__cdecl sub_40AC4F(void *a1); | |
_UNKNOWN *__cdecl sub_40ACF8(); | |
void **__cdecl sub_40ACFE(); | |
// _DWORD __cdecl __lock_fhandle(_DWORD); weak | |
// _DWORD __cdecl _unlock_fhandle(_DWORD); weak | |
// int __cdecl _write_nolock(int, int, DWORD nNumberOfBytesToWrite); idb | |
int __cdecl sub_40B7D3(int, int, DWORD nNumberOfBytesToWrite); // idb | |
// _DWORD __stdcall _LocaleUpdate::_LocaleUpdate(_DWORD); weak | |
void **__cdecl sub_40DC7E(); | |
// void *__cdecl memset(void *, int, size_t); | |
// int _encoded_null(void); weak | |
// _DWORD __cdecl flsall(_DWORD); weak | |
int __cdecl sub_40F48B(); | |
// void *__cdecl memmove(void *, const void *, size_t); | |
// int __cdecl _lseek_nolock(int, LONG lDistanceToMove, DWORD dwMoveMethod); idb | |
int __cdecl sub_40F876(int, LONG lDistanceToMove, DWORD dwMoveMethod); // idb | |
int __cdecl sub_40FCD2(int a1); | |
int __cdecl sub_40FCE1(int a1); | |
int (*__cdecl sub_40FE2A())(void); | |
int (*__cdecl sub_40FE50())(void); | |
void __cdecl sub_410648(); | |
int __thiscall sub_410650(void *this, char a2); | |
int __cdecl sub_410790(int a1, int a2, int a3); | |
// int __cdecl _tsopen_nolock(int, LPCSTR lpFileName, int, int, int); idb | |
int __cdecl sub_41265C(LPCSTR lpFileName, int, int, int, int, int); // idb | |
int __cdecl sub_412720(int, LPCSTR lpFileName, int, int, int); // idb | |
int __cdecl sub_412CC1(); | |
// _DWORD __cdecl __report_gsfailure(char); weak | |
BOOL __cdecl sub_413298(); | |
signed int __cdecl sub_413F41(int a1); | |
// char *__cdecl _itoa(int, char *, int); | |
// char *__cdecl _ltoa(__int32, char *, int); | |
BOOL __cdecl sub_414320(); | |
int __fastcall sub_4143F0(int a1); | |
// FILE *__usercall sub_414530<eax>(const char *a1<eax>, int a2, int a3); | |
void __cdecl sub_4146D0(); | |
int __cdecl sub_414760(); | |
void __fastcall sub_4147E0(unsigned int a1); | |
int __cdecl sub_414A10(); | |
int __cdecl sub_414A70(); | |
int __cdecl sub_414B40(); | |
int __cdecl sub_414BA0(); | |
int __cdecl sub_414C40(); | |
int __cdecl sub_414D60(); | |
BOOL __cdecl sub_414DF0(); | |
void __thiscall sub_414EB0(int this, const char *a2, int a3, int a4); | |
// void __usercall sub_414FD0(int a1<ecx>, int a2<edi>, const char *a3); | |
HRESULT __cdecl sub_415070(); | |
signed int __cdecl sub_4153A0(); | |
signed int __cdecl sub_415520(); | |
signed int __cdecl sub_4156A0(int a1, int a2); | |
int __cdecl sub_415770(); | |
int __cdecl sub_415960(); | |
int __stdcall sub_415A70(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam); // idb | |
// void __usercall sub_416030(const CHAR *a1<eax>); | |
int __stdcall WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd); | |
// int __usercall sub_416490<eax>(signed int a1<eax>, signed int a2); | |
int __fastcall sub_416530(signed int a1); | |
void __cdecl sub_4165B0(); | |
void __cdecl sub_416730(int a1); | |
// int __usercall sub_4167E0<eax>(int result<eax>, int a2<esi>, int a3); | |
void __fastcall sub_4168D0(int a1, int a2); | |
unsigned int __cdecl sub_4169D0(int a1, int *a2, int *a3, int *a4, int *a5, int a6, int a7); | |
// int __usercall sub_416D40<eax>(__int16 a1<ax>, __int16 a2<cx>, int a3<esi>); | |
// int __usercall sub_416DE0<eax>(int a1<eax>, signed int a2<ecx>, int a3); | |
// int __usercall sub_416E30<eax>(__int16 a1<ax>, signed int a2<ecx>, __int16 a3); | |
// signed int __usercall sub_416EA0<eax>(signed int result<eax>, int a2<ecx>, int a3); | |
// signed int __usercall sub_416F00<eax>(__int16 a1<ax>, signed int a2<edx>, __int16 a3); | |
int __cdecl sub_417000(float, float, float); // idb | |
char *__cdecl sub_4170E0(signed int a1); | |
int sub_417230(); // weak | |
int sub_4172E0(); // weak | |
// int __usercall sub_4173C0<eax>(int a1<eax>, signed int a2, signed int a3, signed int a4); | |
// int __usercall sub_417530<eax>(int a1<eax>, int a2<ecx>); | |
// signed int __usercall sub_417640<eax>(int a1<eax>, int a2<ecx>); | |
signed int __cdecl sub_417EE0(int a1); | |
void __cdecl sub_418270(); | |
// int __usercall sub_4183A0<eax>(int a1<edi>); | |
signed int __cdecl sub_418540(); | |
// signed int __usercall sub_4186C0<eax>(signed int a1<eax>, int a2<ecx>, __int16 a3); | |
// int __usercall sub_418730<eax>(int a1<eax>, int a2<ecx>, int a3, int a4, int a5); | |
int __cdecl sub_418D10(float, float, float, float, float, float); // idb | |
// signed int __usercall sub_419180<eax>(const char *a1<eax>, int a2<edi>, int a3, int a4, int a5, int a6); | |
void __cdecl sub_419310(); | |
int __cdecl sub_419460(); | |
// signed int __usercall sub_4197D0<eax>(int a1<eax>); | |
char __cdecl sub_419990(signed int a1); | |
int __cdecl sub_419AE0(); | |
// int __usercall sub_419B90<eax>(int a1<edi>, int a2); | |
// void __usercall sub_419C40(int a1<eax>); | |
void __thiscall sub_419D30(int this); | |
// void __usercall sub_419DE0(int a1<eax>); | |
// int __usercall sub_419E40<eax>(int a1<eax>, int a2<ecx>); | |
void __cdecl sub_419E90(); | |
unsigned int __cdecl sub_419F20(); | |
bool __cdecl sub_419FC0(int a1); | |
signed int __thiscall sub_41A070(int _ECX); | |
int __cdecl sub_41A280(int a1, int a2, int a3); | |
int __cdecl sub_41A2B0(int a1, int a2, int a3); | |
int __cdecl sub_41A2E0(int a1, int a2, int a3); | |
int __cdecl sub_41A310(int a1, unsigned int a2); | |
int __cdecl sub_41A330(int a1, int a2); | |
// signed int __usercall sub_41A3E0<eax>(int a1<esi>, __m64 a2<mm5>, int a3); | |
// int __usercall sub_41A570<eax>(int a1<eax>, int a2, int a3, int a4); | |
// signed int __usercall sub_41A6D0<eax>(int _EAX<eax>, int _ECX<ecx>, int _EDI<edi>, int _ESI<esi>); | |
char __cdecl sub_41AB50(); | |
// int __usercall sub_41AB80<eax>(int a1<eax>, int a2<ecx>, int a3, int a4, int a5, int a6, int a7); | |
void __cdecl sub_41AF60(unsigned int a1, __m64 a2, int a3, int a4); | |
// unsigned int __usercall sub_41B070<eax>(__m64 a1<mm0>, __m128 a2<xmm0>, __m128 a3<xmm1>, int a4, signed int a5, int a6, int a7, int a8); | |
unsigned int __cdecl sub_41B4E0(unsigned int a1, __m64 a2, unsigned int a3, unsigned int a4, int a5); | |
// unsigned int __usercall sub_41B5D0<eax>(__m64 a1<mm0>, __m128 a2<xmm0>, __m128 a3<xmm1>, int a4, signed int a5, int a6, unsigned int a7, unsigned int a8, int a9); | |
// void __usercall sub_41B8D0(int a1<ecx>, int a2<edi>, int a3, int a4); | |
// float *__usercall sub_41BA20<eax>(__m128 a1<xmm1>, __m128 a2<xmm7>, int a3, int a4, int a5, int a6, int a7, int a8, int a9, int a10); | |
// int __usercall sub_41BDA0<eax>(int result<eax>, double a2<st0>, __m64 a3<mm5>, __m128 a4<xmm1>, __m128 a5<xmm7>, int a6); | |
void __cdecl sub_41D440(float a1, float a2, signed int a3, float a4, signed int a5); | |
int __cdecl sub_41D7C0(float, float, float, int, int, int, int); // idb | |
// unsigned int __usercall sub_41D960<eax>(int a1<eax>, int a2<ecx>, int a3, int a4, int a5, int a6, int a7, int a8, signed int a9, signed int a10, unsigned int a11); | |
__int16 __cdecl sub_41DC20(); | |
float *__cdecl sub_41DE20(float a4, float a5, float a6); | |
int __cdecl sub_41E090(float, float, float, float); // idb | |
void __cdecl sub_41E530(); | |
int __cdecl sub_41E940(float, float, float, float, int, int); // idb | |
int __cdecl sub_41EAD0(float, float, float, float, int, int); // idb | |
signed int __cdecl sub_41EC70(); | |
// __int16 __usercall sub_41EDC0<ax>(double a1<st0>); | |
// int __usercall sub_420120<eax>(int a1<eax>, int a2); | |
// void *__usercall sub_420290<eax>(const char *a1<eax>); | |
signed int __cdecl sub_420380(); | |
int __cdecl sub_420460(int a1, int a2); | |
int __cdecl sub_4204B0(int a1, int a2); | |
int __cdecl sub_4205C0(); | |
// int __usercall sub_420860<eax>(int a1<edx>, int a2<esi>, int a3, int a4); | |
// void __usercall sub_420970(int a1<ebx>, signed int *a2, int a3); | |
void __thiscall sub_420F50(void *this, int a2, int a3, int a4, signed int a5); | |
int __cdecl sub_421030(); | |
int __cdecl sub_421120(int a1, int a2); | |
signed int __cdecl sub_421180(int a1, int a2, int a3, int a4, int a5); | |
// void __usercall sub_422060(int a1<eax>, void **a2, int a3, int a4); | |
int __thiscall sub_422100(void *this, float a2); | |
// int __usercall sub_4221F0<eax>(int a1<eax>, float a2, float a3, float a4); | |
// signed int __usercall sub_422360<eax>(int a1<edi>, int a2<esi>); | |
// signed int __usercall sub_4224D0<eax>(const char *a1<edi>); | |
int __cdecl sub_422650(); | |
signed int __cdecl sub_4226D0(); | |
int __cdecl sub_422760(); | |
char *__cdecl sub_4227E0(); | |
// void __usercall sub_422B10(int a1<esi>); | |
// signed int __usercall sub_423250<eax>(int a1<esi>); | |
// int __usercall sub_423410<eax>(char *a1<eax>, int a2); | |
void __cdecl sub_4234D0(); | |
int __cdecl sub_423750(int a1); | |
float *__cdecl sub_4237C0(int a1, float a2, int a3, int a4); | |
// void __usercall sub_4239F0(int a1<edi>); | |
signed int __cdecl sub_423BC0(); | |
int loc_423D77(); // weak | |
int loc_423E95(); // weak | |
int __thiscall sub_423F60(int this, int a2, int a3); | |
int __fastcall sub_424060(int a1); | |
int loc_424813(); // weak | |
int loc_424ADE(); // weak | |
int loc_424D7F(); // weak | |
int loc_42522E(); // weak | |
void __cdecl sub_425C10(); | |
// void __usercall sub_425D00(__m64 a1<mm5>, __m128 a2<xmm1>, __m128 a3<xmm7>); | |
int loc_426E28(); // weak | |
int loc_4278F0(); // weak | |
int loc_4279E4(); // weak | |
int loc_427AD1(); // weak | |
int loc_427B83(); // weak | |
int loc_4294C7(); // weak | |
int loc_42954C(); // weak | |
int __cdecl sub_42A860(); | |
int __cdecl sub_42AE10(); | |
signed int __cdecl sub_42B1E0(const char **a1); | |
// signed int __usercall sub_42B860<eax>(unsigned int a1<ecx>, SOCKET a2<edi>, int a3<esi>); | |
// DWORD __usercall sub_42B920<eax>(int a1<esi>, SOCKET s, LPWSABUF lpBuffers); | |
// DWORD __usercall sub_42B9C0<eax>(int a1<eax>, SOCKET s, LPWSABUF lpBuffers, DWORD dwBufferCount); | |
int __fastcall sub_42BA70(SOCKET s, int optval, int optvala); | |
// unsigned __int32 __usercall sub_42BB50<eax>(int a1<edi>, const char *a2<esi>); | |
// int __usercall sub_42BC30<eax>(int a1<edi>, int a2<esi>, int a3); | |
// signed int __usercall sub_42BCD0<eax>(int a1<edx>, int a2<ebp>, int a3); | |
unsigned int __cdecl sub_42C020(int a1, u_long hostlong); | |
int __cdecl sub_42C290(int a1, int a2); | |
int __thiscall sub_42C400(unsigned __int16 this, int a2, unsigned __int8 a3); | |
void __cdecl sub_42C550(int a1); | |
// int __usercall sub_42C5D0<eax>(int result<eax>, int a2<ecx>, int a3); | |
// signed int __usercall sub_42C630<eax>(int a1<edi>, int a2<esi>, int a3, int a4); | |
int __cdecl sub_42C7A0(int a1, int a2); | |
int __cdecl loc_42CB15(int, int); // weak | |
// signed int __usercall sub_42CB60<eax>(int a1<eax>, int a2, int a3, size_t a4); | |
// signed int __usercall sub_42CDC0<eax>(int a1<eax>, int a2<esi>, int a3, int a4); | |
// signed int __usercall sub_42CE40<eax>(int a1<eax>, int a2<edi>, int a3, int a4); | |
// signed int __usercall sub_42CF70<eax>(int a1<eax>, int a2<esi>, int a3, int a4); | |
// int __usercall sub_42CFF0<eax>(int a1<eax>, int a2<edi>, int a3); | |
// int __usercall sub_42D090<eax>(int result<eax>, int a2<ecx>, int a3<esi>); | |
signed int __fastcall sub_42D100(int a1, int a2, int a3); | |
signed int __cdecl sub_42D250(int a1, int a2, int a3); | |
_DWORD __cdecl sub_42D380(_DWORD, _DWORD, _DWORD); // weak | |
int __cdecl loc_42D4B8(int, int, int); // weak | |
// int __usercall sub_42D760<eax>(int a1<esi>); | |
// signed int __usercall sub_42D780<eax>(int a1<edi>, int a2, int a3, int a4); | |
signed int __cdecl sub_42D970(unsigned int a1, int a2); | |
// signed int __usercall sub_42DDB0<eax>(unsigned int a1<edi>, int a2); | |
signed int __thiscall sub_42DE60(int this, unsigned int a2, signed int a3, int i); | |
// signed int __usercall sub_42E000<eax>(int a1<eax>, unsigned int a2<esi>); | |
// int __usercall sub_42E060<eax>(int a1<esi>, int a2); | |
// int __usercall sub_42E0F0<eax>(int a1<edi>, int a2<esi>); | |
// int __usercall sub_42E1C0<eax>(int a1<eax>, int a2, unsigned __int16 a3); | |
// int __usercall sub_42E2C0<eax>(int a1<eax>, int a2<edi>); | |
int __cdecl sub_42E370(int a1, const void *a2, int a3, __int16 a4); | |
int __cdecl loc_42E38D(int, int, int, __int16); // weak | |
void __cdecl sub_42E430(int a1); | |
void __cdecl sub_42E4C0(int a1); | |
signed int __cdecl sub_42E540(int a1); | |
int __cdecl loc_42E6B8(int); // weak | |
int __cdecl sub_42E7A0(int, int, void *, int); // idb | |
int __cdecl loc_42E94B(int, int, void *, int); // weak | |
// unsigned int __usercall sub_42EA80<eax>(int a1<esi>); | |
// unsigned int __usercall sub_42EB80<eax>(int a1<eax>); | |
unsigned int __cdecl sub_42EC70(int a1, u_long hostlong); | |
int __cdecl loc_42ECEB(int, u_long hostlong); // weak | |
int __cdecl sub_42ED80(); | |
int __cdecl sub_42EEC0(const void *a1, size_t a2, int a3); | |
int __cdecl loc_42EEE2(void *, size_t, int); // weak | |
// u_long __usercall sub_42EF50<eax>(int a1<eax>); | |
int __cdecl sub_42F060(int a1); | |
int __cdecl loc_42F383(int); // weak | |
// int __usercall sub_42F410<eax>(int a1<eax>, int a2, u_long hostlong); | |
int __cdecl loc_42F5E6(int, u_long hostlong); // weak | |
int __cdecl sub_42F620(); | |
int __cdecl sub_42F780(int a1); | |
int __cdecl loc_42F7A0(int); // weak | |
__int16 __cdecl sub_42F9B0(int a1); | |
int __cdecl sub_42FA10(int a1, int a2, unsigned int a3, unsigned int a4, int a5); | |
int __cdecl sub_430290(int a1, int a2, unsigned int a3, unsigned int a4, unsigned int a5, int a6); | |
int sub_430920(); // weak | |
// signed int __usercall sub_430960<eax>(int a1<esi>); | |
int loc_430990(); // weak | |
// __int32 __usercall _ftol2_sse<eax>(double<st0>); weak | |
// double __cdecl floor(double); | |
int __cdecl sub_431EC8(); | |
signed int __cdecl sub_431FB0(int a1, int a2, int a3); | |
signed int __cdecl sub_432058(int a1, int a2, int a3); | |
int __cdecl sub_4328FD(); | |
signed int __cdecl sub_433283(int a1, int a2); | |
signed int __cdecl sub_4337D4(int a1, int a2); | |
// _DWORD __cdecl __strgtold12_l(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD); weak | |
// LSTATUS __stdcall RegOpenKeyA(HKEY hKey, LPCSTR lpSubKey, PHKEY phkResult); | |
// HRESULT __stdcall DirectDrawCreate(GUID *lpGUID, LPDIRECTDRAW *lplpDD, IUnknown *pUnkOuter); | |
// int __stdcall DirectInput8Create(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD); weak | |
// HRESULT __stdcall DirectSoundCreate(LPGUID, LPDIRECTSOUND *, LPUNKNOWN); | |
// BOOL __stdcall IsProcessorFeaturePresent(DWORD ProcessorFeature); | |
// HMODULE __stdcall LoadLibraryW(LPCWSTR lpLibFileName); | |
// BOOL __stdcall VirtualProtect(LPVOID lpAddress, SIZE_T dwSize, DWORD flNewProtect, PDWORD lpflOldProtect); | |
// BOOL __stdcall SetCurrentDirectoryA(LPCSTR lpPathName); | |
// DWORD __stdcall GetModuleFileNameA(HMODULE hModule, LPSTR lpFilename, DWORD nSize); | |
// void __stdcall ExitProcess(UINT uExitCode); | |
// BOOL __stdcall QueryPerformanceCounter(LARGE_INTEGER *lpPerformanceCount); | |
// HANDLE __stdcall CreateEventA(LPSECURITY_ATTRIBUTES lpEventAttributes, BOOL bManualReset, BOOL bInitialState, LPCSTR lpName); | |
// BOOL __stdcall QueryPerformanceFrequency(LARGE_INTEGER *lpFrequency); | |
// BOOL __stdcall CloseHandle(HANDLE hObject); | |
// FARPROC __stdcall GetProcAddress(HMODULE hModule, LPCSTR lpProcName); | |
// PVOID __stdcall DecodePointer(PVOID Ptr); | |
// PVOID __stdcall EncodePointer(PVOID Ptr); | |
// ATOM __stdcall RegisterClassA(const WNDCLASSA *lpWndClass); | |
// BOOL __stdcall DestroyWindow(HWND hWnd); | |
// void __stdcall PostQuitMessage(int nExitCode); | |
// BOOL __stdcall UpdateWindow(HWND hWnd); | |
// int __stdcall GetSystemMetrics(int nIndex); | |
// LRESULT __stdcall DispatchMessageA(const MSG *lpMsg); | |
// BOOL __stdcall PostMessageA(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam); | |
// BOOL __stdcall ShowWindow(HWND hWnd, int nCmdShow); | |
// LRESULT __stdcall DefWindowProcA(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam); | |
// BOOL __stdcall PeekMessageA(LPMSG lpMsg, HWND hWnd, UINT wMsgFilterMin, UINT wMsgFilterMax, UINT wRemoveMsg); | |
// HWND __stdcall CreateWindowExA(DWORD dwExStyle, LPCSTR lpClassName, LPCSTR lpWindowName, DWORD dwStyle, int X, int Y, int nWidth, int nHeight, HWND hWndParent, HMENU hMenu, HINSTANCE hInstance, LPVOID lpParam); | |
// BOOL __stdcall UnregisterClassA(LPCSTR lpClassName, HINSTANCE hInstance); | |
// BOOL __stdcall InvalidateRect(HWND hWnd, const RECT *lpRect, BOOL bErase); | |
// int __stdcall MessageBoxA(HWND hWnd, LPCSTR lpText, LPCSTR lpCaption, UINT uType); | |
// BOOL __stdcall TranslateMessage(const MSG *lpMsg); | |
// int wsprintfA(LPSTR, LPCSTR, ...); | |
// HICON __stdcall LoadIconA(HINSTANCE hInstance, LPCSTR lpIconName); | |
// MMRESULT __stdcall timeBeginPeriod(UINT uPeriod); | |
// DWORD __stdcall timeGetTime(); | |
// MMRESULT __stdcall timeEndPeriod(UINT uPeriod); | |
// struct hostent *__stdcall gethostbyname(const char *name); | |
// int __stdcall WSASendTo(SOCKET s, LPWSABUF lpBuffers, DWORD dwBufferCount, LPDWORD lpNumberOfBytesSent, DWORD dwFlags, const struct sockaddr *lpTo, int iTolen, LPWSAOVERLAPPED lpOverlapped, LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine); | |
// u_long __stdcall ntohl(u_long netlong); | |
// u_short __stdcall ntohs(u_short netshort); | |
// u_long __stdcall htonl(u_long hostlong); | |
// u_short __stdcall htons(u_short hostshort); | |
// int __stdcall closesocket(SOCKET s); | |
// int __stdcall _WSAFDIsSet(SOCKET fd, fd_set *); | |
// SOCKET __stdcall socket(int af, int type, int protocol); | |
// int __stdcall WSACleanup(); | |
// int __stdcall setsockopt(SOCKET s, int level, int optname, const char *optval, int optlen); | |
// int __stdcall WSARecvFrom(SOCKET s, LPWSABUF lpBuffers, DWORD dwBufferCount, LPDWORD lpNumberOfBytesRecvd, LPDWORD lpFlags, struct sockaddr *lpFrom, LPINT lpFromlen, LPWSAOVERLAPPED lpOverlapped, LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine); | |
// int __stdcall WSAGetLastError(); | |
// int __stdcall select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, const struct timeval *timeout); | |
// unsigned __int32 __stdcall inet_addr(const char *cp); | |
// int __stdcall WSAStartup(WORD wVersionRequested, LPWSADATA lpWSAData); | |
// int __stdcall connect(SOCKET s, const struct sockaddr *name, int namelen); | |
// int __stdcall ioctlsocket(SOCKET s, __int32 cmd, u_long *argp); | |
// int __stdcall send(SOCKET s, const char *buf, int len, int flags); | |
// int __stdcall recv(SOCKET s, char *buf, int len, int flags); | |
//----- (00401000) -------------------------------------------------------- | |
BOOL __cdecl sub_401000() | |
{ | |
int v1; // [sp+0h] [bp-4h]@1 | |
return VirtualProtect(sub_401000, (char *)dword_408508 - (char *)sub_401000, 0x40u, (PDWORD)&v1); | |
} | |
// 408508: using guessed type int dword_408508[62]; | |
//----- (004030F0) -------------------------------------------------------- | |
char __usercall sub_4030F0<al>(__m64 a1<mm4>, __m64 a2<mm5>, int a3, int a4, int a5, int a6, int a7, int a8, int a9, int a10, int a11, int a12, int a13, int a14, int a15, int a16, int a17, int a18, int a19, int a20, int a21, int a22, int a23, int a24, int a25, int a26, int a27, int a28, int a29, int a30, int a31, int a32, int a33, int a34, int a35, int a36, int a37, int a38, int a39, int a40, int a41, int a42, int a43, int a44, int a45, int a46, int a47, int a48, int a49, int a50, int a51, int a52, int a53, int a54, int a55, int a56, int a57, int a58, int a59, int a60, int a61, int a62, int a63) | |
{ | |
int v74; // edi@1 | |
int v75; // ecx@1 | |
unsigned int v76; // edx@1 | |
__m64 v77; // mm0@1 | |
__m64 v78; // mm1@1 | |
int v79; // ebp@1 | |
unsigned int v80; // ebp@4 | |
__m64 v81; // mm6@4 | |
char *v82; // esi@4 | |
unsigned int v83; // eax@6 | |
unsigned int v84; // ebx@7 | |
int v85; // eax@8 | |
__m64 v86; // mm5@8 | |
__m64 v87; // mm5@8 | |
__m64 v88; // mm3@8 | |
int v89; // eax@9 | |
int v90; // eax@15 | |
unsigned int v91; // ebx@16 | |
int v92; // eax@17 | |
__m64 v93; // mm5@17 | |
__m64 v94; // mm5@17 | |
__m64 v95; // mm3@17 | |
__m64 v96; // mm3@24 | |
__m64 v97; // mm5@26 | |
__m64 v98; // mm5@26 | |
int v99; // eoff@26 | |
__m64 v100; // mm3@29 | |
__m64 v101; // mm5@31 | |
__m64 v102; // mm5@31 | |
int v103; // eoff@31 | |
int v104; // ebx@33 | |
int v105; // esi@36 | |
unsigned int v106; // eax@38 | |
__m64 v107; // mm6@38 | |
int v108; // ebx@42 | |
int v109; // eax@46 | |
bool v110; // zf@46 | |
bool v111; // sf@46 | |
int v112; // eax@46 | |
int v113; // edx@48 | |
__m64 v114; // mm3@48 | |
__int64 v115; // mm7@55 | |
__int64 v116; // mm7@55 | |
int v117; // eax@56 | |
unsigned int v118; // esi@58 | |
int v119; // eax@60 | |
int v120; // eax@64 | |
unsigned int v121; // eax@66 | |
int v122; // eax@69 | |
unsigned int i; // ebx@75 | |
int v124; // esi@79 | |
int v125; // ecx@79 | |
__m64 v126; // mm5@79 | |
int v127; // edi@79 | |
__m64 *v128; // ebx@80 | |
__m64 v129; // mm1@81 | |
int v130; // edx@83 | |
unsigned int v131; // eax@90 | |
__int64 v132; // mm7@91 | |
__int64 v133; // mm7@91 | |
int v135; // [sp-20h] [bp-30h]@34 | |
int v136; // [sp+0h] [bp-10h]@1 | |
dword_403054 = (int)&v136; | |
v74 = a3; | |
v75 = *(&dword_402020 + 2); | |
v76 = *(&dword_402020 + 3); | |
v77 = (__m64)*((_QWORD *)&dword_402020 + 2); | |
v78 = (__m64)*((_QWORD *)&dword_402020 + 3); | |
dword_403050 = (int)&v136; | |
dword_403048 = (int)&unk_273B840; | |
byte_4030E8 = 0; | |
v79 = dword_273A7E0; | |
if ( byte_43D098 > 1 && dword_273A7E0 > dword_43D09C ) | |
v79 = dword_43D09C; | |
dword_40304C = v79; | |
v80 = (unsigned int)(dword_273A7EC - dword_273A7E8[0]) >> 31; | |
v81 = _m_pand(_mm_cvtsi32_si64(dword_273A7E8[v80]), (__m64)qword_403038); | |
dword_273A7E8[v80] += dword_273B818[v80]; | |
v82 = (char *)dword_273B958; | |
if ( a3 == *(_DWORD *)dword_273B958 ) | |
goto LABEL_29; | |
LABEL_24: | |
v96 = _m_por(_mm_cvtsi32_si64(*(_DWORD *)(dword_403048 + 4 * v75)), v81); | |
do | |
{ | |
if ( _mm_cvtsi64_si32(_m_pmaddwd(_m_pshufw(v77, -35), v96)) > 0 ) | |
{ | |
LABEL_29: | |
while ( 1 ) | |
{ | |
v100 = _m_por(_mm_cvtsi32_si64(*(_DWORD *)(dword_403048 + 4 * v76)), v81); | |
while ( _mm_cvtsi64_si32(_m_pmaddwd(_m_pshufw(v78, -35), v100)) > 0 ) | |
{ | |
v78 = _m_psubd(v78, (__m64)qword_273C560); | |
v101 = _m_psubusb(_m_punpcklbw(a2, *(__m64 *)(v74 + 4)), (__m64)qword_43D070); | |
v102 = _m_psrlw(_m_pmulhuw(v101, _m_pshufw(v101, -1)), 7u); | |
a2 = _m_punpckldq(_m_packuswb(v102, v102), v81); | |
v103 = a74; | |
_mm_stream_pi((__m64 *)a74, a2); | |
LOBYTE(v89) = v103 - 8; | |
a74 = v103 - 8; | |
if ( v103 - 8 < (unsigned int)a73 ) | |
goto LABEL_88; | |
} | |
v104 = (int)&v136; | |
LABEL_34: | |
if ( &v135 >= dword_401820 ) | |
{ | |
v107 = _m_pshufw(v81, 78); | |
} | |
else | |
{ | |
a1 = (__m64)*((_QWORD *)&off_43D058 + v80); | |
if ( v80 ) | |
{ | |
v105 = &v82[dword_273B80C] - (char *)dword_4F1F80; | |
v82 = (char *)dword_4F1F80 + (v105 & 0xFFFFF); | |
} | |
else | |
{ | |
v82 = (char *)dword_4F1F80 | |
+ (((_WORD)dword_273B808 + (((_WORD)v82 - (unsigned int)dword_4F1F80) & 0x7FF)) & 0x7FF) | |
+ v82 | |
- (char *)dword_4F1F80 | |
- (((_WORD)v82 - (unsigned int)dword_4F1F80) & 0x7FF); | |
} | |
v80 = (unsigned int)(dword_273A7EC - dword_273A7E8[0]) >> 31; | |
v106 = dword_273A7E8[v80]; | |
v107 = _m_pand(_m_punpckldq(v81, _mm_cvtsi32_si64(v106)), (__m64)qword_403038); | |
if ( v106 > dword_40304C ) | |
{ | |
LOBYTE(v89) = byte_4030E8 + 1; | |
if ( (char)(byte_4030E8 + 1) >= byte_43D098 ) | |
goto LABEL_96; | |
++byte_4030E8; | |
v118 = v82 - (char *)dword_4F1F80; | |
if ( ((dword_273B808 ^ (v118 << 29)) & 0x80000000u) == 0 ) | |
dword_273A7E8[0] += dword_273B818[0]; | |
v119 = 2 * dword_273B818[0]; | |
if ( __OFADD__(dword_273B818[0], dword_273B818[0]) ) | |
{ | |
dword_273A7E8[0] = 2147483647; | |
v119 = 0; | |
} | |
dword_273B818[0] = v119; | |
*(_DWORD *)(v104 + 2056) = v75; | |
if ( ((dword_273B80C ^ (v118 << (byte_4030E8 + 18))) & 0x80000000u) == 0 ) | |
dword_273A7EC += dword_273B81C; | |
v120 = 2 * dword_273B81C; | |
if ( __OFADD__(dword_273B81C, dword_273B81C) ) | |
{ | |
dword_273A7EC = 2147483647; | |
v120 = 0; | |
} | |
dword_273B81C = v120; | |
v82 = (char *)(&off_4030C4)[(unsigned __int8)byte_4030E8] | |
+ 2 * (dword_40307C[(unsigned __int8)byte_4030E8] & (v118 >> 2)) | |
+ (dword_4030A0[(unsigned __int8)byte_4030E8] & (v118 >> 2)); | |
dword_403048 = (int)*(&off_403058 + (unsigned __int8)byte_4030E8); | |
dword_273B80C >>= 1; | |
v121 = (unsigned int)dword_401820; | |
do | |
{ | |
*(_DWORD *)(v121 + 2056) >>= 1; | |
++*(_DWORD *)(v121 + 2060); | |
*(_DWORD *)(v121 + 2060) >>= 1; | |
v121 += 32; | |
} | |
while ( v121 <= dword_403050 ); | |
LOBYTE(v89) = dword_40304C; | |
if ( dword_40304C >= (unsigned int)dword_273A7E0 ) | |
{ | |
LABEL_96: | |
if ( (unsigned int)&v135 <= dword_403050 ) | |
{ | |
if ( dword_468474 ) | |
{ | |
*(_QWORD *)(v104 + 2072) = v78; | |
v124 = dword_468474; | |
v125 = dword_468478; | |
v126 = _mm_cvtsi32_si64(dword_403044); | |
v127 = dword_273B950; | |
do | |
{ | |
v89 = a67; | |
v128 = (__m64 *)a68; | |
if ( a67 <= a68 ) | |
{ | |
v129 = a72; | |
do | |
{ | |
v129 = _m_psubd(v129, (__m64)qword_273C560); | |
do | |
{ | |
v130 = _mm_cvtsi64_si32(_m_pmaddwd(_m_pshufw(v129, -35), _mm_cvtsi32_si64(*(_DWORD *)(v125 + 4 * v127)))) >> 31; | |
v127 += v130; | |
} | |
while ( v130 ); | |
_mm_stream_pi(v128, _m_punpckldq(_mm_cvtsi32_si64(*(_DWORD *)(v124 + 4 * v127)), v126)); | |
--v128; | |
} | |
while ( v89 <= (unsigned int)v128 ); | |
} | |
} | |
while ( (unsigned int)&v136 <= dword_403050 ); | |
} | |
else | |
{ | |
do | |
{ | |
v89 = a67; | |
for ( i = a68; v89 <= i; v89 += 8 ) | |
_mm_stream_pi((__m64 *)v89, *(__m64 *)byte_403040); | |
} | |
while ( (unsigned int)&v136 <= dword_403050 ); | |
} | |
} | |
goto LABEL_86; | |
} | |
v122 = 2 * dword_40304C; | |
if ( __OFADD__(dword_40304C, dword_40304C) || v122 >= dword_273A7E0 ) | |
v122 = dword_273A7E0; | |
dword_40304C = v122; | |
v75 = *(_DWORD *)(v104 + 2056) >> 1; | |
v76 = (v76 + 1) >> 1; | |
v80 = (unsigned int)(dword_273A7EC - dword_273A7E8[0]) >> 31; | |
dword_273A7E8[v80] += dword_273B818[v80]; | |
v74 = *(_DWORD *)v82; | |
} | |
else | |
{ | |
dword_273A7E8[v80] = dword_273B818[v80] + v106; | |
v74 = *(_DWORD *)v82; | |
} | |
} | |
if ( (int *)v104 != &v135 ) | |
{ | |
v108 = v104 + 2048; | |
*(_DWORD *)(v108 + 8) = v75; | |
*(_DWORD *)(v108 + 12) = v76; | |
*(_QWORD *)(v108 + 16) = v77; | |
*(_QWORD *)(v108 + 24) = v78; | |
v75 = a69; | |
v76 = a70; | |
v77 = a71; | |
v78 = a72; | |
} | |
if ( *(_BYTE *)v74 ) | |
{ | |
while ( 1 ) | |
{ | |
v109 = _mm_cvtsi64_si32(_m_pmaddwd(_m_pshufw(v77, -35), _m_por(_mm_cvtsi32_si64(*(_DWORD *)(dword_403048 + 4 * *(_BYTE *)(v74 + 2) + 4)), v107))); | |
v110 = v109 == 0; | |
v111 = v109 < 0; | |
v112 = *(_BYTE *)v74; | |
if ( v111 | v110 ) | |
break; | |
v74 += 4 * v112; | |
if ( !*(_BYTE *)v74 ) | |
goto LABEL_6; | |
} | |
if ( _mm_cvtsi64_si32(_m_pmaddwd(_m_pshufw(v78, -35), _m_por(_mm_cvtsi32_si64(*(_DWORD *)(dword_403048 | |
+ 4 * *(_BYTE *)(v74 + 4 * v112 + 3))), v107))) > 0 ) | |
{ | |
a69 = v75; | |
a70 = v76; | |
a71 = v77; | |
a72 = v78; | |
v113 = a68; | |
v114 = _m_por(_mm_cvtsi32_si64(*(_DWORD *)(dword_403048 + 4 * *(_BYTE *)(v74 + 2) + 4)), v107); | |
while ( 1 ) | |
{ | |
a2 = _m_psubd(v78, _m_pslld((__m64)qword_273C560, 4u)); | |
if ( _mm_cvtsi64_si32(_m_pmaddwd(_m_pshufw(a2, -35), v114)) <= 0 ) | |
break; | |
v78 = a2; | |
v113 -= 128; | |
} | |
while ( _mm_cvtsi64_si32(_m_pmaddwd(_m_pshufw(v78, -35), v114)) > 0 ) | |
{ | |
v113 -= 8; | |
v78 = _m_psubd(v78, (__m64)qword_273C560); | |
} | |
v89 = dword_403050 + 32; | |
if ( dword_403050 + 32 > (unsigned int)&dword_402020 ) | |
goto LABEL_86; | |
for ( dword_403050 += 32; v89 > (unsigned int)&v135; v89 -= 32 ) | |
{ | |
v115 = *(_QWORD *)(v89 + 2032); | |
*(_QWORD *)(v89 + 2072) = *(_QWORD *)(v89 + 2040); | |
*(_QWORD *)(v89 + 2064) = v115; | |
a2 = *(__m64 *)(v89 + 2024); | |
v116 = *(_QWORD *)(v89 + 2016); | |
*(_QWORD *)(v89 + 2056) = a2; | |
*(_QWORD *)(v89 + 2048) = v116; | |
} | |
v117 = *(_BYTE *)(v74 + 4 * *(_BYTE *)v74 + 3); | |
a74 = v113; | |
a67 = v113 + 8; | |
v76 = v117; | |
a69 = v117; | |
a71 = _m_paddd(v78, (__m64)qword_273C560); | |
} | |
} | |
LABEL_6: | |
v83 = *(_BYTE *)(v74 + 1); | |
if ( (signed int)v83 < (signed int)v76 ) | |
{ | |
v84 = a74; | |
while ( 2 ) | |
{ | |
v85 = v76-- - v83; | |
v86 = _m_psubusb(_m_punpcklbw(a2, *(__m64 *)(v74 + 4 * v85)), a1); | |
v87 = _m_psrlw(_m_pmulhuw(v86, _m_pshufw(v86, -1)), 7u); | |
a2 = _m_punpckldq(_m_packuswb(v87, v87), v107); | |
v88 = _m_por(_mm_cvtsi32_si64(*(_DWORD *)(dword_403048 + 4 * v76)), v107); | |
while ( 1 ) | |
{ | |
v89 = _mm_cvtsi64_si32(_m_pmaddwd(_m_pshufw(v78, -35), v88)); | |
if ( v89 <= 0 ) | |
break; | |
v78 = _m_psubd(v78, (__m64)qword_273C560); | |
_mm_stream_pi((__m64 *)v84, a2); | |
v84 -= 8; | |
if ( v84 < a73 ) | |
{ | |
LABEL_87: | |
v81 = _m_pshufw(v107, 78); | |
goto LABEL_88; | |
} | |
} | |
v83 = *(_BYTE *)(v74 + 1); | |
if ( v83 != v76 ) | |
continue; | |
break; | |
} | |
a74 = v84; | |
} | |
v76 = v83; | |
if ( v74 > *(_DWORD *)v82 ) | |
break; | |
v81 = _m_pshufw(v107, 78); | |
} | |
v90 = *(_BYTE *)(v74 + 3); | |
if ( v90 > v75 ) | |
{ | |
v91 = a73; | |
do | |
{ | |
v92 = v75++ - v90; | |
v93 = _m_psubusb(_m_punpcklbw(a2, *(__m64 *)(v74 + 4 * v92)), a1); | |
v94 = _m_psrlw(_m_pmulhuw(v93, _m_pshufw(v93, -1)), 7u); | |
a2 = _m_punpckldq(_m_packuswb(v94, v94), v107); | |
v95 = _m_por(_mm_cvtsi32_si64(*(_DWORD *)(dword_403048 + 4 * v75)), v107); | |
while ( 1 ) | |
{ | |
v89 = _mm_cvtsi64_si32(_m_pmaddwd(_m_pshufw(v77, -35), v95)); | |
if ( v89 > 0 ) | |
break; | |
v77 = _m_paddd(v77, (__m64)qword_273C560); | |
_mm_stream_pi((__m64 *)v91, a2); | |
v91 += 8; | |
if ( v91 > a74 ) | |
goto LABEL_87; | |
} | |
v90 = *(_BYTE *)(v74 + 3); | |
} | |
while ( v90 != v75 ); | |
a73 = v91; | |
} | |
v75 = v90; | |
v81 = _m_pshufw(v107, 78); | |
goto LABEL_24; | |
} | |
v77 = _m_paddd(v77, (__m64)qword_273C560); | |
v97 = _m_psubusb(_m_punpcklbw(a2, *(__m64 *)(v74 - 4)), (__m64)qword_43D068); | |
v98 = _m_psrlw(_m_pmulhuw(v97, _m_pshufw(v97, -1)), 7u); | |
a2 = _m_punpckldq(_m_packuswb(v98, v98), v81); | |
v99 = a73; | |
_mm_stream_pi((__m64 *)a73, a2); | |
LOBYTE(v89) = v99 + 8; | |
a73 = v99 + 8; | |
} | |
while ( v99 + 8 <= (unsigned int)a74 ); | |
LABEL_88: | |
if ( dword_403050 - 32 >= (unsigned int)dword_401820 ) | |
{ | |
dword_403050 -= 32; | |
v104 = dword_403050; | |
if ( (unsigned int)&v136 < dword_403050 ) | |
{ | |
v131 = (unsigned int)&v136; | |
do | |
{ | |
v132 = *(_QWORD *)(v131 + 2088); | |
*(_QWORD *)(v131 + 2048) = *(_QWORD *)(v131 + 2080); | |
*(_QWORD *)(v131 + 2056) = v132; | |
a2 = *(__m64 *)(v131 + 2096); | |
v133 = *(_QWORD *)(v131 + 2104); | |
*(_QWORD *)(v131 + 2064) = a2; | |
*(_QWORD *)(v131 + 2072) = v133; | |
v131 += 32; | |
} | |
while ( v131 < dword_403050 ); | |
} | |
goto LABEL_34; | |
} | |
LABEL_86: | |
_m_femms(); | |
return v89; | |
} | |
// 4030F0: too many input arguments, some ignored | |
// 401820: using guessed type int dword_401820[508]; | |
// 402020: using guessed type int dword_402020; | |
// 403038: using guessed type __int64 qword_403038; | |
// 403044: using guessed type int dword_403044; | |
// 403048: using guessed type int dword_403048; | |
// 40304C: using guessed type int dword_40304C; | |
// 403050: using guessed type int dword_403050; | |
// 403054: using guessed type int dword_403054; | |
// 403058: using guessed type void *off_403058; | |
// 40307C: using guessed type int dword_40307C[]; | |
// 4030A0: using guessed type int dword_4030A0[]; | |
// 4030C4: using guessed type int *off_4030C4; | |
// 4030E8: using guessed type char byte_4030E8; | |
// 43D058: using guessed type void *off_43D058; | |
// 43D068: using guessed type __int64 qword_43D068; | |
// 43D070: using guessed type __int64 qword_43D070; | |
// 43D098: using guessed type char byte_43D098; | |
// 43D09C: using guessed type int dword_43D09C; | |
// 468474: using guessed type int dword_468474; | |
// 468478: using guessed type int dword_468478; | |
// 4F1F80: using guessed type int dword_4F1F80[]; | |
// 273A7E0: using guessed type int dword_273A7E0; | |
// 273A7E8: using guessed type int dword_273A7E8[]; | |
// 273A7EC: using guessed type int dword_273A7EC; | |
// 273B808: using guessed type int dword_273B808; | |
// 273B80C: using guessed type int dword_273B80C; | |
// 273B818: using guessed type int dword_273B818[]; | |
// 273B81C: using guessed type int dword_273B81C; | |
// 273B950: using guessed type int dword_273B950; | |
// 273B958: using guessed type int dword_273B958; | |
// 273C560: using guessed type __int64 qword_273C560; | |
//----- (0040A5F9) -------------------------------------------------------- | |
void *__cdecl sub_40A5F9(void *a1) | |
{ | |
void *result; // eax@1 | |
result = a1; | |
dword_43D740 = a1; | |
return result; | |
} | |
//----- (0040A7E8) -------------------------------------------------------- | |
PVOID __cdecl sub_40A7E8() | |
{ | |
return DecodePointer(dword_43D74C); | |
} | |
//----- (0040AC4F) -------------------------------------------------------- | |
void *__cdecl sub_40AC4F(void *a1) | |
{ | |
void *result; // eax@1 | |
result = a1; | |
dword_43DD88 = a1; | |
return result; | |
} | |
//----- (0040ACF8) -------------------------------------------------------- | |
_UNKNOWN *__cdecl sub_40ACF8() | |
{ | |
return &unk_43C2B0; | |
} | |
//----- (0040ACFE) -------------------------------------------------------- | |
void **__cdecl sub_40ACFE() | |
{ | |
return &off_43C200; | |
} | |
// 43C200: using guessed type void *off_43C200; | |
//----- (0040B7D3) -------------------------------------------------------- | |
signed int __cdecl sub_40B7D3(int a1, int a2, DWORD nNumberOfBytesToWrite) | |
{ | |
int *v4; // edi@7 | |
int v5; // esi@7 | |
if ( a1 == -2 ) | |
{ | |
*__doserrno() = 0; | |
*_errno() = 9; | |
return -1; | |
} | |
if ( a1 < 0 || a1 >= uNumber || (v4 = &dword_470080[a1 >> 5], v5 = (a1 & 0x1F) << 6, !(*(_BYTE *)(*v4 + v5 + 4) & 1)) ) | |
{ | |
*__doserrno() = 0; | |
*_errno() = 9; | |
_invalid_parameter_noinfo(); | |
return -1; | |
} | |
__lock_fhandle(a1); | |
if ( *(_BYTE *)(*v4 + v5 + 4) & 1 ) | |
{ | |
_write_nolock(a1, a2, nNumberOfBytesToWrite); | |
} | |
else | |
{ | |
*_errno() = 9; | |
*__doserrno() = 0; | |
} | |
return _unlock_fhandle(a1); | |
} | |
// 40A783: using guessed type int _invalid_parameter_noinfo(void); | |
// 40AE74: using guessed type _DWORD __cdecl __lock_fhandle(_DWORD); | |
// 40AF13: using guessed type _DWORD __cdecl _unlock_fhandle(_DWORD); | |
// 470080: using guessed type int dword_470080[]; | |
//----- (0040DC7E) -------------------------------------------------------- | |
void **__cdecl sub_40DC7E() | |
{ | |
return &off_43C2C8; | |
} | |
// 43C2C8: using guessed type void *off_43C2C8; | |
//----- (0040F48B) -------------------------------------------------------- | |
int __cdecl sub_40F48B() | |
{ | |
return flsall(1); | |
} | |
// 40F3B1: using guessed type _DWORD __cdecl flsall(_DWORD); | |
//----- (0040F876) -------------------------------------------------------- | |
signed int __cdecl sub_40F876(int a1, LONG lDistanceToMove, DWORD dwMoveMethod) | |
{ | |
int *v4; // edi@7 | |
int v5; // esi@7 | |
if ( a1 == -2 ) | |
{ | |
*__doserrno() = 0; | |
*_errno() = 9; | |
return -1; | |
} | |
if ( a1 < 0 || a1 >= uNumber || (v4 = &dword_470080[a1 >> 5], v5 = (a1 & 0x1F) << 6, !(*(_BYTE *)(*v4 + v5 + 4) & 1)) ) | |
{ | |
*__doserrno() = 0; | |
*_errno() = 9; | |
_invalid_parameter_noinfo(); | |
return -1; | |
} | |
__lock_fhandle(a1); | |
if ( *(_BYTE *)(*v4 + v5 + 4) & 1 ) | |
{ | |
_lseek_nolock(a1, lDistanceToMove, dwMoveMethod); | |
} | |
else | |
{ | |
*_errno() = 9; | |
*__doserrno() = 0; | |
} | |
return _unlock_fhandle(a1); | |
} | |
// 40A783: using guessed type int _invalid_parameter_noinfo(void); | |
// 40AE74: using guessed type _DWORD __cdecl __lock_fhandle(_DWORD); | |
// 40AF13: using guessed type _DWORD __cdecl _unlock_fhandle(_DWORD); | |
// 470080: using guessed type int dword_470080[]; | |
//----- (0040FCD2) -------------------------------------------------------- | |
int __cdecl sub_40FCD2(int a1) | |
{ | |
int result; // eax@1 | |
result = a1; | |
dword_43DEFC = a1; | |
return result; | |
} | |
// 43DEFC: using guessed type int dword_43DEFC; | |
//----- (0040FCE1) -------------------------------------------------------- | |
int __cdecl sub_40FCE1(int a1) | |
{ | |
int result; // eax@1 | |
result = a1; | |
dword_43DF00 = a1; | |
return result; | |
} | |
// 43DF00: using guessed type int dword_43DF00; | |
//----- (0040FE2A) -------------------------------------------------------- | |
int (*__cdecl sub_40FE2A())(void) | |
{ | |
int (*result)(void); // eax@1 | |
unsigned int v1; // edi@1 | |
result = (int (*)(void))&unk_439A34; | |
v1 = (unsigned int)&unk_439A34; | |
if ( &unk_439A34 < &unk_439A34 ) | |
{ | |
do | |
{ | |
result = *(int (**)(void))v1; | |
if ( *(_DWORD *)v1 ) | |
result = (int (*)(void))result(); | |
v1 += 4; | |
} | |
while ( v1 < (unsigned int)&unk_439A34 ); | |
} | |
return result; | |
} | |
//----- (0040FE50) -------------------------------------------------------- | |
int (*__cdecl sub_40FE50())(void) | |
{ | |
int (*result)(void); // eax@1 | |
unsigned int v1; // edi@1 | |
result = (int (*)(void))&unk_439A3C; | |
v1 = (unsigned int)&unk_439A3C; | |
if ( &unk_439A3C < &unk_439A3C ) | |
{ | |
do | |
{ | |
result = *(int (**)(void))v1; | |
if ( *(_DWORD *)v1 ) | |
result = (int (*)(void))result(); | |
v1 += 4; | |
} | |
while ( v1 < (unsigned int)&unk_439A3C ); | |
} | |
return result; | |
} | |
//----- (00410648) -------------------------------------------------------- | |
void __cdecl sub_410648() | |
{ | |
dword_470068 = 0; | |
} | |
// 470068: using guessed type int dword_470068; | |
//----- (00410650) -------------------------------------------------------- | |
int __thiscall sub_410650(void *this, char a2) | |
{ | |
if ( this == (void *)dword_43C588 ) | |
__asm { rep retn } | |
return __report_gsfailure(a2); | |
} | |
// 412FD6: using guessed type _DWORD __cdecl __report_gsfailure(char); | |
// 43C588: using guessed type int dword_43C588; | |
//----- (00410790) -------------------------------------------------------- | |
int __cdecl sub_410790(int a1, int a2, int a3) | |
{ | |
HMODULE v3; // eax@2 | |
HMODULE v4; // ebx@2 | |
FARPROC v5; // eax@3 | |
FARPROC v6; // eax@4 | |
FARPROC v7; // eax@4 | |
FARPROC v8; // eax@4 | |
FARPROC v9; // eax@5 | |
int (*v10)(void); // edi@8 | |
PVOID v11; // eax@8 | |
PVOID v12; // ebx@8 | |
int v13; // eax@10 | |
int (*v14)(void); // eax@15 | |
PVOID v15; // eax@18 | |
PVOID v16; // eax@20 | |
char v18; // [sp+Ch] [bp-24h]@11 | |
int v19; // [sp+10h] [bp-20h]@1 | |
int v20; // [sp+14h] [bp-1Ch]@1 | |
void *v21; // [sp+18h] [bp-18h]@1 | |
int v22; // [sp+1Ch] [bp-14h]@1 | |
char v23; // [sp+20h] [bp-10h]@11 | |
char v24; // [sp+28h] [bp-8h]@12 | |
unsigned int v25; // [sp+2Ch] [bp-4h]@1 | |
int v26; // [sp+30h] [bp+0h]@1 | |
v25 = (unsigned int)&v26 ^ dword_43C588; | |
v19 = a1; | |
v20 = a2; | |
v22 = 0; | |
v21 = (void *)_encoded_null(); | |
if ( !dword_43E014 ) | |
{ | |
v3 = LoadLibraryW(L"USER32.DLL"); | |
v4 = v3; | |
if ( !v3 || (v5 = GetProcAddress(v3, "MessageBoxW")) == 0 ) | |
return 0; | |
dword_43E014 = EncodePointer(v5); | |
v6 = GetProcAddress(v4, "GetActiveWindow"); | |
dword_43E018 = EncodePointer(v6); | |
v7 = GetProcAddress(v4, "GetLastActivePopup"); | |
dword_43E01C = EncodePointer(v7); | |
v8 = GetProcAddress(v4, "GetUserObjectInformationW"); | |
dword_43E024 = EncodePointer(v8); | |
if ( dword_43E024 ) | |
{ | |
v9 = GetProcAddress(v4, "GetProcessWindowStation"); | |
dword_43E020 = EncodePointer(v9); | |
} | |
} | |
if ( dword_43E020 == v21 | |
|| dword_43E024 == v21 | |
|| (v10 = (int (*)(void))DecodePointer(dword_43E020), v11 = DecodePointer(dword_43E024), v12 = v11, !v10) | |
|| !v11 | |
|| (v13 = v10()) != 0 | |
&& ((int (__stdcall *)(int, signed int, char *, signed int, char *))v12)(v13, 1, &v23, 12, &v18) | |
&& v24 & 1 ) | |
{ | |
if ( dword_43E018 != v21 ) | |
{ | |
v14 = (int (*)(void))DecodePointer(dword_43E018); | |
if ( v14 ) | |
{ | |
v22 = v14(); | |
if ( v22 ) | |
{ | |
if ( dword_43E01C != v21 ) | |
{ | |
v15 = DecodePointer(dword_43E01C); | |
if ( v15 ) | |
v22 = ((int (__stdcall *)(int))v15)(v22); | |
} | |
} | |
} | |
} | |
} | |
else | |
{ | |
a3 |= 0x200000u; | |
} | |
v16 = DecodePointer(dword_43E014); | |
if ( v16 ) | |
return ((int (__stdcall *)(int, int, int, int))v16)(v22, v19, v20, a3); | |
return 0; | |
} | |
// 40EE8A: using guessed type int _encoded_null(void); | |
// 43C588: using guessed type int dword_43C588; | |
//----- (0041265C) -------------------------------------------------------- | |
int __cdecl sub_41265C(LPCSTR lpFileName, int a2, int a3, int a4, int a5, int a6) | |
{ | |
int result; // eax@2 | |
int v7; // eax@8 | |
int v8; // [sp+18h] [bp-1Ch]@1 | |
CPPEH_RECORD ms_exc; // [sp+1Ch] [bp-18h]@6 | |
v8 = 0; | |
if ( a5 == 0 || (*(_DWORD *)a5 = -1, lpFileName == 0) || a6 && a4 & 0xFFFFFE7F ) | |
{ | |
*_errno() = 22; | |
_invalid_parameter_noinfo(); | |
result = 22; | |
} | |
else | |
{ | |
ms_exc.disabled = 0; | |
result = _tsopen_nolock((int)&v8, lpFileName, a2, a3, a4); | |
ms_exc.disabled = -2; | |
if ( v8 ) | |
{ | |
if ( result ) | |
{ | |
v7 = dword_470080[*(_DWORD *)a5 >> 5] + ((*(_DWORD *)a5 & 0x1F) << 6) + 4; | |
*(_BYTE *)v7 &= 0xFEu; | |
} | |
result = _unlock_fhandle(*(_DWORD *)a5); | |
} | |
} | |
return result; | |
} | |
// 40A783: using guessed type int _invalid_parameter_noinfo(void); | |
// 40AF13: using guessed type _DWORD __cdecl _unlock_fhandle(_DWORD); | |
// 470080: using guessed type int dword_470080[]; | |
//----- (00412720) -------------------------------------------------------- | |
int __cdecl sub_412720(int a1, LPCSTR lpFileName, int a3, int a4, int a5) | |
{ | |
return sub_41265C(lpFileName, a3, a4, a5, a1, 1); | |
} | |
//----- (00412CC1) -------------------------------------------------------- | |
int __cdecl sub_412CC1() | |
{ | |
dword_470064 = IsProcessorFeaturePresent(0xAu); | |
return 0; | |
} | |
// 470064: using guessed type int dword_470064; | |
//----- (00413298) -------------------------------------------------------- | |
BOOL __cdecl sub_413298() | |
{ | |
BOOL result; // eax@1 | |
result = (BOOL)hConsoleOutput; | |
if ( hConsoleOutput != (HANDLE)-1 ) | |
{ | |
if ( hConsoleOutput != (HANDLE)-2 ) | |
result = CloseHandle(hConsoleOutput); | |
} | |
return result; | |
} | |
//----- (00413F41) -------------------------------------------------------- | |
signed int __cdecl sub_413F41(int a1) | |
{ | |
signed int result; // eax@2 | |
if ( a1 ) | |
{ | |
*(_DWORD *)a1 = dword_43E384; | |
result = 0; | |
} | |
else | |
{ | |
*_errno() = 22; | |
_invalid_parameter_noinfo(); | |
result = 22; | |
} | |
return result; | |
} | |
// 40A783: using guessed type int _invalid_parameter_noinfo(void); | |
// 43E384: using guessed type int dword_43E384; | |
//----- (00414320) -------------------------------------------------------- | |
BOOL __cdecl sub_414320() | |
{ | |
BOOL result; // eax@1 | |
struct tagMSG Msg; // [sp+4h] [bp-1Ch]@1 | |
result = PeekMessageA(&Msg, 0, 0, 0, 1u); | |
if ( result ) | |
{ | |
while ( Msg.message != 18 ) | |
{ | |
TranslateMessage(&Msg); | |
DispatchMessageA(&Msg); | |
result = PeekMessageA(&Msg, 0, 0, 0, 1u); | |
if ( !result ) | |
return result; | |
} | |
dword_46FFD8 = 1; | |
dword_467D18 = Msg.wParam; | |
} | |
return result; | |
} | |
// 467D18: using guessed type int dword_467D18; | |
// 46FFD8: using guessed type int dword_46FFD8; | |
//----- (004143F0) -------------------------------------------------------- | |
int __fastcall sub_4143F0(int a1) | |
{ | |
int v1; // eax@1 | |
int v2; // esi@1 | |
int v3; // eax@1 | |
int v4; // eax@3 | |
int *v5; // esi@3 | |
signed int v6; // esi@5 | |
int v7; // eax@6 | |
int v8; // eax@8 | |
int v9; // eax@10 | |
int v11; // [sp+10h] [bp-4h]@1 | |
v11 = a1; | |
v1 = dword_43D020 + 1; | |
dword_43D020 = v1; | |
v2 = v1 & 0x1F; | |
v3 = dword_471880[v1 & 0x1F]; | |
if ( v3 ) | |
{ | |
(*(void (__stdcall **)(int))(*(_DWORD *)v3 + 8))(v3); | |
dword_471880[v2] = 0; | |
} | |
v4 = dword_471700[v2]; | |
v5 = &dword_471700[v2]; | |
if ( v4 ) | |
{ | |
(*(void (__stdcall **)(int))(*(_DWORD *)v4 + 8))(v4); | |
*v5 = 0; | |
} | |
v6 = 0; | |
do | |
{ | |
v7 = dword_471700[v6]; | |
if ( v7 ) | |
{ | |
(*(void (__stdcall **)(int, int *))(*(_DWORD *)v7 + 36))(v7, &v11); | |
if ( !(v11 & 1) ) | |
{ | |
v8 = dword_471880[v6]; | |
if ( v8 ) | |
{ | |
(*(void (__stdcall **)(int))(*(_DWORD *)v8 + 8))(dword_471880[v6]); | |
dword_471880[v6] = 0; | |
} | |
v9 = dword_471700[v6]; | |
if ( v9 ) | |
{ | |
(*(void (__stdcall **)(int))(*(_DWORD *)v9 + 8))(dword_471700[v6]); | |
dword_471700[v6] = 0; | |
} | |
} | |
} | |
++v6; | |
} | |
while ( v6 < 32 ); | |
return dword_43D020 & 0x1F; | |
} | |
// 43D020: using guessed type int dword_43D020; | |
// 471700: using guessed type int dword_471700[]; | |
// 471880: using guessed type int dword_471880[]; | |
//----- (00414530) -------------------------------------------------------- | |
FILE *__usercall sub_414530<eax>(const char *a1<eax>, int a2, int a3) | |
{ | |
FILE *result; // eax@1 | |
FILE *v4; // esi@1 | |
unsigned int v5; // edi@3 | |
void *v6; // ecx@14 | |
size_t v7; // [sp+30h] [bp-54h]@2 | |
size_t v8; // [sp+34h] [bp-50h]@3 | |
void *v9; // [sp+38h] [bp-4Ch]@11 | |
void *v10; // [sp+3Ch] [bp-48h]@11 | |
size_t v11; // [sp+40h] [bp-44h]@3 | |
unsigned int v12; // [sp+44h] [bp-40h]@3 | |
char v13; // [sp+4Ch] [bp-38h]@5 | |
__int16 v14; // [sp+5Ch] [bp-28h]@10 | |
int v15; // [sp+60h] [bp-24h]@10 | |
int v16; // [sp+64h] [bp-20h]@10 | |
unsigned int v17; // [sp+68h] [bp-1Ch]@10 | |
int v18; // [sp+6Ch] [bp-18h]@10 | |
char *v19; // [sp+70h] [bp-14h]@10 | |
result = fopen(a1, "rb"); | |
v4 = result; | |
if ( result ) | |
{ | |
fseek(result, 12, 0); | |
v7 = 16; | |
while ( 1 ) | |
{ | |
fread(&v11, 8u, 1u, v4); | |
v5 = v12; | |
v8 = v11; | |
if ( v11 == 1635017060 ) | |
break; | |
if ( v11 == 544501094 ) | |
{ | |
fread(&v13, 0x10u, 1u, v4); | |
if ( v5 > 0x10 ) | |
fseek(v4, (v5 - 15) & 0xFFFFFFFE, 1); | |
} | |
else | |
{ | |
fseek(v4, (v12 + 1) & 0xFFFFFFFE, 1); | |
if ( feof(v4) ) | |
goto LABEL_9; | |
} | |
--v7; | |
if ( !v7 ) | |
goto LABEL_9; | |
} | |
v19 = &v13; | |
v14 = 0; | |
v18 = 0; | |
v15 = 36; | |
v16 = a3; | |
v17 = v12; | |
if ( (*(int (__stdcall **)(LPDIRECTSOUND, int *, int, _DWORD))((int (__stdcall **)(_DWORD, _DWORD, _DWORD, _DWORD))dword_470040->lpVtbl | |
+ 3))( | |
dword_470040, | |
&v15, | |
a2, | |
0) | |
|| (*(int (__stdcall **)(_DWORD, _DWORD, unsigned int, void **, size_t *, void **, size_t *, _DWORD))(**(_DWORD **)a2 + 44))( | |
*(_DWORD *)a2, | |
0, | |
v5, | |
&v10, | |
&v8, | |
&v9, | |
&v7, | |
0) == -2005401450 ) | |
{ | |
LABEL_9: | |
fclose(v4); | |
return 0; | |
} | |
if ( v10 ) | |
fread(v10, v8, 1u, v4); | |
v6 = v9; | |
if ( v9 ) | |
{ | |
fread(v9, v7, 1u, v4); | |
v6 = v9; | |
} | |
(*(void (__stdcall **)(_DWORD, void *, size_t, void *, size_t))(**(_DWORD **)a2 + 76))( | |
*(_DWORD *)a2, | |
v10, | |
v8, | |
v6, | |
v7); | |
fclose(v4); | |
result = (FILE *)1; | |
} | |
return result; | |
} | |
//----- (004146D0) -------------------------------------------------------- | |
void __cdecl sub_4146D0() | |
{ | |
signed int v0; // esi@2 | |
signed int v1; // esi@8 | |
if ( dword_470040 ) | |
{ | |
v0 = (signed int)&dword_4718FC; | |
do | |
{ | |
if ( *(_DWORD *)v0 ) | |
{ | |
(*(void (__stdcall **)(_DWORD))(**(_DWORD **)v0 + 8))(*(_DWORD *)v0); | |
*(_DWORD *)v0 = 0; | |
} | |
v0 -= 4; | |
} | |
while ( v0 >= (signed int)dword_471880 ); | |
if ( dword_470048 ) | |
{ | |
(*(void (__stdcall **)(_DWORD))(*(_DWORD *)dword_470048 + 8))(dword_470048); | |
dword_470048 = 0; | |
} | |
v1 = (signed int)&dword_47177C; | |
do | |
{ | |
if ( *(_DWORD *)v1 ) | |
{ | |
(*(void (__stdcall **)(_DWORD))(**(_DWORD **)v1 + 8))(*(_DWORD *)v1); | |
*(_DWORD *)v1 = 0; | |
} | |
v1 -= 4; | |
} | |
while ( v1 >= (signed int)dword_471700 ); | |
(*((void (__stdcall **)(_DWORD))dword_470040->lpVtbl + 2))(dword_470040); | |
dword_470040 = 0; | |
} | |
} | |
// 470048: using guessed type int dword_470048; | |
// 471700: using guessed type int dword_471700[]; | |
// 47177C: using guessed type int dword_47177C; | |
// 471880: using guessed type int dword_471880[]; | |
// 4718FC: using guessed type int dword_4718FC; | |
//----- (00414760) -------------------------------------------------------- | |
int __cdecl sub_414760() | |
{ | |
int result; // eax@1 | |
int v1; // [sp+0h] [bp-2Ch]@1 | |
int v2; // [sp+4h] [bp-28h]@1 | |
int v3; // [sp+8h] [bp-24h]@1 | |
int v4; // [sp+Ch] [bp-20h]@1 | |
int v5; // [sp+10h] [bp-1Ch]@1 | |
int v6; // [sp+14h] [bp-18h]@1 | |
int v7; // [sp+18h] [bp-14h]@1 | |
int v8; // [sp+1Ch] [bp-10h]@1 | |
int v9; // [sp+20h] [bp-Ch]@1 | |
int v10; // [sp+24h] [bp-8h]@1 | |
int v11; // [sp+28h] [bp-4h]@1 | |
result = dword_470044; | |
v1 = -10000; | |
v2 = -1000; | |
v3 = -699; | |
v4 = -523; | |
v5 = -398; | |
v6 = -301; | |
v7 = -222; | |
v8 = -155; | |
v9 = -97; | |
v10 = -46; | |
v11 = 0; | |
if ( dword_470044 ) | |
result = (*(int (__stdcall **)(int, _DWORD))(*(_DWORD *)dword_470044 + 60))(dword_470044, *(&v1 + dword_273C9D8)); | |
return result; | |
} | |
// 470044: using guessed type int dword_470044; | |
// 273C9D8: using guessed type int dword_273C9D8; | |
//----- (004147E0) -------------------------------------------------------- | |
void __fastcall sub_4147E0(unsigned int a1) | |
{ | |
int v1; // ebx@1 | |
int v2; // eax@3 | |
int (__stdcall *v3)(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD); // eax@5 | |
int v4; // eax@5 | |
int v5; // ebp@7 | |
int v6; // esi@7 | |
char v7; // dl@8 | |
_UNKNOWN *v8; // ecx@8 | |
unsigned int v9; // edi@8 | |
unsigned int v10; // eax@13 | |
unsigned int v11; // eax@16 | |
unsigned int v12; // eax@19 | |
unsigned int v13; // [sp+2Ch] [bp-4h]@1 | |
v13 = a1; | |
v1 = 0; | |
if ( dword_43D018 | |
&& dword_470034 | |
&& ((v13 = 64, | |
v2 = (*(int (__stdcall **)(int, signed int, _UNKNOWN *, unsigned int *, _DWORD))(*(_DWORD *)dword_470034 + 40))( | |
dword_470034, | |
20, | |
&unk_471A20, | |
&v13, | |
0), | |
v2 != -2147024866) | |
&& v2 != -2147024884 | |
|| ((*(void (__stdcall **)(int))(*(_DWORD *)dword_470034 + 28))(dword_470034), | |
v3 = *(int (__stdcall **)(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD))(*(_DWORD *)dword_470034 + 40), | |
dword_470038 = 0, | |
v4 = v3(dword_470034, 20, &unk_471A20, &v13, 0), | |
v4 != -2147024866) | |
&& v4 != -2147024884) ) | |
{ | |
v5 = 0; | |
v6 = dword_470038; | |
dword_468464 = 0; | |
dword_468460 = 0; | |
dword_46845C = 0; | |
if ( v13 > 0 ) | |
{ | |
v7 = byte_470013; | |
v8 = &unk_471A24; | |
v9 = v13; | |
do | |
{ | |
switch ( *((_DWORD *)v8 - 1) ) | |
{ | |
case 0: | |
dword_46845C += *(_DWORD *)v8; | |
break; | |
case 4: | |
dword_468460 += *(_DWORD *)v8; | |
break; | |
case 8: | |
v5 += *(_DWORD *)v8; | |
break; | |
case 0xC: | |
v10 = *(_DWORD *)v8; | |
if ( (char)*(_DWORD *)v8 >= 0 ) | |
{ | |
byte_470010 &= 2u; | |
v6 ^= ((unsigned __int8)v6 ^ (unsigned __int8)(v10 >> 7)) & 1; | |
v1 = 0; | |
} | |
else | |
{ | |
v6 ^= ((unsigned __int8)v6 ^ (unsigned __int8)(v10 >> 7)) & 1; | |
byte_470010 = 3; | |
v1 = 0; | |
} | |
break; | |
case 0xD: | |
v11 = *(_DWORD *)v8; | |
if ( (char)*(_DWORD *)v8 >= 0 ) | |
{ | |
byte_470011 &= 2u; | |
v6 ^= ((unsigned __int8)v6 ^ (unsigned __int8)(v11 >> 6)) & 2; | |
v1 = 0; | |
} | |
else | |
{ | |
v6 ^= ((unsigned __int8)v6 ^ (unsigned __int8)(v11 >> 6)) & 2; | |
byte_470011 = 3; | |
v1 = 0; | |
} | |
break; | |
case 0xE: | |
v12 = *(_DWORD *)v8; | |
if ( (char)*(_DWORD *)v8 >= 0 ) | |
{ | |
byte_470012 &= 2u; | |
v6 ^= ((unsigned __int8)v6 ^ (unsigned __int8)(v12 >> 5)) & 4; | |
v1 = 0; | |
} | |
else | |
{ | |
v6 ^= ((unsigned __int8)v6 ^ (unsigned __int8)(v12 >> 5)) & 4; | |
byte_470012 = 3; | |
v1 = 0; | |
} | |
break; | |
case 0xF: | |
if ( (char)*(_DWORD *)v8 >= 0 ) | |
v7 &= 2u; | |
else | |
v7 = 3; | |
v6 ^= ((unsigned __int8)v6 ^ (unsigned __int8)(*(_DWORD *)v8 >> 4)) & 8; | |
break; | |
default: | |
break; | |
} | |
v8 = (char *)v8 + 20; | |
--v9; | |
} | |
while ( v9 ); | |
byte_470013 = v7; | |
dword_470038 = v6; | |
dword_468464 = v5; | |
} | |
if ( dword_47003C != v1 ) | |
{ | |
v6 = 0; | |
dword_47003C = v1; | |
dword_470038 = 0; | |
} | |
dword_468458 = v6; | |
} | |
else | |
{ | |
dword_468458 = 0; | |
dword_468464 = 0; | |
dword_468460 = 0; | |
dword_46845C = 0; | |
} | |
} | |
// 43D018: using guessed type int dword_43D018; | |
// 468458: using guessed type int dword_468458; | |
// 46845C: using guessed type int dword_46845C; | |
// 468460: using guessed type int dword_468460; | |
// 468464: using guessed type int dword_468464; | |
// 470010: using guessed type char byte_470010; | |
// 470011: using guessed type char byte_470011; | |
// 470012: using guessed type char byte_470012; | |
// 470013: using guessed type char byte_470013; | |
// 470034: using guessed type int dword_470034; | |
// 470038: using guessed type int dword_470038; | |
// 47003C: using guessed type int dword_47003C; | |
//----- (00414A10) -------------------------------------------------------- | |
int __cdecl sub_414A10() | |
{ | |
int result; // eax@1 | |
result = dword_470034; | |
if ( dword_470034 ) | |
{ | |
if ( hObject ) | |
{ | |
(*(void (__stdcall **)(_DWORD, _DWORD))(*(_DWORD *)dword_470034 + 48))(dword_470034, hObject); | |
CloseHandle(hObject); | |
result = dword_470034; | |
hObject = 0; | |
} | |
(*(void (__stdcall **)(_DWORD))(*(_DWORD *)result + 32))(result); | |
result = (*(int (__stdcall **)(_DWORD))(*(_DWORD *)dword_470034 + 8))(dword_470034); | |
dword_470034 = 0; | |
} | |
return result; | |
} | |
// 470034: using guessed type int dword_470034; | |
//----- (00414A70) -------------------------------------------------------- | |
int __cdecl sub_414A70() | |
{ | |
int v0; // eax@1 | |
int (__stdcall *v1)(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD); // eax@3 | |
int result; // eax@5 | |
int v3; // ebp@6 | |
_UNKNOWN *v4; // edx@7 | |
int v5; // edi@7 | |
int v6; // esi@8 | |
int v7; // ecx@8 | |
int v8; // [sp+2Ch] [bp-4h]@1 | |
v8 = 64; | |
v0 = (*(int (__stdcall **)(int, signed int, _UNKNOWN *, int *, _DWORD))(*(_DWORD *)dword_470030 + 40))( | |
dword_470030, | |
20, | |
&unk_4711E0, | |
&v8, | |
0); | |
if ( v0 == -2147024866 || v0 == -2147024884 ) | |
{ | |
(*(void (__stdcall **)(int))(*(_DWORD *)dword_470030 + 28))(dword_470030); | |
v1 = *(int (__stdcall **)(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD))(*(_DWORD *)dword_470030 + 40); | |
dword_470004 = 0; | |
v0 = v1(dword_470030, 20, &unk_4711E0, &v8, 0); | |
} | |
if ( v0 >= 0 ) | |
{ | |
v3 = v8; | |
if ( v8 > 0 ) | |
{ | |
v4 = &unk_4711E0; | |
v5 = v8; | |
do | |
{ | |
v6 = *((_DWORD *)v4 + 1) & 0x80; | |
v7 = *(_DWORD *)v4; | |
if ( *((_DWORD *)v4 + 1) & 0x80 ) | |
byte_471920[v7] = 1; | |
else | |
byte_471920[v7] = 0; | |
if ( v6 ) | |
byte_471780[v7] = 3; | |
else | |
byte_471780[v7] &= 0xFEu; | |
v4 = (char *)v4 + 20; | |
--v5; | |
} | |
while ( v5 ); | |
} | |
result = v3; | |
} | |
else | |
{ | |
result = 0; | |
} | |
return result; | |
} | |
// 470004: using guessed type int dword_470004; | |
// 470030: using guessed type int dword_470030; | |
//----- (00414B40) -------------------------------------------------------- | |
int __cdecl sub_414B40() | |
{ | |
int result; // eax@1 | |
result = dword_470030; | |
if ( dword_470030 ) | |
{ | |
if ( dword_470024 ) | |
{ | |
(*(void (__stdcall **)(_DWORD, _DWORD))(*(_DWORD *)dword_470030 + 48))(dword_470030, dword_470024); | |
CloseHandle(dword_470024); | |
result = dword_470030; | |
dword_470024 = 0; | |
} | |
(*(void (__stdcall **)(_DWORD))(*(_DWORD *)result + 32))(result); | |
result = (*(int (__stdcall **)(_DWORD))(*(_DWORD *)dword_470030 + 8))(dword_470030); | |
dword_470030 = 0; | |
} | |
return result; | |
} | |
// 470030: using guessed type int dword_470030; | |
//----- (00414BA0) -------------------------------------------------------- | |
int __cdecl sub_414BA0() | |
{ | |
int result; // eax@1 | |
result = dword_47002C; | |
if ( dword_47002C ) | |
{ | |
result = (*(int (__stdcall **)(_DWORD))(*(_DWORD *)dword_47002C + 8))(dword_47002C); | |
dword_47002C = 0; | |
} | |
return result; | |
} | |
// 47002C: using guessed type int dword_47002C; | |
//----- (00414C40) -------------------------------------------------------- | |
int __cdecl sub_414C40() | |
{ | |
int result; // eax@1 | |
int v1; // [sp+24h] [bp-14h]@1 | |
int v2; // [sp+28h] [bp-10h]@1 | |
int v3; // [sp+2Ch] [bp-Ch]@1 | |
int v4; // [sp+30h] [bp-8h]@1 | |
v3 = dword_4716E4; | |
v1 = 0; | |
v2 = 0; | |
v4 = dword_471F28; | |
result = (*(int (__stdcall **)(int, signed int))(*(_DWORD *)dword_46FFEC + 52))(dword_46FFEC, 1); | |
if ( result != -2005532132 ) | |
{ | |
if ( (*(int (__stdcall **)(int, _DWORD, _DWORD, int, int *, _DWORD))(*(_DWORD *)dword_46FFEC + 28))( | |
dword_46FFEC, | |
0, | |
0, | |
dword_46FFE8, | |
&v1, | |
0) != -2005532222 | |
|| ((*(void (__stdcall **)(int))(*(_DWORD *)dword_46FFE4 + 108))(dword_46FFE4), | |
(result = (*(int (__stdcall **)(int, _DWORD, _DWORD, int, int *, _DWORD))(*(_DWORD *)dword_46FFEC + 28))( | |
dword_46FFEC, | |
0, | |
0, | |
dword_46FFE8, | |
&v1, | |
0)) == 0) ) | |
{ | |
result = (*(int (__stdcall **)(int, signed int))(*(_DWORD *)dword_46FFE4 + 72))(dword_46FFE4, 1); | |
if ( result != -2005532132 ) | |
{ | |
result = (*(int (__stdcall **)(int, _DWORD, _DWORD))(*(_DWORD *)dword_46FFE4 + 44))(dword_46FFE4, 0, 0); | |
if ( result == -2005532222 ) | |
{ | |
(*(void (__stdcall **)(int))(*(_DWORD *)dword_46FFE4 + 108))(dword_46FFE4); | |
result = (*(int (__stdcall **)(int, _DWORD, _DWORD))(*(_DWORD *)dword_46FFE4 + 44))(dword_46FFE4, 0, 0); | |
} | |
} | |
} | |
} | |
return result; | |
} | |
// 46FFE4: using guessed type int dword_46FFE4; | |
// 46FFE8: using guessed type int dword_46FFE8; | |
// 46FFEC: using guessed type int dword_46FFEC; | |
// 4716E4: using guessed type int dword_4716E4; | |
// 471F28: using guessed type int dword_471F28; | |
//----- (00414D60) -------------------------------------------------------- | |
int __cdecl sub_414D60() | |
{ | |
int result; // eax@10 | |
if ( lpDD ) | |
{ | |
if ( dword_46FFF4 ) | |
{ | |
free(dword_46FFF4); | |
dword_46FFF4 = 0; | |
dword_46FFF8 = 0; | |
} | |
if ( dword_46FFF0 ) | |
{ | |
(*(void (__stdcall **)(_DWORD))(*(_DWORD *)dword_46FFF0 + 8))(dword_46FFF0); | |
dword_46FFF0 = 0; | |
} | |
if ( dword_46FFE4 ) | |
{ | |
(*(void (__stdcall **)(_DWORD))(*(_DWORD *)dword_46FFE4 + 8))(dword_46FFE4); | |
dword_46FFE4 = 0; | |
} | |
if ( dword_470000 ) | |
{ | |
free(dword_470000); | |
dword_470000 = 0; | |
} | |
result = (*((int (__stdcall **)(_DWORD))lpDD->lpVtbl + 2))(lpDD); | |
lpDD = 0; | |
} | |
return result; | |
} | |
// 46FFE4: using guessed type int dword_46FFE4; | |
// 46FFF0: using guessed type int dword_46FFF0; | |
// 46FFF8: using guessed type int dword_46FFF8; | |
//----- (00414DF0) -------------------------------------------------------- | |
BOOL __cdecl sub_414DF0() | |
{ | |
BOOL result; // eax@1 | |
__int64 v1; // [sp+0h] [bp-Ch]@1 | |
result = QueryPerformanceCounter((LARGE_INTEGER *)&v1); | |
v1 -= *(_QWORD *)&PerformanceCount; | |
flt_28485E0 = (double)v1 * flt_467D14; | |
return result; | |
} | |
// 467D14: using guessed type float flt_467D14; | |
// 28485E0: using guessed type float flt_28485E0; | |
//----- (00414EB0) -------------------------------------------------------- | |
void __thiscall sub_414EB0(int this, const char *a2, int a3, int a4) | |
{ | |
int v4; // ebp@2 | |
int v5; // esi@2 | |
int v6; // eax@4 | |
int *v7; // edi@7 | |
int v8; // eax@11 | |
int v9; // [sp+30h] [bp-4h]@1 | |
v9 = this; | |
if ( dword_470040 ) | |
{ | |
v4 = sub_4143F0(this); | |
v5 = (int)&dword_471700[v4]; | |
if ( !dword_471700[v4] ) | |
{ | |
if ( !sub_414530(a2, v5, 131218) ) | |
return; | |
v6 = dword_471880[v4]; | |
if ( v6 ) | |
{ | |
(*(void (__stdcall **)(int))(*(_DWORD *)v6 + 8))(dword_471880[v4]); | |
dword_471880[v4] = 0; | |
} | |
(*(void (__stdcall **)(_DWORD, _UNKNOWN *, int *))**(void (__stdcall ****)(_DWORD, _DWORD, _DWORD))v5)( | |
*(_DWORD *)v5, | |
&unk_4366CC, | |
&dword_471880[v4]); | |
} | |
v7 = &dword_471880[v4]; | |
((void (__stdcall *)(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD))*(void (__stdcall **)(int, float, _DWORD, _DWORD, _DWORD))(*(_DWORD *)dword_471880[v4] + 76))( | |
dword_471880[v4], | |
*(float *)a4, | |
*(float *)(a4 + 4), | |
*(float *)(a4 + 8), | |
0); | |
(*(void (__stdcall **)(_DWORD, int *))(**(_DWORD **)v5 + 36))(*(_DWORD *)v5, &v9); | |
if ( !(v9 & 1) ) | |
{ | |
if ( a3 < 0 ) | |
(*(void (__stdcall **)(_DWORD, int))(**(_DWORD **)v5 + 60))(*(_DWORD *)v5, a3); | |
(*(void (__stdcall **)(_DWORD, _DWORD))(**(_DWORD **)v5 + 52))(*(_DWORD *)v5, 0); | |
if ( (*(int (__stdcall **)(_DWORD, _DWORD, _DWORD, _DWORD))(**(_DWORD **)v5 + 48))(*(_DWORD *)v5, 0, 0, 0) == -2005401450 ) | |
{ | |
(*(void (__stdcall **)(int))(*(_DWORD *)*v7 + 8))(*v7); | |
v8 = *(_DWORD *)v5; | |
*v7 = 0; | |
(*(void (__stdcall **)(int))(*(_DWORD *)v8 + 8))(v8); | |
*(_DWORD *)v5 = 0; | |
} | |
} | |
} | |
} | |
// 471700: using guessed type int dword_471700[]; | |
// 471880: using guessed type int dword_471880[]; | |
//----- (00414FD0) -------------------------------------------------------- | |
void __usercall sub_414FD0(int a1<ecx>, int a2<edi>, const char *a3) | |
{ | |
int v3; // esi@2 | |
int v4; // [sp+8h] [bp-4h]@1 | |
v4 = a1; | |
if ( dword_470040 ) | |
{ | |
v3 = (int)&dword_471700[sub_4143F0(a1)]; | |
if ( *(_DWORD *)v3 || sub_414530(a3, v3, 130) ) | |
{ | |
(*(void (__stdcall **)(_DWORD, int *))(**(_DWORD **)v3 + 36))(*(_DWORD *)v3, &v4); | |
if ( !(v4 & 1) ) | |
{ | |
if ( a2 < 0 ) | |
(*(void (__stdcall **)(_DWORD, int))(**(_DWORD **)v3 + 60))(*(_DWORD *)v3, a2); | |
(*(void (__stdcall **)(_DWORD, _DWORD))(**(_DWORD **)v3 + 52))(*(_DWORD *)v3, 0); | |
if ( (*(int (__stdcall **)(_DWORD, _DWORD, _DWORD, _DWORD))(**(_DWORD **)v3 + 48))(*(_DWORD *)v3, 0, 0, 0) == -2005401450 ) | |
{ | |
(*(void (__stdcall **)(_DWORD))(**(_DWORD **)v3 + 8))(*(_DWORD *)v3); | |
*(_DWORD *)v3 = 0; | |
} | |
} | |
} | |
} | |
} | |
// 471700: using guessed type int dword_471700[]; | |
//----- (00415070) -------------------------------------------------------- | |
HRESULT __cdecl sub_415070() | |
{ | |
HRESULT result; // eax@3 | |
int v1; // eax@4 | |
int v2; // [sp+B0h] [bp-24h]@0 | |
int v3; // [sp+B0h] [bp-24h]@4 | |
int v4; // [sp+B4h] [bp-20h]@6 | |
int v5; // [sp+B8h] [bp-1Ch]@6 | |
int v6; // [sp+BCh] [bp-18h]@6 | |
int v7; // [sp+C0h] [bp-14h]@6 | |
int v8; // [sp+C4h] [bp-10h]@6 | |
if ( dword_470040 ) | |
sub_4146D0(); | |
dword_471880[0] = 0; | |
dword_471884 = 0; | |
dword_471888 = 0; | |
dword_47188C = 0; | |
dword_471890 = 0; | |
dword_471894 = 0; | |
dword_471898 = 0; | |
dword_47189C = 0; | |
dword_4718A0 = 0; | |
dword_4718A4 = 0; | |
dword_4718A8 = 0; | |
dword_4718AC = 0; | |
dword_4718B0 = 0; | |
dword_4718B4 = 0; | |
dword_4718B8 = 0; | |
dword_4718BC = 0; | |
dword_4718C0 = 0; | |
dword_4718C4 = 0; | |
dword_4718C8 = 0; | |
dword_4718CC = 0; | |
dword_4718D0 = 0; | |
dword_4718D4 = 0; | |
dword_4718D8 = 0; | |
dword_4718DC = 0; | |
dword_4718E0 = 0; | |
dword_4718E4 = 0; | |
dword_4718E8 = 0; | |
dword_4718EC = 0; | |
dword_4718F0 = 0; | |
dword_4718F4 = 0; | |
dword_4718F8 = 0; | |
dword_4718FC = 0; | |
dword_471700[0] = 0; | |
dword_471704 = 0; | |
dword_471708 = 0; | |
dword_47170C = 0; | |
dword_471710 = 0; | |
dword_471714 = 0; | |
dword_471718 = 0; | |
dword_47171C = 0; | |
dword_471720 = 0; | |
dword_471724 = 0; | |
dword_471728 = 0; | |
dword_47172C = 0; | |
dword_471730 = 0; | |
dword_471734 = 0; | |
dword_471738 = 0; | |
dword_47173C = 0; | |
dword_471740 = 0; | |
dword_471744 = 0; | |
dword_471748 = 0; | |
dword_47174C = 0; | |
dword_471750 = 0; | |
dword_471754 = 0; | |
dword_471758 = 0; | |
dword_47175C = 0; | |
dword_471760 = 0; | |
dword_471764 = 0; | |
dword_471768 = 0; | |
dword_47176C = 0; | |
dword_471770 = 0; | |
dword_471774 = 0; | |
dword_471778 = 0; | |
dword_47177C = 0; | |
result = DirectSoundCreate(0, &dword_470040, 0); | |
if ( !result ) | |
{ | |
v1 = (*(int (__stdcall **)(LPDIRECTSOUND, HWND, signed int, int))((int (__stdcall **)(_DWORD, _DWORD, _DWORD, _DWORD))dword_470040->lpVtbl | |
+ 6))( | |
dword_470040, | |
hWnd, | |
2, | |
v2); | |
v3 = 0; | |
if ( v1 ) | |
{ | |
MessageBoxA(hWnd, "SetCooperativeLevel", "ERROR", 0); | |
_LN49(0); | |
} | |
v4 = 36; | |
v5 = 145; | |
v6 = 0; | |
v7 = 0; | |
v8 = 0; | |
if ( (*(int (__stdcall **)(LPDIRECTSOUND, int *, int *))((int (__stdcall **)(_DWORD, _DWORD, _DWORD))dword_470040->lpVtbl | |
+ 3))( | |
dword_470040, | |
&v4, | |
&dword_470044) < 0 ) | |
{ | |
(*(void (__stdcall **)(LPDIRECTSOUND, int))((void (__stdcall **)(_DWORD, _DWORD))dword_470040->lpVtbl + 2))( | |
dword_470040, | |
v3); | |
MessageBoxA(hWnd, "CreateSoundBuffer (primary) failed", "ERROR", 0); | |
_LN49(0); | |
} | |
(*(void (__stdcall **)(int, _DWORD, _DWORD, signed int))(*(_DWORD *)dword_470044 + 48))(dword_470044, 0, 0, 1); | |
if ( (**(int (__stdcall ***)(int, _UNKNOWN *, int *))dword_470044)(dword_470044, &unk_4366BC, &dword_470048) ) | |
{ | |
(*(void (__stdcall **)(LPDIRECTSOUND, int))((void (__stdcall **)(_DWORD, _DWORD))dword_470040->lpVtbl + 2))( | |
dword_470040, | |
v3); | |
MessageBoxA(hWnd, "Query...Listener failed", "ERROR", 0); | |
_LN49(0); | |
} | |
(*(void (__stdcall **)(int, _DWORD, signed int))(*(_DWORD *)dword_470048 + 44))(dword_470048, 1.0, 1); | |
(*(void (__stdcall **)(int, _DWORD, signed int))(*(_DWORD *)dword_470048 + 60))(dword_470048, 0.1, 1); | |
(*(void (__stdcall **)(int, _DWORD, signed int))(*(_DWORD *)dword_470048 + 48))(dword_470048, 1.0, 1); | |
(*(void (__stdcall **)(int, _DWORD, _DWORD, _DWORD, signed int))(*(_DWORD *)dword_470048 + 56))( | |
dword_470048, | |
0.0, | |
0.0, | |
0.0, | |
1); | |
(*(void (__stdcall **)(int, _DWORD, _DWORD, _DWORD, signed int))(*(_DWORD *)dword_470048 + 64))( | |
dword_470048, | |
0.0, | |
0.0, | |
0.0, | |
1); | |
(*(void (__stdcall **)(int, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, signed int))(*(_DWORD *)dword_470048 + 52))( | |
dword_470048, | |
0.0, | |
0.0, | |
1.0, | |
0.0, | |
1.0, | |
0.0, | |
1); | |
result = (*(int (__stdcall **)(int))(*(_DWORD *)dword_470048 + 68))(dword_470048); | |
} | |
return result; | |
} | |
// 470044: using guessed type int dword_470044; | |
// 470048: using guessed type int dword_470048; | |
// 471700: using guessed type int dword_471700[]; | |
// 471704: using guessed type int dword_471704; | |
// 471708: using guessed type int dword_471708; | |
// 47170C: using guessed type int dword_47170C; | |
// 471710: using guessed type int dword_471710; | |
// 471714: using guessed type int dword_471714; | |
// 471718: using guessed type int dword_471718; | |
// 47171C: using guessed type int dword_47171C; | |
// 471720: using guessed type int dword_471720; | |
// 471724: using guessed type int dword_471724; | |
// 471728: using guessed type int dword_471728; | |
// 47172C: using guessed type int dword_47172C; | |
// 471730: using guessed type int dword_471730; | |
// 471734: using guessed type int dword_471734; | |
// 471738: using guessed type int dword_471738; | |
// 47173C: using guessed type int dword_47173C; | |
// 471740: using guessed type int dword_471740; | |
// 471744: using guessed type int dword_471744; | |
// 471748: using guessed type int dword_471748; | |
// 47174C: using guessed type int dword_47174C; | |
// 471750: using guessed type int dword_471750; | |
// 471754: using guessed type int dword_471754; | |
// 471758: using guessed type int dword_471758; | |
// 47175C: using guessed type int dword_47175C; | |
// 471760: using guessed type int dword_471760; | |
// 471764: using guessed type int dword_471764; | |
// 471768: using guessed type int dword_471768; | |
// 47176C: using guessed type int dword_47176C; | |
// 471770: using guessed type int dword_471770; | |
// 471774: using guessed type int dword_471774; | |
// 471778: using guessed type int dword_471778; | |
// 47177C: using guessed type int dword_47177C; | |
// 471880: using guessed type int dword_471880[]; | |
// 471884: using guessed type int dword_471884; | |
// 471888: using guessed type int dword_471888; | |
// 47188C: using guessed type int dword_47188C; | |
// 471890: using guessed type int dword_471890; | |
// 471894: using guessed type int dword_471894; | |
// 471898: using guessed type int dword_471898; | |
// 47189C: using guessed type int dword_47189C; | |
// 4718A0: using guessed type int dword_4718A0; | |
// 4718A4: using guessed type int dword_4718A4; | |
// 4718A8: using guessed type int dword_4718A8; | |
// 4718AC: using guessed type int dword_4718AC; | |
// 4718B0: using guessed type int dword_4718B0; | |
// 4718B4: using guessed type int dword_4718B4; | |
// 4718B8: using guessed type int dword_4718B8; | |
// 4718BC: using guessed type int dword_4718BC; | |
// 4718C0: using guessed type int dword_4718C0; | |
// 4718C4: using guessed type int dword_4718C4; | |
// 4718C8: using guessed type int dword_4718C8; | |
// 4718CC: using guessed type int dword_4718CC; | |
// 4718D0: using guessed type int dword_4718D0; | |
// 4718D4: using guessed type int dword_4718D4; | |
// 4718D8: using guessed type int dword_4718D8; | |
// 4718DC: using guessed type int dword_4718DC; | |
// 4718E0: using guessed type int dword_4718E0; | |
// 4718E4: using guessed type int dword_4718E4; | |
// 4718E8: using guessed type int dword_4718E8; | |
// 4718EC: using guessed type int dword_4718EC; | |
// 4718F0: using guessed type int dword_4718F0; | |
// 4718F4: using guessed type int dword_4718F4; | |
// 4718F8: using guessed type int dword_4718F8; | |
// 4718FC: using guessed type int dword_4718FC; | |
//----- (004153A0) -------------------------------------------------------- | |
signed int __cdecl sub_4153A0() | |
{ | |
HWND v0; // ebx@1 | |
int v1; // esi@1 | |
HANDLE v2; // eax@4 | |
int v3; // ecx@8 | |
int v5; // [sp+34h] [bp-114h]@6 | |
int v6; // [sp+38h] [bp-110h]@6 | |
int v7; // [sp+3Ch] [bp-10Ch]@6 | |
int v8; // [sp+40h] [bp-108h]@6 | |
int v9; // [sp+44h] [bp-104h]@6 | |
CHAR Text; // [sp+48h] [bp-100h]@12 | |
v0 = hWnd; | |
v1 = (*(int (__stdcall **)(int, _UNKNOWN *, int *, _DWORD))(*(_DWORD *)dword_47002C + 12))( | |
dword_47002C, | |
&unk_43669C, | |
&dword_470034, | |
0); | |
if ( v1 < 0 | |
|| (v1 = (*(int (__stdcall **)(int, _UNKNOWN *))(*(_DWORD *)dword_470034 + 44))(dword_470034, &unk_43642C), v1 < 0) | |
|| (v1 = (*(int (__stdcall **)(int, HWND, signed int))(*(_DWORD *)dword_470034 + 52))(dword_470034, v0, 5), v1 < 0) ) | |
goto LABEL_18; | |
v2 = CreateEventA(0, 0, 0, 0); | |
hObject = v2; | |
if ( !v2 ) | |
{ | |
LABEL_8: | |
v3 = dword_470034; | |
if ( dword_470034 ) | |
{ | |
if ( v2 ) | |
{ | |
(*(void (__stdcall **)(int, HANDLE))(*(_DWORD *)dword_470034 + 48))(dword_470034, v2); | |
CloseHandle(hObject); | |
v3 = dword_470034; | |
hObject = 0; | |
} | |
(*(void (__stdcall **)(int))(*(_DWORD *)v3 + 32))(v3); | |
(*(void (__stdcall **)(int))(*(_DWORD *)dword_470034 + 8))(dword_470034); | |
dword_470034 = 0; | |
} | |
wsprintfA(&Text, "initdirectinput(mouse) failed: %08lx\n", v1); | |
MessageBoxA(hWnd, &Text, "ERROR", 0); | |
return 0; | |
} | |
v1 = (*(int (__stdcall **)(int, HANDLE))(*(_DWORD *)dword_470034 + 48))(dword_470034, v2); | |
if ( v1 < 0 | |
|| (v5 = 20, | |
v6 = 16, | |
v7 = 0, | |
v8 = 0, | |
v9 = 64, | |
v1 = (*(int (__stdcall **)(int, signed int, int *))(*(_DWORD *)dword_470034 + 24))(dword_470034, 1, &v5), | |
v1 < 0) ) | |
{ | |
LABEL_18: | |
v2 = hObject; | |
goto LABEL_8; | |
} | |
if ( dword_43D018 ) | |
{ | |
(*(void (__stdcall **)(int))(*(_DWORD *)dword_470034 + 28))(dword_470034); | |
dword_470038 = 0; | |
} | |
return 1; | |
} | |
// 43D018: using guessed type int dword_43D018; | |
// 47002C: using guessed type int dword_47002C; | |
// 470034: using guessed type int dword_470034; | |
// 470038: using guessed type int dword_470038; | |
//----- (00415520) -------------------------------------------------------- | |
signed int __cdecl sub_415520() | |
{ | |
HWND v0; // ebx@1 | |
int v1; // esi@1 | |
HANDLE v2; // eax@4 | |
int v3; // ecx@8 | |
int v5; // [sp+34h] [bp-114h]@6 | |
int v6; // [sp+38h] [bp-110h]@6 | |
int v7; // [sp+3Ch] [bp-10Ch]@6 | |
int v8; // [sp+40h] [bp-108h]@6 | |
int v9; // [sp+44h] [bp-104h]@6 | |
CHAR Text; // [sp+48h] [bp-100h]@12 | |
v0 = hWnd; | |
v1 = (*(int (__stdcall **)(int, _UNKNOWN *, int *, _DWORD))(*(_DWORD *)dword_47002C + 12))( | |
dword_47002C, | |
&unk_4366AC, | |
&dword_470030, | |
0); | |
if ( v1 < 0 | |
|| (v1 = (*(int (__stdcall **)(int, _UNKNOWN *))(*(_DWORD *)dword_470030 + 44))(dword_470030, &unk_436634), v1 < 0) | |
|| (v1 = (*(int (__stdcall **)(int, HWND, signed int))(*(_DWORD *)dword_470030 + 52))(dword_470030, v0, 6), v1 < 0) ) | |
{ | |
LABEL_7: | |
v2 = dword_470024; | |
goto LABEL_8; | |
} | |
v2 = CreateEventA(0, 0, 0, 0); | |
dword_470024 = v2; | |
if ( v2 ) | |
{ | |
v1 = (*(int (__stdcall **)(int, HANDLE))(*(_DWORD *)dword_470030 + 48))(dword_470030, v2); | |
if ( v1 >= 0 ) | |
{ | |
v5 = 20; | |
v6 = 16; | |
v7 = 0; | |
v8 = 0; | |
v9 = 64; | |
v1 = (*(int (__stdcall **)(int, signed int, int *))(*(_DWORD *)dword_470030 + 24))(dword_470030, 1, &v5); | |
if ( v1 >= 0 ) | |
{ | |
(*(void (__stdcall **)(int))(*(_DWORD *)dword_470030 + 28))(dword_470030); | |
dword_470004 = 0; | |
return 1; | |
} | |
} | |
goto LABEL_7; | |
} | |
LABEL_8: | |
v3 = dword_470030; | |
if ( dword_470030 ) | |
{ | |
if ( v2 ) | |
{ | |
(*(void (__stdcall **)(int, HANDLE))(*(_DWORD *)dword_470030 + 48))(dword_470030, v2); | |
CloseHandle(dword_470024); | |
v3 = dword_470030; | |
dword_470024 = 0; | |
} | |
(*(void (__stdcall **)(int))(*(_DWORD *)v3 + 32))(v3); | |
(*(void (__stdcall **)(int))(*(_DWORD *)dword_470030 + 8))(dword_470030); | |
dword_470030 = 0; | |
} | |
wsprintfA(&Text, "initdirectinput(keyboard) failed: %08lx\n", v1); | |
MessageBoxA(hWnd, &Text, "ERROR", 0); | |
return 0; | |
} | |
// 470004: using guessed type int dword_470004; | |
// 47002C: using guessed type int dword_47002C; | |
// 470030: using guessed type int dword_470030; | |
//----- (004156A0) -------------------------------------------------------- | |
signed int __cdecl sub_4156A0(int a1, int a2) | |
{ | |
void (__stdcall *v2)(_DWORD, _DWORD); // eax@2 | |
int v3; // eax@3 | |
signed int result; // eax@8 | |
if ( dword_46FFFC ) | |
{ | |
v2 = *(void (__stdcall **)(_DWORD, _DWORD))(*(_DWORD *)dword_46FFE8 + 128); | |
dword_46FFFC = 0; | |
v2(dword_46FFE8, dword_467D44); | |
dword_46FFFC = 0; | |
} | |
v3 = (*(int (__stdcall **)(int, _DWORD, int *, signed int, _DWORD))(*(_DWORD *)dword_46FFE8 + 100))( | |
dword_46FFE8, | |
0, | |
&dword_467D20, | |
1, | |
0); | |
if ( v3 ) | |
{ | |
while ( 1 ) | |
{ | |
if ( v3 == -2005532222 ) | |
{ | |
if ( !(*(int (__stdcall **)(int))(*(_DWORD *)dword_46FFE4 + 108))(dword_46FFE4) ) | |
(*(void (__stdcall **)(int))(*(_DWORD *)dword_46FFE8 + 108))(dword_46FFE8); | |
return 0; | |
} | |
if ( v3 == -2005532237 ) | |
break; | |
if ( v3 != -2005532132 ) | |
return 0; | |
v3 = (*(int (__stdcall **)(int, _DWORD, int *, signed int, _DWORD))(*(_DWORD *)dword_46FFE8 + 100))( | |
dword_46FFE8, | |
0, | |
&dword_467D20, | |
1, | |
0); | |
if ( !v3 ) | |
goto LABEL_8; | |
} | |
result = -1; | |
} | |
else | |
{ | |
LABEL_8: | |
*(_DWORD *)a1 = dword_467D44; | |
*(_DWORD *)a2 = dword_467D30; | |
dword_46FFFC = 1; | |
result = 1; | |
} | |
return result; | |
} | |
// 467D20: using guessed type int dword_467D20; | |
// 467D30: using guessed type int dword_467D30; | |
// 467D44: using guessed type int dword_467D44; | |
// 46FFE4: using guessed type int dword_46FFE4; | |
// 46FFE8: using guessed type int dword_46FFE8; | |
// 46FFFC: using guessed type int dword_46FFFC; | |
//----- (00415770) -------------------------------------------------------- | |
int __cdecl sub_415770() | |
{ | |
HRESULT v0; // esi@1 | |
int v1; // eax@3 | |
int v3; // [sp+3Ch] [bp-198h]@5 | |
int v4; // [sp+40h] [bp-194h]@6 | |
int v5; // [sp+44h] [bp-190h]@6 | |
int v6; // [sp+48h] [bp-18Ch]@6 | |
int v7; // [sp+4Ch] [bp-188h]@6 | |
int v8; // [sp+A8h] [bp-12Ch]@6 | |
int v9; // [sp+B0h] [bp-124h]@5 | |
CHAR Text; // [sp+D0h] [bp-104h]@7 | |
v0 = DirectDrawCreate(0, &lpDD, 0); | |
if ( v0 >= 0 ) | |
{ | |
v0 = (*(int (__stdcall **)(LPDIRECTDRAW, HWND, signed int))((int (__stdcall **)(_DWORD, _DWORD, _DWORD))lpDD->lpVtbl | |
+ 20))( | |
lpDD, | |
hWnd, | |
17); | |
if ( v0 >= 0 ) | |
{ | |
v1 = (*(int (__stdcall **)(LPDIRECTDRAW, int, int, signed int))((int (__stdcall **)(_DWORD, _DWORD, _DWORD, _DWORD))lpDD->lpVtbl | |
+ 21))( | |
lpDD, | |
dword_4716E4, | |
dword_471F28, | |
32); | |
if ( v1 < 0 ) | |
{ | |
wsprintfA(&Text, "initdirectdraw failed: 0x%x", v1); | |
MessageBoxA(hWnd, &Text, &Text, 0); | |
sub_414D60(); | |
return 0; | |
} | |
dword_467D20 = 108; | |
dword_467D24 = 33; | |
dword_467D88 = 536; | |
dword_467D34 = 1; | |
v0 = (*(int (__stdcall **)(LPDIRECTDRAW, int *, int *, _DWORD))((int (__stdcall **)(_DWORD, _DWORD, _DWORD, _DWORD))lpDD->lpVtbl | |
+ 6))( | |
lpDD, | |
&dword_467D20, | |
&dword_46FFE4, | |
0); | |
if ( v0 >= 0 ) | |
{ | |
v9 = 32; | |
(*(void (__stdcall **)(int, int *))(*(_DWORD *)dword_46FFE4 + 84))(dword_46FFE4, &v9); | |
v3 = 4; | |
v0 = (*(int (__stdcall **)(int, int *, int *))(*(_DWORD *)dword_46FFE4 + 48))(dword_46FFE4, &v3, &dword_46FFE8); | |
if ( v0 >= 0 ) | |
{ | |
dword_46FFEC = dword_46FFE8; | |
memset(&v4, 0, 0x6Cu); | |
v7 = dword_4716E4 | 1; | |
v6 = dword_471F28; | |
v4 = 108; | |
v5 = 7; | |
v8 = 2112; | |
return 2 | |
* ((*(int (__stdcall **)(LPDIRECTDRAW, int *, int *, _DWORD))((int (__stdcall **)(_DWORD, _DWORD, _DWORD, _DWORD))lpDD->lpVtbl | |
+ 6))( | |
lpDD, | |
&v4, | |
&dword_46FFE8, | |
0) >= 0) | |
- 1; | |
} | |
} | |
} | |
} | |
sub_414D60(); | |
wsprintfA(&Text, "initdirectdraw failed: 0x%08lx", v0); | |
MessageBoxA(hWnd, &Text, "ERROR", 0); | |
return 0; | |
} | |
// 467D20: using guessed type int dword_467D20; | |
// 467D24: using guessed type int dword_467D24; | |
// 467D34: using guessed type int dword_467D34; | |
// 467D88: using guessed type int dword_467D88; | |
// 46FFE4: using guessed type int dword_46FFE4; | |
// 46FFE8: using guessed type int dword_46FFE8; | |
// 46FFEC: using guessed type int dword_46FFEC; | |
// 4716E4: using guessed type int dword_4716E4; | |
// 471F28: using guessed type int dword_471F28; | |
//----- (00415960) -------------------------------------------------------- | |
int __cdecl sub_415960() | |
{ | |
signed int v4; // eax@1 | |
int result; // eax@4 | |
int v16; // edi@6 | |
int v27; // [sp-4h] [bp-34h]@0 | |
int v28; // [sp+Ch] [bp-24h]@5 | |
int v29; // [sp+10h] [bp-20h]@5 | |
int v30; // [sp+14h] [bp-1Ch]@5 | |
int v31; // [sp+18h] [bp-18h]@5 | |
unsigned int v32; // [sp+1Ch] [bp-14h]@6 | |
int v33; // [sp+20h] [bp-10h]@6 | |
int v34; // [sp+24h] [bp-Ch]@6 | |
int v35; // [sp+28h] [bp-8h]@6 | |
int *v36; // [sp+2Ch] [bp-4h]@5 | |
__asm { pushf } | |
v4 = 1; | |
if ( v27 == (v27 ^ 0x200000) ) | |
v4 = 0; | |
if ( !v4 ) | |
goto LABEL_14; | |
v36 = &v28; | |
_EAX = 0; | |
__asm { cpuid } | |
v28 = _EAX; | |
v29 = _EBX; | |
v30 = _ECX; | |
v31 = _EDX; | |
if ( _EAX ) | |
{ | |
_EAX = 1; | |
__asm { cpuid } | |
v16 = _EDX & 0x3FBFFFFF; | |
v36 = (int *)&v32; | |
_EAX = -2147483648; | |
__asm { cpuid } | |
v32 = _EAX; | |
v33 = _EBX; | |
v34 = _ECX; | |
v35 = _EDX; | |
if ( _EAX > 0x80000000 ) | |
{ | |
v36 = (int *)&v32; | |
_EAX = -2147483647; | |
__asm { cpuid } | |
v32 = _EAX; | |
v33 = _EBX; | |
v34 = _ECX; | |
v35 = _EDX; | |
v16 |= _EDX & 0x80000000; | |
if ( !(v30 ^ 0x444D4163 | v31 ^ 0x69746E65 | v29 ^ 0x68747541) ) | |
v16 |= _EDX & 0x40400000; | |
} | |
if ( (unsigned int)&unk_2000000 & v16 ) | |
v16 |= 0x400000u; | |
result = v16; | |
} | |
else | |
{ | |
LABEL_14: | |
result = 0; | |
} | |
return result; | |
} | |
//----- (00415A70) -------------------------------------------------------- | |
int __stdcall sub_415A70(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) | |
{ | |
int result; // eax@2 | |
int v5; // ecx@13 | |
int v6; // ecx@17 | |
int v7; // ecx@25 | |
unsigned __int32 v8; // eax@32 | |
int v9; // eax@43 | |
unsigned __int32 v10; // esi@60 | |
void (__stdcall *v11)(_DWORD); // edx@76 | |
int v12; // eax@82 | |
if ( !dword_47004C || (result = dword_47004C(hWnd, Msg, wParam, lParam), result < 0) ) | |
{ | |
if ( Msg <= 0x100 ) | |
{ | |
if ( Msg != 256 ) | |
{ | |
switch ( Msg ) | |
{ | |
case 0x1Cu: | |
dword_43D014 = wParam; | |
dword_470004 = 0; | |
dword_47003C = 1; | |
return DefWindowProcA(hWnd, Msg, wParam, lParam); | |
case 6u: | |
if ( dword_470034 ) | |
{ | |
if ( dword_43D014 && dword_43D018 ) | |
{ | |
(*(void (__stdcall **)(int))(*(_DWORD *)dword_470034 + 28))(dword_470034); | |
dword_470038 = 0; | |
} | |
else | |
{ | |
(*(void (__stdcall **)(int))(*(_DWORD *)dword_470034 + 32))(dword_470034); | |
} | |
} | |
if ( !dword_470030 ) | |
goto LABEL_16; | |
v5 = *(_DWORD *)dword_470030; | |
if ( dword_43D014 ) | |
{ | |
(*(void (__stdcall **)(int))(v5 + 28))(dword_470030); | |
dword_470004 = 0; | |
InvalidateRect(hWnd, 0, 1); | |
} | |
else | |
{ | |
(*(void (__stdcall **)(int))(v5 + 32))(dword_470030); | |
LABEL_16: | |
InvalidateRect(hWnd, 0, 1); | |
} | |
return DefWindowProcA(hWnd, Msg, wParam, lParam); | |
case 5u: | |
v6 = 0; | |
if ( wParam != 4 ) | |
LOBYTE(v6) = wParam != 1; | |
dword_43D014 = v6; | |
if ( dword_470034 ) | |
{ | |
if ( v6 && dword_43D018 ) | |
{ | |
(*(void (__stdcall **)(int))(*(_DWORD *)dword_470034 + 28))(dword_470034); | |
dword_470038 = 0; | |
} | |
else | |
{ | |
(*(void (__stdcall **)(int))(*(_DWORD *)dword_470034 + 32))(dword_470034); | |
} | |
} | |
if ( dword_470030 ) | |
{ | |
v7 = *(_DWORD *)dword_470030; | |
if ( dword_43D014 ) | |
{ | |
(*(void (__stdcall **)(int))(v7 + 28))(dword_470030); | |
dword_470004 = 0; | |
} | |
else | |
{ | |
(*(void (__stdcall **)(int))(v7 + 32))(dword_470030); | |
} | |
} | |
return DefWindowProcA(hWnd, Msg, wParam, lParam); | |
case 0x14u: | |
return 1; | |
case 0x10u: | |
sub_414A10(); | |
sub_414B40(); | |
sub_414BA0(); | |
sub_4146D0(); | |
sub_414D60(); | |
sub_425C10(); | |
return DefWindowProcA(hWnd, Msg, wParam, lParam); | |
case 2u: | |
UnregisterClassA(WndClass.lpszClassName, hInstance); | |
PostQuitMessage(0); | |
return 0; | |
case 0x85u: | |
return 0; | |
default: | |
return DefWindowProcA(hWnd, Msg, wParam, lParam); | |
} | |
return DefWindowProcA(hWnd, Msg, wParam, lParam); | |
} | |
if ( (_BYTE)wParam != -1 ) | |
{ | |
v8 = (unsigned int)&unk_17F0000 & lParam; | |
if ( (signed int)((unsigned int)&unk_17F0000 & lParam) > 3670016 ) | |
{ | |
if ( (_UNKNOWN *)v8 == &unk_11D0000 ) | |
{ | |
dword_470004 |= 0x80000u; | |
return 0; | |
} | |
if ( (_UNKNOWN *)v8 == &unk_1380000 ) | |
{ | |
dword_470004 |= 0x200000u; | |
return 0; | |
} | |
} | |
else | |
{ | |
if ( ((unsigned int)&unk_17F0000 & lParam) == 3670016 ) | |
{ | |
dword_470004 |= 0x100000u; | |
return 0; | |
} | |
if ( v8 == 1900544 ) | |
{ | |
dword_470004 |= 0x40000u; | |
return 0; | |
} | |
if ( v8 == 2752512 ) | |
{ | |
dword_470004 |= 0x10000u; | |
return 0; | |
} | |
if ( v8 == 3538944 ) | |
{ | |
dword_470004 |= 0x20000u; | |
return 0; | |
} | |
} | |
v9 = (unsigned __int8)(dword_47000C + 1); | |
dword_467DC0[(unsigned __int8)dword_47000C] = dword_470004 + ((lParam >> 8) & 0x7F00) + ((lParam >> 9) & 0x8000); | |
if ( v9 != dword_470008 ) | |
{ | |
dword_47000C = v9; | |
return 0; | |
} | |
return 0; | |
} | |
return DefWindowProcA(hWnd, Msg, wParam, lParam); | |
} | |
if ( Msg > 0x200 ) | |
{ | |
switch ( Msg ) | |
{ | |
case 0x20Au: | |
if ( SHIWORD(wParam) <= 0 ) | |
{ | |
if ( SHIWORD(wParam) < 0 ) | |
byte_470017 = 2; | |
} | |
else | |
{ | |
byte_470016 = 2; | |
} | |
v12 = dword_470018 + SHIWORD(wParam); | |
if ( v12 <= -2147418112 ) | |
goto LABEL_86; | |
if ( v12 >= 2147418112 ) | |
{ | |
dword_470018 = 2147418112; | |
} | |
else | |
{ | |
if ( v12 <= -2147418112 ) | |
LABEL_86: | |
dword_470018 = -2147418112; | |
else | |
dword_470018 += SHIWORD(wParam); | |
} | |
break; | |
case 0x201u: | |
if ( !dword_43D018 ) | |
byte_470010 = 3; | |
break; | |
case 0x202u: | |
if ( !dword_43D018 ) | |
byte_470010 &= 0xFDu; | |
break; | |
case 0x204u: | |
if ( !dword_43D018 ) | |
byte_470011 = 3; | |
break; | |
case 0x205u: | |
if ( !dword_43D018 ) | |
byte_470011 &= 0xFDu; | |
break; | |
default: | |
return DefWindowProcA(hWnd, Msg, wParam, lParam); | |
} | |
return DefWindowProcA(hWnd, Msg, wParam, lParam); | |
} | |
if ( Msg == 512 ) | |
{ | |
if ( dword_470034 && dword_43D014 && dword_47001C ) | |
{ | |
v11 = *(void (__stdcall **)(_DWORD))(*(_DWORD *)dword_470034 + 28); | |
dword_43D018 = 1; | |
v11(dword_470034); | |
dword_470038 = 0; | |
dword_47001C((unsigned __int16)lParam, (unsigned int)lParam >> 16); | |
dword_47001C = 0; | |
} | |
return DefWindowProcA(hWnd, Msg, wParam, lParam); | |
} | |
if ( Msg == 257 ) | |
{ | |
if ( (_BYTE)wParam == -1 ) | |
return DefWindowProcA(hWnd, Msg, wParam, lParam); | |
v10 = (unsigned int)&unk_17F0000 & lParam; | |
if ( (signed int)((unsigned int)&unk_17F0000 & lParam) > 3670016 ) | |
{ | |
if ( (_UNKNOWN *)v10 == &unk_11D0000 ) | |
{ | |
dword_470004 &= 0xFFF7FFFFu; | |
} | |
else | |
{ | |
if ( (_UNKNOWN *)v10 == &unk_1380000 ) | |
{ | |
dword_470004 &= 0xFFDFFFFFu; | |
return 0; | |
} | |
} | |
} | |
else | |
{ | |
if ( v10 == 3670016 ) | |
{ | |
dword_470004 &= 0xFFEFFFFFu; | |
return 0; | |
} | |
if ( v10 == 1900544 ) | |
{ | |
dword_470004 &= 0xFFFBFFFFu; | |
return 0; | |
} | |
if ( v10 == 2752512 || v10 == 3538944 ) | |
{ | |
dword_470004 &= 0xFFFCFFFFu; | |
return 0; | |
} | |
} | |
result = 0; | |
} | |
else | |
{ | |
if ( Msg != 258 ) | |
{ | |
if ( Msg == 274 && (wParam == 61696 || wParam == 61776) ) | |
return 0; | |
return DefWindowProcA(hWnd, Msg, wParam, lParam); | |
} | |
if ( dword_47000C != dword_470008 ) | |
dword_467DC0[(unsigned __int8)(dword_47000C - 1)] |= wParam; | |
result = 0; | |
} | |
} | |
return result; | |
} | |
// 43D014: using guessed type int dword_43D014; | |
// 43D018: using guessed type int dword_43D018; | |
// 467DC0: using guessed type int dword_467DC0[]; | |
// 470004: using guessed type int dword_470004; | |
// 470008: using guessed type int dword_470008; | |
// 47000C: using guessed type int dword_47000C; | |
// 470010: using guessed type char byte_470010; | |
// 470011: using guessed type char byte_470011; | |
// 470016: using guessed type char byte_470016; | |
// 470017: using guessed type char byte_470017; | |
// 470018: using guessed type int dword_470018; | |
// 47001C: using guessed type int (__cdecl *dword_47001C)(_DWORD, _DWORD); | |
// 470030: using guessed type int dword_470030; | |
// 470034: using guessed type int dword_470034; | |
// 470038: using guessed type int dword_470038; | |
// 47003C: using guessed type int dword_47003C; | |
// 47004C: using guessed type int (__stdcall *dword_47004C)(_DWORD, _DWORD, _DWORD, _DWORD); | |
//----- (00416030) -------------------------------------------------------- | |
void __usercall sub_416030(const CHAR *a1<eax>) | |
{ | |
const CHAR *v1; // edi@1 | |
void (__stdcall *v2)(_DWORD, _DWORD); // eax@2 | |
int v3; // eax@5 | |
int v4; // eax@9 | |
v1 = a1; | |
if ( dword_46FFFC ) | |
{ | |
v2 = *(void (__stdcall **)(_DWORD, _DWORD))(*(_DWORD *)dword_46FFE8 + 128); | |
dword_46FFFC = 0; | |
v2(dword_46FFE8, dword_467D44); | |
} | |
if ( v1 ) | |
MessageBoxA(hWnd, v1, "Error!", 0); | |
v3 = dword_470034; | |
if ( dword_470034 ) | |
{ | |
if ( hObject ) | |
{ | |
(*(void (__stdcall **)(int, HANDLE))(*(_DWORD *)dword_470034 + 48))(dword_470034, hObject); | |
CloseHandle(hObject); | |
v3 = dword_470034; | |
hObject = 0; | |
} | |
(*(void (__stdcall **)(int))(*(_DWORD *)v3 + 32))(v3); | |
(*(void (__stdcall **)(int))(*(_DWORD *)dword_470034 + 8))(dword_470034); | |
dword_470034 = 0; | |
} | |
v4 = dword_470030; | |
if ( dword_470030 ) | |
{ | |
if ( dword_470024 ) | |
{ | |
(*(void (__stdcall **)(int, HANDLE))(*(_DWORD *)dword_470030 + 48))(dword_470030, dword_470024); | |
CloseHandle(dword_470024); | |
v4 = dword_470030; | |
dword_470024 = 0; | |
} | |
(*(void (__stdcall **)(int))(*(_DWORD *)v4 + 32))(v4); | |
(*(void (__stdcall **)(int))(*(_DWORD *)dword_470030 + 8))(dword_470030); | |
dword_470030 = 0; | |
} | |
if ( dword_47002C ) | |
{ | |
(*(void (__stdcall **)(int))(*(_DWORD *)dword_47002C + 8))(dword_47002C); | |
dword_47002C = 0; | |
} | |
sub_4146D0(); | |
sub_414D60(); | |
sub_425C10(); | |
ExitProcess(0); | |
} | |
// 467D44: using guessed type int dword_467D44; | |
// 46FFE8: using guessed type int dword_46FFE8; | |
// 46FFFC: using guessed type int dword_46FFFC; | |
// 47002C: using guessed type int dword_47002C; | |
// 470030: using guessed type int dword_470030; | |
// 470034: using guessed type int dword_470034; | |
//----- (00416140) -------------------------------------------------------- | |
int __stdcall WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd) | |
{ | |
__m64 v4; // mm5@0 | |
__m128 v5; // xmm1@0 | |
__m128 v6; // xmm7@0 | |
int v8; // esi@4 | |
LPSTR v9; // ecx@5 | |
LPSTR v10; // eax@6 | |
int v11; // edi@6 | |
char v12; // dl@7 | |
int v13; // edi@11 | |
int v14; // eax@11 | |
HINSTANCE v15; // ST28_4@11 | |
int v16; // ST1C_4@11 | |
int v17; // eax@11 | |
HWND v18; // eax@11 | |
int v19; // eax@15 | |
int v20; // eax@18 | |
LARGE_INTEGER Frequency; // [sp+10h] [bp-310h]@4 | |
CHAR Text; // [sp+18h] [bp-308h]@24 | |
int v23; // [sp+114h] [bp-20Ch]@8 | |
int v24[130]; // [sp+118h] [bp-208h]@6 | |
::hInstance = hInstance; | |
dword_471F24 = (int)hPrevInstance; | |
dword_4716E0 = (int)lpCmdLine; | |
dword_46FFDC = sub_415960(); | |
if ( (dword_46FFDC & 0x11) != 17 ) | |
{ | |
MessageBoxA(0, "Sorry, this program requires FPU&RDTSC support (>=Pentium)", "Ace of Spades", 0); | |
return -1; | |
} | |
QueryPerformanceFrequency(&Frequency); | |
flt_467D14 = 1.0 / (double)*(signed __int64 *)&Frequency; | |
QueryPerformanceCounter(&PerformanceCount); | |
memset(byte_471920, 0, 0x100u); | |
memset(byte_471780, 0, 0x100u); | |
v8 = 0; | |
if ( *lpCmdLine ) | |
{ | |
v9 = lpCmdLine + 1; | |
do | |
{ | |
v10 = v9; | |
v24[v8] = (int)v9; | |
v11 = (int)(v9 + 1); | |
do | |
v12 = *v10++; | |
while ( v12 ); | |
++v9; | |
*(&v23 + (_DWORD)(&v10[v8++] - v11)) = 0; | |
} | |
while ( *(v9 - 1) ); | |
} | |
v24[v8] = 0; | |
if ( !GetModuleFileNameA(0, unk_2842480, 0x104u) || sub_42B1E0((const char **)v24) < 0 ) | |
return -1; | |
WndClass.style = 3; | |
WndClass.lpfnWndProc = (WNDPROC)sub_415A70; | |
WndClass.cbWndExtra = 0; | |
WndClass.cbClsExtra = 0; | |
WndClass.hInstance = ::hInstance; | |
WndClass.hIcon = LoadIconA(::hInstance, (LPCSTR)0x7F00); | |
WndClass.hCursor = 0; | |
WndClass.hbrBackground = 0; | |
WndClass.lpszMenuName = 0; | |
WndClass.lpszClassName = "Ace of Spades"; | |
RegisterClassA(&WndClass); | |
dword_471900 = (int)&unk_CA0000; | |
dword_4711C8 = 2 * GetSystemMetrics(7); | |
v13 = 2 * GetSystemMetrics(8); | |
v14 = GetSystemMetrics(4); | |
v15 = ::hInstance; | |
dword_4711CC = v13 + v14; | |
v16 = GetSystemMetrics(1); | |
v17 = GetSystemMetrics(0); | |
v18 = CreateWindowExA(8u, "Ace of Spades", "Ace of Spades", 0x80000000u, 0, 0, v17, v16, 0, 0, v15, 0); | |
hWnd = v18; | |
if ( !v18 ) | |
return 0; | |
ShowWindow(v18, 1); | |
if ( !sub_415770() ) | |
{ | |
DestroyWindow(hWnd); | |
return 0; | |
} | |
sub_415070(); | |
UpdateWindow(hWnd); | |
v19 = DirectInput8Create(::hInstance, 2048, "0€y¿:H¢Mª™]dí6—", &dword_470028, 0); | |
if ( v19 < 0 ) | |
{ | |
wsprintfA(&Text, "initdirectinput failed: %08lx\n", v19); | |
MessageBoxA(hWnd, &Text, "ERROR", 0); | |
LABEL_25: | |
DestroyWindow(hWnd); | |
sub_4146D0(); | |
sub_414D60(); | |
return 0; | |
} | |
dword_47002C = dword_470028; | |
if ( !sub_415520() ) | |
{ | |
LABEL_22: | |
if ( dword_47002C ) | |
{ | |
(*(void (__stdcall **)(int))(*(_DWORD *)dword_47002C + 8))(dword_47002C); | |
dword_47002C = 0; | |
} | |
goto LABEL_25; | |
} | |
if ( !sub_4153A0() ) | |
{ | |
v20 = dword_470030; | |
if ( dword_470030 ) | |
{ | |
if ( dword_470024 ) | |
{ | |
(*(void (__stdcall **)(int, HANDLE))(*(_DWORD *)dword_470030 + 48))(dword_470030, dword_470024); | |
CloseHandle(dword_470024); | |
v20 = dword_470030; | |
dword_470024 = 0; | |
} | |
(*(void (__stdcall **)(int))(*(_DWORD *)v20 + 32))(v20); | |
(*(void (__stdcall **)(int))(*(_DWORD *)dword_470030 + 8))(dword_470030); | |
dword_470030 = 0; | |
} | |
goto LABEL_22; | |
} | |
sub_414320(); | |
sub_42A860(); | |
while ( !dword_46FFD8 ) | |
{ | |
sub_425D00(v4, v5, v6); | |
sub_414320(); | |
} | |
return dword_467D18; | |
} | |
// 436010: using guessed type int __stdcall DirectInput8Create(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD); | |
// 467D14: using guessed type float flt_467D14; | |
// 467D18: using guessed type int dword_467D18; | |
// 46FFD8: using guessed type int dword_46FFD8; | |
// 46FFDC: using guessed type int dword_46FFDC; | |
// 470028: using guessed type int dword_470028; | |
// 47002C: using guessed type int dword_47002C; | |
// 470030: using guessed type int dword_470030; | |
// 4711C8: using guessed type int dword_4711C8; | |
// 4711CC: using guessed type int dword_4711CC; | |
// 4716E0: using guessed type int dword_4716E0; | |
// 471900: using guessed type int dword_471900; | |
// 471F24: using guessed type int dword_471F24; | |
// 416140: using guessed type int var_208[130]; | |
//----- (00416490) -------------------------------------------------------- | |
int __usercall sub_416490<eax>(signed int a1<eax>, signed int a2) | |
{ | |
signed int v2; // esi@1 | |
int v3; // ecx@1 | |
int result; // eax@1 | |
int v5; // edx@1 | |
signed int v6; // edi@1 | |
v2 = a1; | |
v3 = ((unsigned __int16)(a1 >> 15) - (unsigned __int16)(a1 >> 3)) & 0xFFF; | |
result = dword_5F1FA0[v3]; | |
v5 = ((unsigned __int16)(a2 >> 15) - (unsigned __int16)(a2 >> 3)) & 0xFFF; | |
v6 = -1; | |
if ( result >= 0 ) | |
{ | |
while ( dword_471F40[2 * result] != v2 ) | |
{ | |
v6 = result; | |
result = dword_471F44[2 * result]; | |
if ( result < 0 ) | |
return result; | |
} | |
dword_471F40[2 * result] = a2; | |
if ( v3 != v5 ) | |
{ | |
if ( v6 >= 0 ) | |
dword_471F44[2 * v6] = dword_471F44[2 * result]; | |
else | |
dword_5F1FA0[v3] = dword_471F44[2 * result]; | |
dword_471F44[2 * result] = dword_5F1FA0[v5]; | |
dword_5F1FA0[v5] = result; | |
} | |
} | |
return result; | |
} | |
// 471F40: using guessed type int dword_471F40[]; | |
// 471F44: using guessed type int dword_471F44[]; | |
// 5F1FA0: using guessed type int dword_5F1FA0[]; | |
//----- (00416530) -------------------------------------------------------- | |
int __fastcall sub_416530(signed int a1) | |
{ | |
int result; // eax@1 | |
result = dword_5F1FA0[((unsigned __int16)(a1 >> 15) - (unsigned __int16)(a1 >> 3)) & 0xFFF]; | |
if ( result < 0 ) | |
{ | |
LABEL_4: | |
result = -1; | |
} | |
else | |
{ | |
while ( dword_471F40[2 * result] != a1 ) | |
{ | |
result = dword_471F44[2 * result]; | |
if ( result < 0 ) | |
goto LABEL_4; | |
} | |
} | |
return result; | |
} | |
// 471F40: using guessed type int dword_471F40[]; | |
// 471F44: using guessed type int dword_471F44[]; | |
// 5F1FA0: using guessed type int dword_5F1FA0[]; | |
//----- (004165B0) -------------------------------------------------------- | |
void __cdecl sub_4165B0() | |
{ | |
int v0; // ebp@1 | |
int v1; // ebx@4 | |
int v2; // ebx@4 | |
int v3; // ecx@9 | |
int v4; // eax@9 | |
int v5; // edi@10 | |
int v6; // ecx@12 | |
char *v7; // eax@13 | |
int v8; // esi@15 | |
int *v9; // [sp+4h] [bp-8h]@11 | |
int v10; // [sp+8h] [bp-4h]@9 | |
v0 = dword_46FFC4; | |
if ( dword_46FFC4 < 4096 ) | |
{ | |
dword_70277C = (dword_70277C - 1) & ((dword_70277C - 1 <= 0) - 1); | |
++dword_4F1F5C; | |
if ( dword_4F1F5C >= 512 ) | |
dword_4F1F5C = 512; | |
v1 = dword_4F1F60 - 1 < 0; | |
LOBYTE(v1) = dword_4F1F60 - 1 <= 0; | |
v2 = (dword_4F1F60 - 1) & (v1 - 1); | |
dword_4F1F60 = v2; | |
++dword_5F1F80; | |
if ( dword_5F1F80 >= 512 ) | |
dword_5F1F80 = 512; | |
dword_702760 = (dword_702760 - 1) & ((dword_702760 - 1 <= 0) - 1); | |
++dword_6F5FA0; | |
if ( dword_6F5FA0 >= 64 ) | |
dword_6F5FA0 = 64; | |
if ( v2 < dword_5F1F80 ) | |
{ | |
v3 = dword_4F1F5C; | |
v4 = v2 << 9; | |
v10 = v2 << 9; | |
do | |
{ | |
v5 = dword_70277C; | |
if ( dword_70277C < v3 ) | |
{ | |
v9 = &dword_4F1F80[dword_70277C + v4]; | |
do | |
{ | |
v6 = *v9; | |
if ( dword_6F5FA0 > *(_BYTE *)(*v9 + 1) ) | |
{ | |
v7 = (char *)&unk_6F5FC4 + 12 * v0; | |
while ( *(_BYTE *)v6 ) | |
{ | |
v8 = v6; | |
v6 += 4 * *(_BYTE *)v6; | |
if ( dword_702760 < *(_BYTE *)(v6 + 3) ) | |
{ | |
*((_DWORD *)v7 - 1) = v5; | |
*(_DWORD *)v7 = v2; | |
*((_DWORD *)v7 + 1) = *(_BYTE *)(v8 + 1); | |
++v0; | |
v7 += 12; | |
dword_46FFC4 = v0; | |
if ( (signed int)v7 >= (signed int)&unk_701FC4 ) | |
return; | |
} | |
if ( dword_6F5FA0 <= *(_BYTE *)(v6 + 1) ) | |
break; | |
} | |
} | |
v3 = dword_4F1F5C; | |
++v9; | |
++v5; | |
} | |
while ( v5 < dword_4F1F5C ); | |
v4 = v10; | |
} | |
++v2; | |
v4 += 512; | |
v10 = v4; | |
} | |
while ( v2 < dword_5F1F80 ); | |
} | |
} | |
} | |
// 46FFC4: using guessed type int dword_46FFC4; | |
// 4F1F5C: using guessed type int dword_4F1F5C; | |
// 4F1F60: using guessed type int dword_4F1F60; | |
// 4F1F80: using guessed type int dword_4F1F80[]; | |
// 5F1F80: using guessed type int dword_5F1F80; | |
// 6F5FA0: using guessed type int dword_6F5FA0; | |
// 702760: using guessed type int dword_702760; | |
// 70277C: using guessed type int dword_70277C; | |
//----- (00416730) -------------------------------------------------------- | |
void __cdecl sub_416730(int a1) | |
{ | |
int v1; // esi@1 | |
char v2; // dl@2 | |
int v3; // eax@3 | |
int v4; // ecx@3 | |
int *v5; // ecx@8 | |
int v6; // eax@8 | |
int *v7; // eax@8 | |
int v8; // ecx@8 | |
v1 = 0; | |
if ( dword_46FFC0 > 0 ) | |
{ | |
v2 = dword_46847C; | |
while ( 1 ) | |
{ | |
v3 = ((_BYTE)dword_46847C + (_BYTE)v1) & 7; | |
v4 = 6 * v3; | |
if ( dword_46FF00[6 * v3] == *(_DWORD *)a1 ) | |
{ | |
if ( dword_46FF04[v4] == *(_DWORD *)(a1 + 4) && dword_46FF08[v4] == *(_DWORD *)(a1 + 8) ) | |
break; | |
} | |
++v1; | |
if ( v1 >= dword_46FFC0 ) | |
return; | |
} | |
v5 = &dword_46FF00[6 * dword_46847C]; | |
v6 = 3 * v3; | |
dword_46FF00[2 * v6] = dword_46FF00[6 * dword_46847C]; | |
v7 = &dword_46FF00[2 * v6]; | |
v7[1] = v5[1]; | |
v7[2] = v5[2]; | |
v7[3] = v5[3]; | |
v7[4] = v5[4]; | |
v8 = v5[5]; | |
--dword_46FFC0; | |
v7[5] = v8; | |
dword_46847C = (v2 + 1) & 7; | |
} | |
} | |
// 46847C: using guessed type int dword_46847C; | |
// 46FF00: using guessed type int dword_46FF00[]; | |
// 46FF04: using guessed type int dword_46FF04[]; | |
// 46FF08: using guessed type int dword_46FF08[]; | |
// 46FFC0: using guessed type int dword_46FFC0; | |
//----- (004167E0) -------------------------------------------------------- | |
int __usercall sub_4167E0<eax>(int result<eax>, int a2<esi>, int a3) | |
{ | |
int v3; // edi@1 | |
int v4; // eax@2 | |
int i; // ecx@2 | |
int v6; // eax@4 | |
int v7; // edx@5 | |
int v8; // eax@6 | |
int v9; // eax@8 | |
int v10; // edx@13 | |
int j; // eax@15 | |
int v12; // eax@18 | |
int v13; // edx@19 | |
int v14; // edi@20 | |
v3 = result; | |
if ( a2 ) | |
{ | |
v4 = a2 + 4; | |
for ( i = 0; v3 > *(_DWORD *)v4; i += 2 ) | |
v4 += 8; | |
v6 = *(_DWORD *)(a2 + 4 * i); | |
if ( a3 >= v6 ) | |
{ | |
if ( v3 < v6 ) | |
*(_DWORD *)(a2 + 4 * i) = v3; | |
v10 = i + 2; | |
if ( a3 >= *(_DWORD *)(a2 + 4 * i + 8) && *(_DWORD *)(a2 + 4 * i + 4) < 64 ) | |
{ | |
for ( j = a2 + 4 * v10 + 8; a3 >= *(_DWORD *)j; v10 += 2 ) | |
{ | |
if ( *(_DWORD *)(j - 4) >= 64 ) | |
break; | |
j += 8; | |
} | |
v12 = a2 + 4 * v10 + 4; | |
*(_DWORD *)(a2 + 4 * i + 4) = *(_DWORD *)(a2 + 4 * v10 + 4); | |
if ( *(_DWORD *)v12 < 64 ) | |
{ | |
v13 = a2 + 4 * i; | |
do | |
{ | |
v14 = *(_DWORD *)(v12 + 4); | |
v12 += 8; | |
v13 += 8; | |
*(_DWORD *)v13 = v14; | |
*(_DWORD *)(v13 + 4) = *(_DWORD *)v12; | |
} | |
while ( *(_DWORD *)v12 < 64 ); | |
} | |
} | |
result = a2 + 4 * i + 4; | |
if ( a3 > *(_DWORD *)(a2 + 4 * i + 4) ) | |
*(_DWORD *)result = a3; | |
} | |
else | |
{ | |
v7 = i; | |
if ( *(_DWORD *)(a2 + 4 * i + 4) < 64 ) | |
{ | |
v8 = a2 + 4 * i + 4; | |
do | |
{ | |
v8 += 8; | |
v7 += 2; | |
} | |
while ( *(_DWORD *)v8 < 64 ); | |
} | |
v9 = a2 + 4 * v7 + 12; | |
do | |
{ | |
*(_DWORD *)v9 = *(_DWORD *)(v9 - 8); | |
*(_DWORD *)(v9 - 4) = *(_DWORD *)(v9 - 12); | |
v7 -= 2; | |
v9 -= 8; | |
} | |
while ( v7 >= i ); | |
result = a3; | |
*(_DWORD *)(a2 + 4 * i) = v3; | |
*(_DWORD *)(a2 + 4 * i + 4) = a3; | |
} | |
} | |
return result; | |
} | |
//----- (004168D0) -------------------------------------------------------- | |
void __fastcall sub_4168D0(int a1, int a2) | |
{ | |
int v2; // ebx@1 | |
int v3; // eax@2 | |
int i; // ecx@2 | |
int v5; // edi@5 | |
int v6; // eax@6 | |
int v7; // esi@7 | |
int v8; // esi@10 | |
unsigned int v9; // eax@10 | |
int v10; // eax@12 | |
int v11; // eax@15 | |
int j; // esi@15 | |
int v13; // esi@17 | |
int v14; // eax@18 | |
int v15; // edi@19 | |
v2 = dword_702760; | |
if ( !a2 ) | |
return; | |
v3 = a2 + 4; | |
for ( i = 0; dword_702760 >= *(_DWORD *)v3; i += 2 ) | |
v3 += 8; | |
if ( dword_702760 > *(_DWORD *)(a2 + 4 * i) ) | |
{ | |
v5 = a2 + 4 * i + 4; | |
if ( dword_6F5FA0 < *(_DWORD *)(a2 + 4 * i + 4) ) | |
{ | |
v6 = i; | |
if ( *(_DWORD *)v5 < 64 ) | |
{ | |
v7 = a2 + 4 * i + 4; | |
do | |
{ | |
v7 += 8; | |
v6 += 2; | |
} | |
while ( *(_DWORD *)v7 < 64 ); | |
if ( v6 > i ) | |
{ | |
v8 = a2 + 4 * v6 + 12; | |
v9 = ((unsigned int)(v6 - i - 1) >> 1) + 1; | |
do | |
{ | |
*(_DWORD *)v8 = *(_DWORD *)(v8 - 8); | |
*(_DWORD *)(v8 - 4) = *(_DWORD *)(v8 - 12); | |
v8 -= 8; | |
--v9; | |
} | |
while ( v9 ); | |
} | |
} | |
v10 = *(_DWORD *)v5; | |
*(_DWORD *)v5 = v2; | |
*(_DWORD *)(a2 + 4 * i + 12) = v10; | |
*(_DWORD *)(a2 + 4 * i + 8) = dword_6F5FA0; | |
return; | |
} | |
*(_DWORD *)v5 = dword_702760; | |
i += 2; | |
} | |
if ( dword_6F5FA0 >= *(_DWORD *)(a2 + 4 * i + 4) ) | |
{ | |
v11 = i + 2; | |
for ( j = a2 + 4 * (i + 2) + 4; dword_6F5FA0 >= *(_DWORD *)j; v11 += 2 ) | |
j += 8; | |
*(_DWORD *)(a2 + 4 * i) = *(_DWORD *)(a2 + 4 * v11); | |
v13 = a2 + 4 * v11 + 4; | |
*(_DWORD *)(a2 + 4 * i + 4) = *(_DWORD *)(a2 + 4 * v11 + 4); | |
if ( *(_DWORD *)v13 < 64 ) | |
{ | |
v14 = a2 + 4 * i; | |
do | |
{ | |
v15 = *(_DWORD *)(v13 + 4); | |
v13 += 8; | |
v14 += 8; | |
*(_DWORD *)v14 = v15; | |
*(_DWORD *)(v14 + 4) = *(_DWORD *)v13; | |
} | |
while ( *(_DWORD *)v13 < 64 ); | |
} | |
} | |
if ( dword_6F5FA0 > *(_DWORD *)(a2 + 4 * i) ) | |
*(_DWORD *)(a2 + 4 * i) = dword_6F5FA0; | |
} | |
// 6F5FA0: using guessed type int dword_6F5FA0; | |
// 702760: using guessed type int dword_702760; | |
//----- (004169D0) -------------------------------------------------------- | |
unsigned int __cdecl sub_4169D0(int a1, int *a2, int *a3, int *a4, int *a5, int a6, int a7) | |
{ | |
int *v7; // ebx@1 | |
int v8; // eax@1 | |
int v9; // edx@1 | |
int v10; // ebp@1 | |
int v11; // edi@1 | |
int v12; // esi@1 | |
_UNKNOWN *v13; // ecx@1 | |
int v14; // ebp@2 | |
int v15; // eax@4 | |
signed int v16; // edx@4 | |
signed int v17; // esi@4 | |
unsigned int v18; // edi@4 | |
int v19; // eax@13 | |
int *v20; // ecx@15 | |
int *v21; // ecx@18 | |
int *v22; // ecx@21 | |
unsigned int v23; // ebp@30 | |
signed int v24; // ecx@30 | |
int v25; // ecx@31 | |
unsigned int result; // eax@51 | |
int v27; // ebp@53 | |
int v28; // [sp+10h] [bp-1Ch]@1 | |
int *v29; // [sp+14h] [bp-18h]@4 | |
int v30; // [sp+18h] [bp-14h]@7 | |
int v31; // [sp+1Ch] [bp-10h]@4 | |
int *v32; // [sp+20h] [bp-Ch]@7 | |
int v33; // [sp+24h] [bp-8h]@5 | |
int v34; // [sp+28h] [bp-4h]@8 | |
unsigned int v35; // [sp+30h] [bp+4h]@4 | |
v7 = a5; | |
v8 = dword_4F1F80[a6 + (a7 << 9)]; | |
v9 = *(_BYTE *)(v8 + 1); | |
v10 = a1; | |
v11 = *(_BYTE *)(v8 + 2); | |
dword_271AFE4 = v11 + 1; | |
v28 = v11; | |
dword_271AFE0 = v9; | |
dword_271AFE8 = v8 - 4 * v9 + 4; | |
v12 = *(_BYTE *)v8; | |
v13 = &unk_271AFEC; | |
if ( *(_BYTE *)v8 ) | |
{ | |
do | |
{ | |
v14 = *(_BYTE *)(v8 + 4 * v12 + 3); | |
v8 += 4 * v12; | |
*(_DWORD *)v13 = v14 - v12 - v9 + v11 + 2; | |
*((_DWORD *)v13 + 1) = v14; | |
*((_DWORD *)v13 + 2) = v8 - 4 * v14; | |
v11 = *(_BYTE *)(v8 + 2); | |
v9 = *(_BYTE *)(v8 + 1); | |
*((_DWORD *)v13 + 3) = v9; | |
*((_DWORD *)v13 + 4) = v11 + 1; | |
*((_DWORD *)v13 + 5) = v8 - 4 * v9 + 4; | |
v28 = v11; | |
v12 = *(_BYTE *)v8; | |
v13 = (char *)v13 + 24; | |
} | |
while ( *(_BYTE *)v8 ); | |
v7 = a5; | |
v10 = a1; | |
} | |
*((_DWORD *)v13 + 1) = 64; | |
*(_DWORD *)v13 = 64; | |
v15 = *(_DWORD *)v10; | |
byte_271A7E1[0] = *(_DWORD *)v10; | |
v16 = *(_DWORD *)(v10 + 4); | |
v17 = 15; | |
v28 = v15; | |
v31 = v16; | |
word_271A7E2[0] = (unsigned __int8)(v16 - 1); | |
v35 = 0; | |
v29 = &dword_271AFE0; | |
v18 = 4; | |
if ( v16 == 64 ) | |
v33 = -1; | |
else | |
v33 = v16 - 1; | |
v32 = &dword_271AFE4; | |
v30 = v10; | |
while ( 2 ) | |
{ | |
v34 = 0; | |
while ( 1 ) | |
{ | |
if ( v15 >= *v32 ) | |
{ | |
do | |
{ | |
v29 += 3; | |
v32 = v29 + 1; | |
} | |
while ( v15 >= v29[1] ); | |
} | |
if ( v15++ < *v29 ) | |
{ | |
v19 = dword_4F1F4C(&a6, &a7, &v28); | |
v16 = v31; | |
*(_DWORD *)&byte_271A7E0[v18] = v19; | |
v15 = v28; | |
} | |
else | |
{ | |
*(_DWORD *)&byte_271A7E0[v18] = *(_DWORD *)(v29[2] + 4 * v15); | |
} | |
v18 += 4; | |
v28 = v15; | |
if ( v15 >= v16 ) | |
break; | |
v20 = a2; | |
if ( v15 >= *a2 ) | |
{ | |
do | |
{ | |
++v20; | |
v17 ^= 1u; | |
} | |
while ( v15 >= *v20 ); | |
a2 = v20; | |
} | |
v21 = a3; | |
if ( v15 >= *a3 ) | |
{ | |
do | |
{ | |
++v21; | |
v17 ^= 2u; | |
} | |
while ( v15 >= *v21 ); | |
a3 = v21; | |
} | |
v22 = a4; | |
if ( v15 >= *a4 ) | |
{ | |
do | |
{ | |
++v22; | |
v17 ^= 4u; | |
} | |
while ( v15 >= *v22 ); | |
a4 = v22; | |
} | |
for ( ; v15 >= *v7; v17 ^= 8u ) | |
++v7; | |
if ( !v17 && v15 != v33 ) | |
{ | |
if ( v34 ) | |
{ | |
v23 = v35; | |
v24 = v18 - v35; | |
v35 = v18; | |
byte_271A7E0[v23] = v24 >> 2; | |
byte_271A7E1[v18] = v15; | |
LOBYTE(word_271A7E2[v18 / 2]) = v15 - 1; | |
HIBYTE(word_271A7E2[v18 / 2]) = v15; | |
v18 += 4; | |
} | |
else | |
{ | |
*((_BYTE *)word_271A7E2 + v35) = v15 - 1; | |
v34 = 1; | |
} | |
v15 = *a2; | |
v25 = *a3; | |
if ( *a2 < *a3 && v15 < *a4 && v15 < *v7 ) | |
{ | |
if ( v15 < v16 ) | |
{ | |
++a2; | |
v17 = 1; | |
} | |
else | |
{ | |
v15 = v16 - 1; | |
} | |
goto LABEL_50; | |
} | |
v15 = *a4; | |
if ( v25 >= *a4 || v25 >= *v7 ) | |
{ | |
v25 = *v7; | |
if ( v15 < *v7 ) | |
{ | |
if ( v15 < v16 ) | |
{ | |
v17 = 4; | |
++a4; | |
} | |
else | |
{ | |
v15 = v16 - 1; | |
} | |
goto LABEL_50; | |
} | |
if ( v25 < v16 ) | |
{ | |
++v7; | |
v17 = 8; | |
goto LABEL_49; | |
} | |
v15 = v16 - 1; | |
} | |
else | |
{ | |
if ( v25 < v16 ) | |
{ | |
++a3; | |
v17 = 2; | |
LABEL_49: | |
v15 = v25; | |
goto LABEL_50; | |
} | |
v15 = v16 - 1; | |
} | |
LABEL_50: | |
v28 = v15; | |
if ( v15 == 63 ) | |
{ | |
byte_271A7E0[v35] = 0; | |
return v18; | |
} | |
} | |
} | |
if ( v16 < 64 ) | |
{ | |
v30 += 8; | |
byte_271A7E0[v35] = (signed int)(v18 - v35) >> 2; | |
v27 = v30; | |
v15 = *(_DWORD *)v30; | |
byte_271A7E1[v18] = *(_DWORD *)v30; | |
HIBYTE(word_271A7E2[v18 / 2]) = v16; | |
v31 = *(_DWORD *)(v27 + 4); | |
v16 = v31; | |
v35 = v18; | |
LOBYTE(word_271A7E2[v18 / 2]) = v31 - 1; | |
v28 = v15; | |
v18 += 4; | |
continue; | |
} | |
break; | |
} | |
result = v18; | |
byte_271A7E0[v35] = 0; | |
return result; | |
} | |
// 4F1F4C: using guessed type int (__cdecl *dword_4F1F4C)(_DWORD, _DWORD, _DWORD); | |
// 4F1F80: using guessed type int dword_4F1F80[]; | |
// 271A7E2: using guessed type __int16 word_271A7E2[]; | |
// 271AFE0: using guessed type int dword_271AFE0; | |
// 271AFE4: using guessed type int dword_271AFE4; | |
// 271AFE8: using guessed type int dword_271AFE8; | |
//----- (00416D40) -------------------------------------------------------- | |
int __usercall sub_416D40<eax>(__int16 a1<ax>, __int16 a2<cx>, int a3<esi>) | |
{ | |
int result; // eax@1 | |
unsigned __int8 v4; // dl@1 | |
signed int i; // ecx@1 | |
unsigned __int8 v6; // dl@2 | |
result = dword_4F1F80[(a2 & 0x1FF) + ((a1 & 0x1FF) << 9)]; | |
*(_DWORD *)a3 = *(_BYTE *)(result + 1); | |
v4 = *(_BYTE *)result; | |
for ( i = 2; *(_BYTE *)result; v4 = *(_BYTE *)result ) | |
{ | |
result += 4 * v4; | |
v6 = *(_BYTE *)(result + 3); | |
if ( v6 < *(_BYTE *)(result + 1) ) | |
{ | |
*(_DWORD *)(a3 + 4 * i - 4) = v6; | |
*(_DWORD *)(a3 + 4 * i) = *(_BYTE *)(result + 1); | |
i += 2; | |
} | |
} | |
*(_DWORD *)(a3 + 4 * i - 4) = 64; | |
return result; | |
} | |
// 4F1F80: using guessed type int dword_4F1F80[]; | |
//----- (00416DE0) -------------------------------------------------------- | |
int __usercall sub_416DE0<eax>(int a1<eax>, signed int a2<ecx>, int a3) | |
{ | |
int v3; // eax@1 | |
int v4; // edx@5 | |
int result; // eax@6 | |
v3 = dword_4F1F80[a3 + (a1 << 9)]; | |
if ( a2 < *(_BYTE *)(v3 + 1) ) | |
{ | |
LABEL_5: | |
v4 = *(_BYTE *)(v3 + 3); | |
if ( a2 >= v4 ) | |
result = 0; | |
else | |
result = v3 + 4 * (a2 - v4); | |
} | |
else | |
{ | |
while ( a2 > *(_BYTE *)(v3 + 2) && *(_BYTE *)v3 ) | |
{ | |
v3 += 4 * *(_BYTE *)v3; | |
if ( a2 < *(_BYTE *)(v3 + 1) ) | |
goto LABEL_5; | |
} | |
result = v3 + 4 * (a2 - *(_BYTE *)(v3 + 1)) + 4; | |
} | |
return result; | |
} | |
// 4F1F80: using guessed type int dword_4F1F80[]; | |
//----- (00416E30) -------------------------------------------------------- | |
int __usercall sub_416E30<eax>(__int16 a1<ax>, signed int a2<ecx>, __int16 a3) | |
{ | |
int v3; // eax@1 | |
signed int v4; // esi@1 | |
int v5; // esi@3 | |
int v6; // edx@5 | |
v3 = dword_4F1F80[(a3 & 0x1FF) + ((a1 & 0x1FF) << 9)]; | |
v4 = *(_BYTE *)(v3 + 2); | |
if ( a2 <= v4 ) | |
{ | |
LABEL_5: | |
v6 = *(_BYTE *)(v3 + 1); | |
if ( a2 >= v6 ) | |
return v3 + 4 * (a2 - v6) + 4; | |
} | |
else | |
{ | |
while ( *(_BYTE *)v3 ) | |
{ | |
v3 += 4 * *(_BYTE *)v3; | |
v5 = v4 + 1; | |
if ( a2 < *(_BYTE *)(v3 + 3) ) | |
{ | |
if ( a2 <= v5 ) | |
return 0; | |
return v3 + 4 * (a2 - *(_BYTE *)(v3 + 3)); | |
} | |
v4 = *(_BYTE *)(v3 + 2); | |
if ( a2 <= v4 ) | |
goto LABEL_5; | |
} | |
} | |
return 0; | |
} | |
// 4F1F80: using guessed type int dword_4F1F80[]; | |
//----- (00416EA0) -------------------------------------------------------- | |
signed int __usercall sub_416EA0<eax>(signed int result<eax>, int a2<ecx>, int a3) | |
{ | |
int v3; // ecx@1 | |
v3 = dword_4F1F80[a3 + (a2 << 9)]; | |
if ( result <= *(_BYTE *)(v3 + 1) ) | |
{ | |
LABEL_5: | |
result = *(_BYTE *)(v3 + 1); | |
} | |
else | |
{ | |
while ( *(_BYTE *)v3 ) | |
{ | |
v3 += 4 * *(_BYTE *)v3; | |
if ( result < *(_BYTE *)(v3 + 3) ) | |
break; | |
if ( result <= *(_BYTE *)(v3 + 1) ) | |
goto LABEL_5; | |
} | |
} | |
return result; | |
} | |
// 4F1F80: using guessed type int dword_4F1F80[]; | |
//----- (00416F00) -------------------------------------------------------- | |
signed int __usercall sub_416F00<eax>(__int16 a1<ax>, signed int a2<edx>, __int16 a3) | |
{ | |
int v3; // eax@1 | |
signed int result; // eax@7 | |
v3 = dword_4F1F80[(a3 & 0x1FF) + ((a1 & 0x1FF) << 9)]; | |
if ( a2 == 63 ) | |
a2 = 62; | |
if ( a2 < *(_BYTE *)(v3 + 1) ) | |
{ | |
LABEL_7: | |
result = 0; | |
} | |
else | |
{ | |
while ( *(_BYTE *)v3 ) | |
{ | |
v3 += 4 * *(_BYTE *)v3; | |
if ( a2 < *(_BYTE *)(v3 + 3) ) | |
break; | |
if ( a2 < *(_BYTE *)(v3 + 1) ) | |
goto LABEL_7; | |
} | |
result = 1; | |
} | |
return result; | |
} | |
// 4F1F80: using guessed type int dword_4F1F80[]; | |
//----- (00417000) -------------------------------------------------------- | |
signed int __cdecl sub_417000(float a1, float a2, float a3) | |
{ | |
signed int result; // eax@6 | |
signed int v4; // esi@7 | |
int v5; // eax@9 | |
unsigned __int8 v6; // cl@10 | |
int v7; // edx@11 | |
signed int v8; // ecx@11 | |
if ( a1 < 0.0 || a1 >= 512.0 ) | |
goto LABEL_19; | |
if ( a2 < 0.0 ) | |
return 1; | |
if ( a2 >= 512.0 ) | |
{ | |
LABEL_19: | |
result = 1; | |
} | |
else | |
{ | |
if ( a3 >= 0.0 ) | |
{ | |
v4 = (signed int)a3; | |
if ( (signed int)a3 == 63 ) | |
v4 = 62; | |
v5 = dword_4F1F80[(signed int)a1 + ((signed int)a2 << 9)]; | |
if ( v4 < *(_BYTE *)(v5 + 1) ) | |
{ | |
LABEL_13: | |
result = 0; | |
} | |
else | |
{ | |
while ( 1 ) | |
{ | |
v6 = *(_BYTE *)v5; | |
if ( !*(_BYTE *)v5 ) | |
break; | |
v7 = v6; | |
v8 = *(_BYTE *)(v5 + 4 * v6 + 3); | |
v5 += 4 * v7; | |
if ( v4 < v8 ) | |
break; | |
if ( v4 < *(_BYTE *)(v5 + 1) ) | |
goto LABEL_13; | |
} | |
result = 1; | |
} | |
} | |
else | |
{ | |
result = 0; | |
} | |
} | |
return result; | |
} | |
// 4F1F80: using guessed type int dword_4F1F80[]; | |
//----- (004170E0) -------------------------------------------------------- | |
char *__cdecl sub_4170E0(signed int a1) | |
{ | |
signed int v1; // ebx@1 | |
signed int v2; // esi@1 | |
int v3; // eax@1 | |
signed int v4; // edi@3 | |
int v5; // eax@5 | |
signed int v6; // edx@5 | |
signed int i; // ecx@7 | |
int v8; // edx@15 | |
int v9; // eax@15 | |
signed int j; // esi@15 | |
signed int v12; // [sp+10h] [bp-8h]@1 | |
int v13; // [sp+14h] [bp-4h]@1 | |
signed int v14; // [sp+1Ch] [bp+4h]@1 | |
v1 = a1 >> 2; | |
v2 = dword_467B0C; | |
v3 = 2097152 - (a1 >> 2); | |
v12 = 0; | |
v14 = a1 >> 2; | |
v13 = v3; | |
while ( v2 >= v3 ) | |
{ | |
LABEL_13: | |
v2 = 0; | |
dword_467B0C = 0; | |
++v12; | |
if ( v12 >= 2 ) | |
{ | |
_LN49(0xFFFFFFFFu); | |
goto LABEL_15; | |
} | |
} | |
v4 = v2 - 1; | |
while ( (1 << v2) & dword_5F5FA0[v2 >> 5] ) | |
{ | |
LABEL_12: | |
v2 += v1; | |
v4 += v1; | |
if ( v2 >= v3 ) | |
goto LABEL_13; | |
} | |
v5 = __ROL__(1, v4); | |
v6 = v4; | |
if ( !((1 << v4) & dword_5F5FA0[v4 >> 5]) ) | |
{ | |
do | |
{ | |
--v6; | |
v5 = __ROR__(v5, 1); | |
} | |
while ( !(v5 & dword_5F5FA0[v6 >> 5]) ); | |
} | |
v1 = v14; | |
for ( i = v6 + v14; i > v2; --i ) | |
{ | |
if ( (1 << i) & dword_5F5FA0[i >> 5] ) | |
{ | |
v3 = v13; | |
goto LABEL_12; | |
} | |
} | |
LABEL_15: | |
v8 = v6 + 1; | |
v9 = __ROL__(1, v8); | |
dword_467B0C = v8 + v1; | |
for ( j = v8; j < v8 + v1; v9 = __ROL__(v9, 1) ) | |
{ | |
dword_5F5FA0[j >> 5] |= v9; | |
++j; | |
} | |
return (char *)&unk_7027A0 + 4 * v8; | |
} | |
// 467B0C: using guessed type int dword_467B0C; | |
// 5F5FA0: using guessed type int dword_5F5FA0[]; | |
//----- (004173C0) -------------------------------------------------------- | |
int __usercall sub_4173C0<eax>(int a1<eax>, signed int a2, signed int a3, signed int a4) | |
{ | |
int result; // eax@1 | |
int v5; // edx@2 | |
int v6; // edx@2 | |
int v7; // edx@3 | |
result = 245 * a1; | |
flt_468738[result] = 0.0; | |
if ( dword_468804[result] ) | |
{ | |
v7 = dword_273CA48; | |
flt_46873C[result] = -1.0; | |
dword_4684D0[result] = v7; | |
v6 = dword_273CA54; | |
flt_468740[result] = 0.0; | |
flt_468744[result] = 0.0; | |
flt_468748[result] = 0.0; | |
flt_46874C[result] = 1.0; | |
flt_468750[result] = -1.0; | |
} | |
else | |
{ | |
v5 = dword_273CA2C; | |
flt_46873C[result] = 1.0; | |
dword_4684D0[result] = v5; | |
v6 = dword_273CA38; | |
flt_46874C[result] = 1.0; | |
flt_468750[result] = 1.0; | |
flt_468740[result] = 0.0; | |
flt_468744[result] = 0.0; | |
flt_468748[result] = 0.0; | |
} | |
flt_468754[result] = 0.0; | |
dword_4685CC[result] = v6; | |
*(float *)&dword_468758[result] = 0.0; | |
dword_468620[result] = v6; | |
dword_4686C8[result] = dword_273CA0C; | |
dword_4687F8[result] = 0; | |
dword_4687F4[result] = 0; | |
dword_4687F0[result] = 0; | |
dword_4687EC[result] = 0; | |
flt_468720[result] = (double)a2 + 0.5; | |
dword_4687E8[result] = 0; | |
dword_4687E4[result] = 0; | |
dword_4687E0[result] = 0; | |
dword_4687DC[result] = 0; | |
dword_4687FC[result] = 3; | |
dword_468800[result] = (int)&unk_7F7F7F; | |
dword_468808[result] = 0; | |
dword_46880C[result] = 1; | |
dword_468820[result] = 0; | |
flt_468724[result] = (double)a3 + 0.5; | |
dword_46881C[result] = 0; | |
dword_468818[result] = 0; | |
dword_468814[result] = 0; | |
flt_468728[result] = (double)a4 - 2.400000095367432; | |
flt_468734[result] = 0.0; | |
flt_468730[result] = 0.0; | |
flt_46872C[result] = 0.0; | |
return result * 4; | |
} | |
// 4684D0: using guessed type int dword_4684D0[]; | |
// 4685CC: using guessed type int dword_4685CC[]; | |
// 468620: using guessed type int dword_468620[]; | |
// 4686C8: using guessed type int dword_4686C8[]; | |
// 468720: using guessed type float flt_468720[]; | |
// 468724: using guessed type float flt_468724[]; | |
// 468728: using guessed type float flt_468728[]; | |
// 46872C: using guessed type float flt_46872C[]; | |
// 468730: using guessed type float flt_468730[]; | |
// 468734: using guessed type float flt_468734[]; | |
// 468738: using guessed type float flt_468738[]; | |
// 46873C: using guessed type float flt_46873C[]; | |
// 468740: using guessed type float flt_468740[]; | |
// 468744: using guessed type float flt_468744[]; | |
// 468748: using guessed type float flt_468748[]; | |
// 46874C: using guessed type float flt_46874C[]; | |
// 468750: using guessed type float flt_468750[]; | |
// 468754: using guessed type float flt_468754[]; | |
// 468758: using guessed type int dword_468758[]; | |
// 4687DC: using guessed type int dword_4687DC[]; | |
// 4687E0: using guessed type int dword_4687E0[]; | |
// 4687E4: using guessed type int dword_4687E4[]; | |
// 4687E8: using guessed type int dword_4687E8[]; | |
// 4687EC: using guessed type int dword_4687EC[]; | |
// 4687F0: using guessed type int dword_4687F0[]; | |
// 4687F4: using guessed type int dword_4687F4[]; | |
// 4687F8: using guessed type int dword_4687F8[]; | |
// 4687FC: using guessed type int dword_4687FC[]; | |
// 468800: using guessed type int dword_468800[]; | |
// 468804: using guessed type int dword_468804[]; | |
// 468808: using guessed type int dword_468808[]; | |
// 46880C: using guessed type int dword_46880C[]; | |
// 468814: using guessed type int dword_468814[]; | |
// 468818: using guessed type int dword_468818[]; | |
// 46881C: using guessed type int dword_46881C[]; | |
// 468820: using guessed type int dword_468820[]; | |
// 273CA0C: using guessed type int dword_273CA0C; | |
// 273CA2C: using guessed type int dword_273CA2C; | |
// 273CA38: using guessed type int dword_273CA38; | |
// 273CA48: using guessed type int dword_273CA48; | |
// 273CA54: using guessed type int dword_273CA54; | |
//----- (00417530) -------------------------------------------------------- | |
int __usercall sub_417530<eax>(int a1<eax>, int a2<ecx>) | |
{ | |
int result; // eax@1 | |
int v3; // edx@2 | |
int v4; // ecx@2 | |
int v5; // ecx@2 | |
int v6; // edx@2 | |
int v7; // ecx@2 | |
int v8; // ecx@3 | |
int v9; // edx@3 | |
int v10; // ecx@3 | |
int v11; // edx@3 | |
result = 245 * a1; | |
dword_468804[result] = a2; | |
if ( a2 ) | |
{ | |
v8 = dword_273CA54; | |
dword_4684D0[result] = dword_273CA48; | |
v9 = dword_273CA44; | |
dword_468620[result] = v8; | |
dword_4685CC[result] = v8; | |
dword_468524[result] = dword_273CA50; | |
v10 = dword_273CA5C; | |
dword_468578[result] = v9; | |
v11 = dword_273CA60; | |
dword_468674[result] = v10; | |
dword_46871C[result] = v11; | |
} | |
else | |
{ | |
v3 = dword_273CA34; | |
dword_4684D0[result] = dword_273CA2C; | |
v4 = dword_273CA38; | |
dword_468620[result] = dword_273CA38; | |
dword_4685CC[result] = v4; | |
v5 = dword_273CA28; | |
dword_468524[result] = v3; | |
v6 = dword_273CA40; | |
dword_468578[result] = v5; | |
v7 = dword_273CA64; | |
dword_468674[result] = v6; | |
dword_46871C[result] = v7; | |
} | |
return result * 4; | |
} | |
// 4684D0: using guessed type int dword_4684D0[]; | |
// 468524: using guessed type int dword_468524[]; | |
// 468578: using guessed type int dword_468578[]; | |
// 4685CC: using guessed type int dword_4685CC[]; | |
// 468620: using guessed type int dword_468620[]; | |
// 468674: using guessed type int dword_468674[]; | |
// 46871C: using guessed type int dword_46871C[]; | |
// 468804: using guessed type int dword_468804[]; | |
// 273CA28: using guessed type int dword_273CA28; | |
// 273CA2C: using guessed type int dword_273CA2C; | |
// 273CA34: using guessed type int dword_273CA34; | |
// 273CA38: using guessed type int dword_273CA38; | |
// 273CA40: using guessed type int dword_273CA40; | |
// 273CA44: using guessed type int dword_273CA44; | |
// 273CA48: using guessed type int dword_273CA48; | |
// 273CA50: using guessed type int dword_273CA50; | |
// 273CA54: using guessed type int dword_273CA54; | |
// 273CA5C: using guessed type int dword_273CA5C; | |
// 273CA60: using guessed type int dword_273CA60; | |
// 273CA64: using guessed type int dword_273CA64; | |
//----- (00417640) -------------------------------------------------------- | |
signed int __usercall sub_417640<eax>(int a1<eax>, int a2<ecx>) | |
{ | |
int v2; // esi@1 | |
int v3; // edx@1 | |
int v4; // eax@1 | |
int v6; // edi@3 | |
int v7; // ebp@5 | |
int v8; // ecx@8 | |
int v9; // eax@8 | |
int v10; // ecx@8 | |
int v11; // eax@14 | |
int v12; // ebp@14 | |
int v13; // edx@15 | |
int v14; // eax@17 | |
int v15; // edi@17 | |
void *v16; // eax@17 | |
int v17; // ebx@21 | |
double v18; // st7@21 | |
int v19; // ecx@21 | |
int v20; // ebp@21 | |
int v21; // edx@21 | |
int v22; // ecx@21 | |
int v23; // edi@21 | |
int v24; // esi@21 | |
int v25; // edx@22 | |
int v26; // eax@23 | |
signed int v27; // ecx@23 | |
int v28; // edx@24 | |
int v29; // eax@24 | |
signed int v30; // eax@30 | |
int v31; // ebp@31 | |
int v32; // edx@32 | |
int v33; // edi@32 | |
int v34; // ecx@32 | |
int v35; // ebx@34 | |
int v36; // edx@36 | |
int v37; // ecx@39 | |
int v38; // ecx@45 | |
int v39; // ecx@51 | |
int v40; // ecx@57 | |
int v41; // ecx@65 | |
int v42; // eax@65 | |
int v43; // ebx@66 | |
int v44; // edi@67 | |
int v45; // edx@67 | |
int v46; // ecx@67 | |
int v47; // esi@69 | |
int v48; // edx@71 | |
int v49; // ecx@74 | |
int v50; // ecx@80 | |
int v51; // ecx@86 | |
int v52; // ecx@92 | |
signed int v53; // edi@105 | |
int v54; // ecx@106 | |
int v55; // ebx@107 | |
int v56; // eax@107 | |
signed int v57; // ebp@113 | |
signed int i; // esi@113 | |
int v59; // eax@115 | |
int v60; // eax@115 | |
int v61; // edx@115 | |
unsigned int v62; // eax@116 | |
int v63; // ecx@116 | |
int v64; // ecx@118 | |
int v65; // ebp@118 | |
int j; // eax@118 | |
int v67; // [sp+4h] [bp-5Ch]@21 | |
int v68; // [sp+8h] [bp-58h]@21 | |
int v69; // [sp+Ch] [bp-54h]@1 | |
int v70; // [sp+10h] [bp-50h]@22 | |
int v71; // [sp+14h] [bp-4Ch]@3 | |
int v72; // [sp+18h] [bp-48h]@3 | |
signed int v73; // [sp+1Ch] [bp-44h]@8 | |
int v74; // [sp+20h] [bp-40h]@23 | |
int v75; // [sp+24h] [bp-3Ch]@24 | |
int v76; // [sp+28h] [bp-38h]@23 | |
int v77; // [sp+2Ch] [bp-34h]@6 | |
int v78; // [sp+30h] [bp-30h]@5 | |
int *v79; // [sp+3Ch] [bp-24h]@103 | |
int v80; // [sp+40h] [bp-20h]@10 | |
int v81; // [sp+40h] [bp-20h]@21 | |
int *v82; // [sp+40h] [bp-20h]@104 | |
int v83; // [sp+44h] [bp-1Ch]@21 | |
__int16 v84; // [sp+48h] [bp-18h]@21 | |
int v85; // [sp+4Ch] [bp-14h]@21 | |
int v86; // [sp+4Ch] [bp-14h]@103 | |
int v87; // [sp+50h] [bp-10h]@21 | |
int v88; // [sp+50h] [bp-10h]@104 | |
v2 = a1; | |
v3 = dword_701FFC[15 * a2]; | |
v4 = 15 * a2; | |
v69 = 15 * a2; | |
if ( v3 < 0 ) | |
return 0; | |
v6 = 511; | |
v71 = dword_702000[v4] & ((dword_702000[v4] <= 0) - 1); | |
v72 = dword_70200C[v4]; | |
if ( v72 >= 511 ) | |
v72 = 511; | |
v7 = dword_702004[v4] & ((dword_702004[v4] <= 0) - 1); | |
v78 = dword_702004[v4] & ((dword_702004[v4] <= 0) - 1); | |
if ( dword_702010[v4] >= 511 ) | |
{ | |
v77 = 511; | |
} | |
else | |
{ | |
v6 = dword_702010[v4]; | |
v77 = dword_702010[v4]; | |
} | |
v8 = dword_702008[v4]; | |
v9 = dword_702014[v4]; | |
v10 = ((v8 <= 0) - 1) & v8; | |
v73 = v10; | |
if ( v9 >= 63 ) | |
v9 = 63; | |
v80 = v9; | |
if ( v71 > v72 || v7 > v6 || v10 > v9 ) | |
return 0; | |
if ( v2 ) | |
{ | |
v11 = dword_701FF8[v69]; | |
v12 = dword_701FF8[v69] - v3; | |
if ( v11 < v3 ) | |
{ | |
do | |
{ | |
v13 = *(_BYTE *)dword_471F40[2 * v11++]; | |
v12 += v13; | |
} | |
while ( v11 < dword_701FFC[v69] ); | |
} | |
if ( v12 <= 0 | |
|| (*(_DWORD *)v2 = dword_701FE0[v69], | |
*(_DWORD *)(v2 + 4) = dword_701FE4[v69], | |
v14 = dword_701FE8[v69], | |
*(float *)(v2 + 12) = 1.0, | |
v15 = v72 - v71 + 1, | |
*(float *)(v2 + 24) = 0.0, | |
*(float *)(v2 + 36) = 0.0, | |
*(float *)(v2 + 16) = 0.0, | |
*(float *)(v2 + 40) = 0.0, | |
*(float *)(v2 + 20) = 0.0, | |
*(float *)(v2 + 32) = 0.0, | |
*(float *)(v2 + 28) = 1.0, | |
*(float *)(v2 + 44) = 1.0, | |
*(_DWORD *)(v2 + 8) = v14, | |
(v16 = malloc(2 * (v15 * (v77 - v78 + 3) + 4 * v12 + 20))) == 0) ) | |
return 0; | |
if ( (unsigned __int8)v16 & 3 ) | |
{ | |
free(v16); | |
return 0; | |
} | |
*(_DWORD *)(v2 + 80) = v16; | |
*((_DWORD *)v16 + 2) = v80 - v73 + 1; | |
*(_DWORD *)v16 = v15; | |
*((_DWORD *)v16 + 1) = v77 - v78 + 1; | |
v17 = v71; | |
v68 = v71; | |
*((float *)v16 + 3) = *(float *)v2 - (double)v71; | |
*((float *)v16 + 4) = *(float *)(v2 + 4) - (double)v78; | |
v18 = *(float *)(v2 + 8); | |
*((_DWORD *)v16 + 6) = v12; | |
*((float *)v16 + 5) = v18 - (double)v73; | |
v19 = *(_DWORD *)(v2 + 80) + 40; | |
v20 = v19 + 8 * v12; | |
*((_DWORD *)v16 + 7) = v19; | |
v21 = *((_DWORD *)v16 + 7); | |
v22 = v20 + 4 * v15; | |
v23 = v69 * 4; | |
v24 = 0; | |
*((_DWORD *)v16 + 8) = v20; | |
*((_DWORD *)v16 + 9) = v22; | |
v81 = v21; | |
v67 = 0; | |
v85 = v20; | |
v87 = 0; | |
v83 = v22; | |
v84 = 0; | |
do | |
{ | |
v25 = v78; | |
v70 = v78; | |
do | |
{ | |
v74 = v25 << 9; | |
v26 = v17 + (v25 << 9); | |
v27 = dword_4F1F80[v26]; | |
v76 = dword_4F1F80[v26]; | |
if ( *(_BYTE *)v27 ) | |
{ | |
do | |
{ | |
v28 = v27 + 4 * *(_BYTE *)v27; | |
v29 = dword_5F1FA0[((unsigned __int16)(v27 >> 15) - (unsigned __int16)(v27 >> 3)) & 0xFFF]; | |
v75 = v27 + 4 * *(_BYTE *)v27; | |
if ( v29 < 0 ) | |
{ | |
LABEL_27: | |
v29 = -1; | |
} | |
else | |
{ | |
while ( dword_471F40[2 * v29] != v27 ) | |
{ | |
v29 = dword_471F44[2 * v29]; | |
if ( v29 < 0 ) | |
goto LABEL_27; | |
} | |
} | |
if ( v29 < *(unsigned int *)((char *)dword_701FFC + v23) && v29 >= *(int *)((char *)dword_701FF8 + v23) ) | |
{ | |
v30 = *(_BYTE *)(v27 + 1); | |
if ( v30 <= *(_BYTE *)(v27 + 2) ) | |
{ | |
v31 = v81 + 8 * v67 + 6; | |
do | |
{ | |
v32 = *(_BYTE *)(v76 + 1); | |
v33 = *(_BYTE *)(v76 + 4 * (v30 - v32) + 7); | |
v34 = v33 * *(_BYTE *)(v76 + 4 * (v30 - v32) + 6) >> 7; | |
if ( v34 >= 255 ) | |
v34 = 255; | |
v35 = v33 * *(_BYTE *)(v76 + 4 * (v30 - v32) + 5) >> 7; | |
if ( v35 >= 255 ) | |
v35 = 255; | |
v36 = v33 * *(_BYTE *)(v76 + 4 * (v30 - v32) + 4) >> 7; | |
if ( v36 >= 255 ) | |
v36 = 255; | |
*(_DWORD *)(v31 - 6) = v36 | ((v35 | (v34 << 8)) << 8); | |
*(_WORD *)(v31 - 2) = v30 - v73; | |
*(_BYTE *)v31 = 0; | |
if ( (v70 | (unsigned int)(v68 - 1)) >= 0x200 | |
|| (v37 = dword_4F1F80[v68 + v74 - 1], v30 < *(_BYTE *)(v37 + 1)) ) | |
{ | |
LABEL_43: | |
*(_BYTE *)v31 = 1; | |
} | |
else | |
{ | |
while ( *(_BYTE *)v37 ) | |
{ | |
v37 += 4 * *(_BYTE *)v37; | |
if ( v30 < *(_BYTE *)(v37 + 3) ) | |
break; | |
if ( v30 < *(_BYTE *)(v37 + 1) ) | |
goto LABEL_43; | |
} | |
} | |
if ( (v70 | (unsigned int)(v68 + 1)) >= 0x200 | |
|| (v38 = dword_4F1F80[v68 + v74 + 1], v30 < *(_BYTE *)(v38 + 1)) ) | |
{ | |
LABEL_49: | |
*(_BYTE *)v31 |= 2u; | |
} | |
else | |
{ | |
while ( *(_BYTE *)v38 ) | |
{ | |
v38 += 4 * *(_BYTE *)v38; | |
if ( v30 < *(_BYTE *)(v38 + 3) ) | |
break; | |
if ( v30 < *(_BYTE *)(v38 + 1) ) | |
goto LABEL_49; | |
} | |
} | |
if ( (v68 | (unsigned int)(v70 - 1)) >= 0x200 | |
|| (v39 = dword_4F1F80[v68 + ((v70 - 1) << 9)], v30 < *(_BYTE *)(v39 + 1)) ) | |
{ | |
LABEL_55: | |
*(_BYTE *)v31 |= 4u; | |
} | |
else | |
{ | |
while ( *(_BYTE *)v39 ) | |
{ | |
v39 += 4 * *(_BYTE *)v39; | |
if ( v30 < *(_BYTE *)(v39 + 3) ) | |
break; | |
if ( v30 < *(_BYTE *)(v39 + 1) ) | |
goto LABEL_55; | |
} | |
} | |
if ( (v68 | (unsigned int)(v70 + 1)) >= 0x200 | |
|| (v40 = dword_4F1F80[v68 + ((v70 + 1) << 9)], v30 < *(_BYTE *)(v40 + 1)) ) | |
{ | |
LABEL_61: | |
*(_BYTE *)v31 |= 8u; | |
} | |
else | |
{ | |
while ( *(_BYTE *)v40 ) | |
{ | |
v40 += 4 * *(_BYTE *)v40; | |
if ( v30 < *(_BYTE *)(v40 + 3) ) | |
break; | |
if ( v30 < *(_BYTE *)(v40 + 1) ) | |
goto LABEL_61; | |
} | |
} | |
if ( v30 == *(_BYTE *)(v76 + 1) ) | |
*(_BYTE *)v31 |= 0x10u; | |
++v67; | |
*(_BYTE *)(v31 + 1) = 0; | |
++v30; | |
v31 += 8; | |
} | |
while ( v30 <= *(_BYTE *)(v76 + 2) ); | |
} | |
v41 = *(_BYTE *)(v75 + 3); | |
v42 = *(_BYTE *)(v76 + 2) - *(_BYTE *)(v76 + 1) - *(_BYTE *)v76 + v41 + 2; | |
if ( v42 < v41 ) | |
{ | |
v43 = v81 + 8 * v67 + 6; | |
do | |
{ | |
v44 = *(_BYTE *)(v75 + 4 * (v42 - v41) + 3); | |
v45 = v75 + 4 * (v42 - v41); | |
v46 = v44 * *(_BYTE *)(v45 + 2) >> 7; | |
if ( v46 >= 255 ) | |
v46 = 255; | |
v47 = v44 * *(_BYTE *)(v45 + 1) >> 7; | |
if ( v47 >= 255 ) | |
v47 = 255; | |
v48 = v44 * *(_BYTE *)v45 >> 7; | |
if ( v48 >= 255 ) | |
v48 = 255; | |
*(_DWORD *)(v43 - 6) = v48 | ((v47 | (v46 << 8)) << 8); | |
*(_WORD *)(v43 - 2) = v42 - v73; | |
*(_BYTE *)v43 = 0; | |
if ( (v70 | (unsigned int)(v68 - 1)) >= 0x200 | |
|| (v49 = dword_4F1F80[v74 + v68 - 1], v42 < *(_BYTE *)(v49 + 1)) ) | |
{ | |
LABEL_78: | |
*(_BYTE *)v43 = 1; | |
} | |
else | |
{ | |
while ( *(_BYTE *)v49 ) | |
{ | |
v49 += 4 * *(_BYTE *)v49; | |
if ( v42 < *(_BYTE *)(v49 + 3) ) | |
break; | |
if ( v42 < *(_BYTE *)(v49 + 1) ) | |
goto LABEL_78; | |
} | |
} | |
if ( (v70 | (unsigned int)(v68 + 1)) >= 0x200 | |
|| (v50 = dword_4F1F80[v74 + v68 + 1], v42 < *(_BYTE *)(v50 + 1)) ) | |
{ | |
LABEL_84: | |
*(_BYTE *)v43 |= 2u; | |
} | |
else | |
{ | |
while ( *(_BYTE *)v50 ) | |
{ | |
v50 += 4 * *(_BYTE *)v50; | |
if ( v42 < *(_BYTE *)(v50 + 3) ) | |
break; | |
if ( v42 < *(_BYTE *)(v50 + 1) ) | |
goto LABEL_84; | |
} | |
} | |
if ( (v68 | (unsigned int)(v70 - 1)) >= 0x200 | |
|| (v51 = dword_4F1F80[v68 + ((v70 - 1) << 9)], v42 < *(_BYTE *)(v51 + 1)) ) | |
{ | |
LABEL_90: | |
*(_BYTE *)v43 |= 4u; | |
} | |
else | |
{ | |
while ( *(_BYTE *)v51 ) | |
{ | |
v51 += 4 * *(_BYTE *)v51; | |
if ( v42 < *(_BYTE *)(v51 + 3) ) | |
break; | |
if ( v42 < *(_BYTE *)(v51 + 1) ) | |
goto LABEL_90; | |
} | |
} | |
if ( (v68 | (unsigned int)(v70 + 1)) >= 0x200 | |
|| (v52 = dword_4F1F80[v68 + ((v70 + 1) << 9)], v42 < *(_BYTE *)(v52 + 1)) ) | |
{ | |
LABEL_96: | |
*(_BYTE *)v43 |= 8u; | |
} | |
else | |
{ | |
while ( *(_BYTE *)v52 ) | |
{ | |
v52 += 4 * *(_BYTE *)v52; | |
if ( v42 < *(_BYTE *)(v52 + 3) ) | |
break; | |
if ( v42 < *(_BYTE *)(v52 + 1) ) | |
goto LABEL_96; | |
} | |
} | |
++v67; | |
*(_BYTE *)(v43 + 1) = 0; | |
v41 = *(_BYTE *)(v75 + 3); | |
++v42; | |
v43 += 8; | |
} | |
while ( v42 < v41 ); | |
} | |
*(_BYTE *)(v81 + 8 * v67 - 2) |= 0x20u; | |
v28 = v75; | |
v23 = v69 * 4; | |
v24 = v67; | |
} | |
v27 = v28; | |
v76 = v28; | |
} | |
while ( *(_BYTE *)v28 ); | |
v25 = v70; | |
v17 = v68; | |
} | |
++v25; | |
*(_WORD *)v83 = v24 - v84; | |
v83 += 2; | |
v84 = v24; | |
v70 = v25; | |
} | |
while ( v25 <= v77 ); | |
++v17; | |
*(_DWORD *)v85 = v24 - v87; | |
v85 += 4; | |
v87 = v24; | |
v68 = v17; | |
} | |
while ( v17 <= v72 ); | |
} | |
v79 = &dword_4F1F80[v71 + (v78 << 9)]; | |
v86 = v72 - v71 + 1; | |
do | |
{ | |
v82 = v79; | |
v88 = v77 - v78 + 1; | |
do | |
{ | |
v53 = *v82; | |
if ( *(_BYTE *)*v82 ) | |
{ | |
v54 = v69 * 4; | |
do | |
{ | |
v55 = v53 + 4 * *(_BYTE *)v53; | |
v56 = dword_5F1FA0[((unsigned __int16)(v53 >> 15) - (unsigned __int16)(v53 >> 3)) & 0xFFF]; | |
if ( v56 < 0 ) | |
{ | |
LABEL_110: | |
v56 = -1; | |
} | |
else | |
{ | |
while ( dword_471F40[2 * v56] != v53 ) | |
{ | |
v56 = dword_471F44[2 * v56]; | |
if ( v56 < 0 ) | |
goto LABEL_110; | |
} | |
} | |
if ( v56 < *(unsigned int *)((char *)dword_701FFC + v54) && v56 >= *(int *)((char *)dword_701FF8 + v54) ) | |
{ | |
sub_416490(v53, 0); | |
v57 = v55 - v53; | |
for ( i = v55; *(_BYTE *)i; i += 4 * *(_BYTE *)i ) | |
sub_416490(i, i - v57); | |
v59 = 4 * (*(_BYTE *)(i + 2) - *(_BYTE *)(i + 1)) + 8; | |
*(_BYTE *)v53 = *(_BYTE *)v55; | |
*(_BYTE *)(v53 + 1) = *(_BYTE *)(v55 + 1); | |
v60 = i + v59 - v55; | |
v61 = 4; | |
*(_BYTE *)(v53 + 2) = *(_BYTE *)(v55 + 2); | |
if ( v60 > 4 ) | |
{ | |
v62 = ((unsigned int)(v60 - 5) >> 2) + 1; | |
v63 = v53 + 4; | |
v61 = 4 * v62 + 4; | |
do | |
{ | |
*(_DWORD *)v63 = *(_DWORD *)(v63 + v57); | |
v63 += 4; | |
--v62; | |
} | |
while ( v62 ); | |
} | |
v64 = (v61 + v53 - (signed int)&unk_7027A0) >> 2; | |
v65 = v64 + (v57 >> 2); | |
for ( j = __ROL__(1, v64); v64 < v65; j = __ROL__(j, 1) ) | |
{ | |
dword_5F5FA0[v64 >> 5] &= ~j; | |
++v64; | |
} | |
v54 = v69 * 4; | |
v55 = v53; | |
} | |
v53 = v55; | |
} | |
while ( *(_BYTE *)v55 ); | |
} | |
v82 += 512; | |
--v88; | |
} | |
while ( v88 ); | |
++v79; | |
--v86; | |
} | |
while ( v86 ); | |
dword_701FFC[v69] = -2; | |
return 1; | |
} | |
// 471F40: using guessed type int dword_471F40[]; | |
// 471F44: using guessed type int dword_471F44[]; | |
// 4F1F80: using guessed type int dword_4F1F80[]; | |
// 5F1FA0: using guessed type int dword_5F1FA0[]; | |
// 5F5FA0: using guessed type int dword_5F5FA0[]; | |
// 701FE0: using guessed type int dword_701FE0[]; | |
// 701FE4: using guessed type int dword_701FE4[]; | |
// 701FE8: using guessed type int dword_701FE8[]; | |
// 701FF8: using guessed type int dword_701FF8[]; | |
// 701FFC: using guessed type int dword_701FFC[]; | |
// 702000: using guessed type int dword_702000[]; | |
// 702004: using guessed type int dword_702004[]; | |
// 702008: using guessed type int dword_702008[]; | |
// 70200C: using guessed type int dword_70200C[]; | |
// 702010: using guessed type int dword_702010[]; | |
// 702014: using guessed type int dword_702014[]; | |
//----- (00417EE0) -------------------------------------------------------- | |
signed int __cdecl sub_417EE0(int a1) | |
{ | |
int v1; // ebp@1 | |
signed int v2; // esi@1 | |
int v3; // edi@1 | |
int v4; // eax@1 | |
signed int v5; // ecx@4 | |
signed int v6; // ecx@5 | |
signed int result; // eax@6 | |
int v8; // edx@7 | |
int v9; // eax@7 | |
int v10; // edx@8 | |
int v11; // ebx@8 | |
signed int v12; // eax@9 | |
int v13; // esi@11 | |
int v14; // ecx@13 | |
int v15; // esi@13 | |
int v16; // edi@24 | |
unsigned __int8 v17; // al@24 | |
signed int v18; // esi@25 | |
signed int v19; // ecx@26 | |
signed int v20; // edx@26 | |
int v21; // eax@28 | |
int v22; // edx@28 | |
int v23; // edx@33 | |
int v24; // ecx@48 | |
int v25; // ecx@49 | |
int v26; // [sp+Ch] [bp-38h]@0 | |
int v27; // [sp+10h] [bp-34h]@8 | |
signed int v28; // [sp+14h] [bp-30h]@11 | |
signed int v29; // [sp+18h] [bp-2Ch]@9 | |
int v30; // [sp+1Ch] [bp-28h]@13 | |
signed int v31; // [sp+20h] [bp-24h]@8 | |
int v32; // [sp+24h] [bp-20h]@7 | |
int v33; // [sp+28h] [bp-1Ch]@13 | |
signed int v34; // [sp+2Ch] [bp-18h]@8 | |
signed int v35; // [sp+30h] [bp-14h]@8 | |
signed int v36; // [sp+34h] [bp-10h]@8 | |
int v37; // [sp+38h] [bp-Ch]@1 | |
int v38; // [sp+3Ch] [bp-8h]@1 | |
float v39; // [sp+48h] [bp+4h]@49 | |
v1 = a1; | |
v2 = *(_DWORD *)(a1 + 20); | |
v38 = *(_DWORD *)(a1 + 16); | |
v3 = *(_DWORD *)(a1 + 12); | |
v4 = dword_4F1F80[v3 + (v38 << 9)]; | |
v37 = *(_DWORD *)(a1 + 12); | |
do | |
{ | |
if ( v2 < *(_BYTE *)(v4 + 1) || !*(_BYTE *)v4 ) | |
return 0; | |
v5 = v4; | |
v4 += 4 * *(_BYTE *)v4; | |
} | |
while ( v2 >= *(_BYTE *)(v4 + 3) ); | |
if ( sub_416530(v5) >= 0 ) | |
return 0; | |
v8 = dword_43D024; | |
v9 = ((unsigned __int16)(v6 >> 15) - (unsigned __int16)(v6 >> 3)) & 0xFFF; | |
dword_471F44[2 * dword_43D024] = dword_5F1FA0[v9]; | |
v32 = v8; | |
dword_5F1FA0[v9] = v8; | |
dword_471F40[2 * v8] = v6; | |
dword_43D024 = v8 + 1; | |
if ( v8 + 1 >= 65536 ) | |
{ | |
LABEL_41: | |
result = 0; | |
} | |
else | |
{ | |
v10 = v38; | |
v11 = a1; | |
*(_DWORD *)(a1 + 32) = v3 - 1; | |
*(_DWORD *)(a1 + 36) = v38 - 1; | |
*(_DWORD *)(a1 + 40) = v2 - 1; | |
v36 = v2; | |
*(_DWORD *)(a1 + 44) = v3 + 1; | |
v31 = 1; | |
v34 = v3; | |
v35 = v38; | |
*(_DWORD *)(a1 + 48) = v38 + 1; | |
*(_DWORD *)(a1 + 52) = v2 + 1; | |
v27 = 0; | |
while ( 1 ) | |
{ | |
v12 = *(_BYTE *)(v6 + 1); | |
v29 = v12; | |
if ( v12 < *(_DWORD *)(v1 + 40) ) | |
*(_DWORD *)(v1 + 40) = v12; | |
v13 = *(_BYTE *)(v6 + 4 * *(_BYTE *)v6 + 3); | |
v28 = v13; | |
if ( v13 > *(_DWORD *)(v1 + 52) ) | |
*(_DWORD *)(v1 + 52) = v13; | |
v33 = *(_BYTE *)(v6 + 2) + 1 > v13; | |
v34 += v3 * (v13 - v12); | |
v31 += v13 - v12; | |
v35 += v10 * (v13 - v12); | |
v36 += (v13 - v12) * (v13 + v12 - 1) >> 1; | |
v14 = v27; | |
v15 = 0; | |
v30 = 0; | |
do | |
{ | |
switch ( v15 ) | |
{ | |
case 0: | |
v11 = v3 - 1; | |
v26 = v10; | |
if ( v3 - 1 < *(_DWORD *)(v1 + 32) ) | |
*(_DWORD *)(v1 + 32) = v11; | |
break; | |
case 1: | |
v11 = v3; | |
v26 = v10 - 1; | |
if ( v10 - 1 < *(_DWORD *)(v1 + 36) ) | |
*(_DWORD *)(v1 + 36) = v10 - 1; | |
break; | |
case 2: | |
v11 = v3 + 1; | |
v26 = v10; | |
if ( v3 + 1 > *(_DWORD *)(v1 + 44) ) | |
*(_DWORD *)(v1 + 44) = v11; | |
break; | |
case 3: | |
v11 = v3; | |
v26 = v10 + 1; | |
if ( v10 + 1 > *(_DWORD *)(v1 + 48) ) | |
*(_DWORD *)(v1 + 48) = v10 + 1; | |
break; | |
default: | |
break; | |
} | |
if ( (v11 | (unsigned int)v26) < 0x200 ) | |
{ | |
v16 = dword_4F1F80[v11 + (v26 << 9)]; | |
v17 = *(_BYTE *)v16; | |
if ( *(_BYTE *)v16 ) | |
{ | |
v18 = (signed int)&dword_27027C4[3 * v14]; | |
while ( 1 ) | |
{ | |
v19 = v16; | |
v20 = *(_BYTE *)(v16 + 1); | |
v16 += 4 * v17; | |
if ( v20 >= v28 ) | |
break; | |
if ( *(_BYTE *)(v16 + 3) > v29 ) | |
{ | |
v21 = ((unsigned __int16)(v19 >> 15) - (unsigned __int16)(v19 >> 3)) & 0xFFF; | |
v22 = dword_5F1FA0[v21]; | |
if ( v22 < 0 ) | |
goto LABEL_33; | |
while ( dword_471F40[2 * v22] != v19 ) | |
{ | |
v22 = dword_471F44[2 * v22]; | |
if ( v22 < 0 ) | |
goto LABEL_33; | |
} | |
if ( v22 >= 0 ) | |
{ | |
if ( v22 < (unsigned int)v32 ) | |
goto LABEL_41; | |
} | |
else | |
{ | |
LABEL_33: | |
v23 = dword_43D024; | |
dword_471F44[2 * dword_43D024] = dword_5F1FA0[v21]; | |
dword_5F1FA0[v21] = v23; | |
dword_471F40[2 * v23] = v19; | |
dword_43D024 = v23 + 1; | |
if ( v23 + 1 >= 65536 | |
|| (++v27, | |
*(_DWORD *)(v18 - 4) = v11, | |
*(_DWORD *)v18 = v26, | |
*(_DWORD *)(v18 + 4) = v19, | |
v18 += 12, | |
v18 >= (signed int)&unk_271A7C4) ) | |
goto LABEL_41; | |
v1 = a1; | |
} | |
} | |
v17 = *(_BYTE *)v16; | |
if ( !*(_BYTE *)v16 ) | |
{ | |
v14 = v27; | |
v15 = v30; | |
goto LABEL_39; | |
} | |
} | |
v14 = v27; | |
v15 = v30; | |
} | |
else | |
{ | |
LABEL_39: | |
if ( v33 ) | |
{ | |
if ( *(_BYTE *)(v16 + 1) <= v28 ) | |
goto LABEL_41; | |
} | |
else | |
{ | |
if ( *(_BYTE *)(v16 + 1) < v28 ) | |
goto LABEL_41; | |
} | |
} | |
v3 = v37; | |
v10 = v38; | |
} | |
++v15; | |
v30 = v15; | |
} | |
while ( v15 != 4 ); | |
if ( !v14 ) | |
break; | |
v24 = v14 - 1; | |
v10 = dword_27027C4[3 * v24]; | |
v27 = v24; | |
v37 = dword_27027C0[3 * v24]; | |
v6 = dword_27027C8[3 * v24]; | |
v3 = v37; | |
v38 = v10; | |
} | |
v25 = dword_43D024; | |
v39 = (double)v31; | |
*(_DWORD *)(v1 + 24) = v32; | |
*(_DWORD *)(v1 + 28) = v25; | |
result = 1; | |
*(float *)v1 = (double)v34 / v39 + 0.5; | |
*(float *)(v1 + 4) = (double)v35 / v39 + 0.5; | |
*(float *)(v1 + 8) = (double)v36 / v39 + 0.5; | |
} | |
return result; | |
} | |
// 43D024: using guessed type int dword_43D024; | |
// 471F40: using guessed type int dword_471F40[]; | |
// 471F44: using guessed type int dword_471F44[]; | |
// 4F1F80: using guessed type int dword_4F1F80[]; | |
// 5F1FA0: using guessed type int dword_5F1FA0[]; | |
// 27027C0: using guessed type int dword_27027C0[]; | |
// 27027C4: using guessed type int dword_27027C4[]; | |
// 27027C8: using guessed type int dword_27027C8[]; | |
//----- (00418270) -------------------------------------------------------- | |
void __cdecl sub_418270() | |
{ | |
int v0; // ebp@1 | |
int v1; // ebx@2 | |
int v2; // eax@3 | |
signed int v3; // esi@4 | |
int v4; // ecx@4 | |
signed int v5; // edi@4 | |
int v6; // edi@6 | |
int v7; // edx@8 | |
int v8; // ecx@9 | |
int *v9; // ecx@12 | |
int v10; // ecx@12 | |
v0 = 0; | |
if ( dword_46FFC0 > 0 ) | |
{ | |
v1 = dword_46847C; | |
do | |
{ | |
v2 = 6 * (((_BYTE)v1 + (_BYTE)v0++) & 7); | |
if ( dword_2848700 > dword_46FF14[v2] ) | |
{ | |
v3 = dword_46FF08[v2]; | |
v4 = dword_4F1F80[(dword_46FF00[v2] & 0x1FF) + ((dword_46FF04[v2] & 0x1FF) << 9)]; | |
v5 = *(_BYTE *)(v4 + 2); | |
if ( v3 <= v5 ) | |
{ | |
LABEL_8: | |
v7 = *(_BYTE *)(v4 + 1); | |
if ( v3 >= v7 ) | |
{ | |
v8 = v4 + 4 * (v3 - v7) + 4; | |
LABEL_10: | |
if ( v8 ) | |
*(_DWORD *)v8 ^= (unsigned int)&unk_FFFFFF & (dword_46FF0C[v2] ^ *(_DWORD *)v8); | |
} | |
} | |
else | |
{ | |
while ( *(_BYTE *)v4 ) | |
{ | |
v4 += 4 * *(_BYTE *)v4; | |
v6 = v5 + 1; | |
if ( v3 < *(_BYTE *)(v4 + 3) ) | |
{ | |
if ( v3 <= v6 ) | |
break; | |
v8 = v4 + 4 * (v3 - *(_BYTE *)(v4 + 3)); | |
goto LABEL_10; | |
} | |
v5 = *(_BYTE *)(v4 + 2); | |
if ( v3 <= v5 ) | |
goto LABEL_8; | |
} | |
} | |
v9 = &dword_46FF00[6 * v1]; | |
dword_46FF00[v2] = dword_46FF00[6 * v1]; | |
dword_46FF04[v2] = v9[1]; | |
dword_46FF08[v2] = v9[2]; | |
dword_46FF0C[v2] = v9[3]; | |
dword_46FF10[v2] = v9[4]; | |
v10 = v9[5]; | |
v1 = ((_BYTE)v1 + 1) & 7; | |
--dword_46FFC0; | |
dword_46FF14[v2] = v10; | |
} | |
} | |
while ( v0 < dword_46FFC0 ); | |
dword_46847C = v1; | |
} | |
} | |
// 46847C: using guessed type int dword_46847C; | |
// 46FF00: using guessed type int dword_46FF00[]; | |
// 46FF04: using guessed type int dword_46FF04[]; | |
// 46FF08: using guessed type int dword_46FF08[]; | |
// 46FF0C: using guessed type int dword_46FF0C[]; | |
// 46FF10: using guessed type int dword_46FF10[]; | |
// 46FF14: using guessed type int dword_46FF14[]; | |
// 46FFC0: using guessed type int dword_46FFC0; | |
// 4F1F80: using guessed type int dword_4F1F80[]; | |
// 2848700: using guessed type int dword_2848700; | |
//----- (004183A0) -------------------------------------------------------- | |
int __usercall sub_4183A0<eax>(int a1<edi>) | |
{ | |
char v2; // bp@3 | |
int i; // edx@3 | |
int v4; // esi@4 | |
int v5; // eax@4 | |
signed int v6; // ebp@6 | |
int v7; // esi@9 | |
int v8; // eax@11 | |
int v9; // edx@11 | |
int v10; // ecx@11 | |
int v11; // eax@12 | |
int v12; // esi@15 | |
int v13; // eax@15 | |
if ( *(_DWORD *)(a1 + 8) >= 62 ) | |
return 0; | |
v2 = dword_46847C; | |
for ( i = 0; i < dword_46FFC0; ++i ) | |
{ | |
v4 = ((_BYTE)i + v2) & 7; | |
v5 = 6 * v4; | |
if ( dword_46FF00[6 * v4] == *(_DWORD *)a1 ) | |
{ | |
if ( dword_46FF04[v5] == *(_DWORD *)(a1 + 4) ) | |
{ | |
v6 = *(_DWORD *)(a1 + 8); | |
if ( dword_46FF08[v5] == v6 ) | |
{ | |
v8 = sub_416DE0(*(_DWORD *)(a1 + 4), v6, *(_DWORD *)a1); | |
*(_BYTE *)v8 -= *(_BYTE *)v8 >> 2; | |
*(_BYTE *)(v8 + 1) -= *(_BYTE *)(v8 + 1) >> 2; | |
v9 = dword_2848700; | |
*(_BYTE *)(v8 + 2) -= *(_BYTE *)(v8 + 2) >> 2; | |
++dword_46FF10[6 * v4]; | |
v10 = dword_46FF10[6 * v4]; | |
dword_46FF14[6 * v4] = v9 + 10000; | |
return v10 == 3; | |
} | |
} | |
v2 = dword_46847C; | |
} | |
} | |
v7 = ((_BYTE)dword_46FFC0 + v2) & 7; | |
if ( dword_46FFC0 >= 8 ) | |
{ | |
v11 = sub_416E30(dword_46FF04[6 * v7], dword_46FF08[6 * v7], dword_46FF00[6 * v7]); | |
if ( v11 ) | |
*(_DWORD *)v11 ^= (unsigned int)&unk_FFFFFF & (*(_DWORD *)v11 ^ dword_46FF0C[6 * v7]); | |
dword_46847C = (v2 + 1) & 7; | |
} | |
else | |
{ | |
++dword_46FFC0; | |
} | |
v12 = 12 * v7; | |
*(int *)((char *)dword_46FF00 + 2 * v12) = *(_DWORD *)a1; | |
v12 *= 2; | |
*(int *)((char *)dword_46FF04 + v12) = *(_DWORD *)(a1 + 4); | |
*(int *)((char *)dword_46FF08 + v12) = *(_DWORD *)(a1 + 8); | |
v13 = sub_416DE0(*(_DWORD *)(a1 + 4), *(_DWORD *)(a1 + 8), *(_DWORD *)a1); | |
*(int *)((char *)dword_46FF0C + v12) = *(_DWORD *)v13; | |
*(_BYTE *)v13 -= *(_BYTE *)v13 >> 2; | |
*(_BYTE *)(v13 + 1) -= *(_BYTE *)(v13 + 1) >> 2; | |
*(_BYTE *)(v13 + 2) -= *(_BYTE *)(v13 + 2) >> 2; | |
*(int *)((char *)dword_46FF14 + v12) = dword_2848700 + 10000; | |
*(int *)((char *)dword_46FF10 + v12) = 1; | |
return 0; | |
} | |
// 46847C: using guessed type int dword_46847C; | |
// 46FF00: using guessed type int dword_46FF00[]; | |
// 46FF04: using guessed type int dword_46FF04[]; | |
// 46FF08: using guessed type int dword_46FF08[]; | |
// 46FF0C: using guessed type int dword_46FF0C[]; | |
// 46FF10: using guessed type int dword_46FF10[]; | |
// 46FF14: using guessed type int dword_46FF14[]; | |
// 46FFC0: using guessed type int dword_46FFC0; | |
// 2848700: using guessed type int dword_2848700; | |
//----- (00418540) -------------------------------------------------------- | |
signed int __cdecl sub_418540() | |
{ | |
int v0; // eax@1 | |
struct hostent *v1; // eax@3 | |
char *v2; // eax@8 | |
char *v3; // eax@9 | |
signed int result; // eax@10 | |
size_t v5; // [sp+4h] [bp-20h]@6 | |
SOCKET s; // [sp+8h] [bp-1Ch]@3 | |
struct sockaddr name; // [sp+Ch] [bp-18h]@3 | |
v0 = socket(2, 1, 0); | |
if ( v0 < 0 ) | |
{ | |
perror("Problem creating socket\n"); | |
v0 = _LN49(1u); | |
} | |
s = v0; | |
name.sa_family = 2; | |
v1 = gethostbyname("www.whatismyip.com"); | |
if ( !v1 ) | |
goto LABEL_14; | |
memmove(&name.sa_data[2], *(const void **)v1->h_addr_list, v1->h_length); | |
*(_WORD *)&name.sa_data[0] = htons(0x50u); | |
if ( connect(s, &name, 16) < 0 ) | |
{ | |
perror("Problem calling connect\n"); | |
_LN49(1u); | |
} | |
memcpy( | |
PathName, | |
"GET /automation/n09230945.asp HTTP/1.0\r\nAccept: */*\r\nHost: www.whatismyip.com\r\nUser-Agent: MSIE\r\n\r\n", | |
0x64u); | |
if ( send(v5, PathName, strlen(PathName), 0) < 0 ) | |
goto LABEL_14; | |
while ( recv(v5, PathName, 512, 0) > 0 ) | |
; | |
closesocket(v5); | |
v2 = strstr(PathName, "Content-Length:"); | |
if ( v2 && (sscanf(v2 + 16, "%i\r\n", &v5), (v3 = strstr(PathName, "\r\n\r\n")) != 0) ) | |
{ | |
strncpy(PathName, v3 + 4, v5); | |
PathName[v5] = 0; | |
result = 0; | |
} | |
else | |
{ | |
LABEL_14: | |
result = 1; | |
} | |
return result; | |
} | |
//----- (004186C0) -------------------------------------------------------- | |
signed int __usercall sub_4186C0<eax>(signed int a1<eax>, int a2<ecx>, __int16 a3) | |
{ | |
signed int v3; // esi@1 | |
signed int result; // eax@1 | |
signed int v5; // ebx@1 | |
int v6; // edi@1 | |
int v7; // ecx@3 | |
v3 = a1; | |
result = 127; | |
v5 = 18; | |
v6 = a2; | |
do | |
{ | |
if ( !v3 ) | |
break; | |
--v6; | |
v7 = dword_4F1F80[(a3 & 0x1FF) + ((v6 & 0x1FF) << 9)]; | |
--v3; | |
if ( v3 >= *(_BYTE *)(v7 + 1) ) | |
{ | |
while ( *(_BYTE *)v7 ) | |
{ | |
v7 += 4 * *(_BYTE *)v7; | |
if ( v3 < *(_BYTE *)(v7 + 3) ) | |
break; | |
if ( v3 < *(_BYTE *)(v7 + 1) ) | |
goto LABEL_9; | |
} | |
result -= v5; | |
} | |
LABEL_9: | |
v5 -= 2; | |
} | |
while ( v5 ); | |
return result; | |
} | |
// 4F1F80: using guessed type int dword_4F1F80[]; | |
//----- (00418730) -------------------------------------------------------- | |
int __usercall sub_418730<eax>(int a1<eax>, int a2<ecx>, int a3, int a4, int a5) | |
{ | |
float v5; // ST3C_4@1 | |
int v6; // ebp@1 | |
float v7; // ST3C_4@1 | |
float v8; // ST3C_4@1 | |
signed int v9; // ebx@7 | |
float v10; // ST2C_4@7 | |
double v11; // st6@7 | |
float v12; // ST2C_4@8 | |
bool v13; // c0@8 | |
bool v14; // c3@8 | |
double v15; // st6@8 | |
double v16; // st5@10 | |
double v17; // st4@10 | |
float v18; // ST2C_4@11 | |
double v19; // st5@11 | |
float v20; // ST10_4@14 | |
signed int v21; // ebp@14 | |
double v22; // st7@14 | |
float v23; // ST24_4@15 | |
double v24; // st6@15 | |
float v25; // ST2C_4@18 | |
double v26; // st5@20 | |
double v27; // st4@20 | |
float v28; // ST28_4@21 | |
double v29; // st5@21 | |
float v30; // ST10_4@24 | |
float v31; // ST24_4@25 | |
double v32; // st6@25 | |
float v33; // ST10_4@27 | |
double v34; // st5@29 | |
double v35; // st4@29 | |
float v36; // ST2C_4@30 | |
double v37; // st5@30 | |
float v38; // ST10_4@33 | |
double v39; // st7@33 | |
float v40; // ST2C_4@34 | |
double v41; // st6@34 | |
float v42; // ST10_4@36 | |
int v43; // eax@43 | |
unsigned __int8 v44; // cl@44 | |
int v45; // edx@45 | |
signed int v46; // ecx@45 | |
int v47; // ecx@46 | |
int result; // eax@47 | |
signed int v49; // ebp@49 | |
int v50; // ecx@56 | |
int v51; // edx@60 | |
int v52; // [sp+14h] [bp-2Ch]@27 | |
int v53; // [sp+18h] [bp-28h]@9 | |
int v54; // [sp+1Ch] [bp-24h]@14 | |
int v55; // [sp+20h] [bp-20h]@9 | |
signed int v56; // [sp+24h] [bp-1Ch]@27 | |
float v57; // [sp+28h] [bp-18h]@7 | |
signed int v58; // [sp+28h] [bp-18h]@9 | |
signed int v59; // [sp+2Ch] [bp-14h]@14 | |
signed int v60; // [sp+30h] [bp-10h]@1 | |
signed int v61; // [sp+34h] [bp-Ch]@3 | |
int v62; // [sp+38h] [bp-8h]@7 | |
signed int v63; // [sp+3Ch] [bp-4h]@5 | |
v5 = *(float *)a2 - 0.5; | |
*(_DWORD *)a3 = (signed int)v5; | |
v6 = a3 + 4; | |
v7 = *(float *)(a2 + 4) - 0.5; | |
*(_DWORD *)(a3 + 4) = (signed int)v7; | |
v8 = *(float *)(a2 + 8) - 0.5; | |
*(_DWORD *)(a3 + 8) = (signed int)v8; | |
v60 = -1; | |
if ( *(float *)a1 >= 0.0 ) | |
v60 = 1; | |
v61 = -1; | |
if ( *(float *)(a1 + 4) >= 0.0 ) | |
v61 = 1; | |
v63 = -1; | |
if ( *(float *)(a1 + 8) >= 0.0 ) | |
v63 = 1; | |
v9 = *(_DWORD *)(a3 + 8); | |
v10 = fabs(*(float *)a1); | |
v57 = fabs(*(float *)(a1 + 4)); | |
v11 = v10; | |
v62 = v9 & ((v9 >= 0) - 1); | |
if ( v57 > (double)v10 ) | |
{ | |
v15 = v57; | |
} | |
else | |
{ | |
v12 = fabs(*(float *)(a1 + 8)); | |
v13 = v12 < v11; | |
v14 = v12 == v11; | |
v15 = v57; | |
if ( v13 | v14 ) | |
{ | |
v55 = *(_DWORD *)a3; | |
v58 = 1024; | |
v53 = (signed int)((*(float *)a2 - (double)*(signed int *)a3) * 1024.0); | |
if ( 0.0 == *(float *)(a1 + 4) ) | |
{ | |
v16 = 2097151.0; | |
v17 = 2097151.0; | |
} | |
else | |
{ | |
v18 = fabs(*(float *)a1 / *(float *)(a1 + 4)); | |
v19 = v18 * 1024.0; | |
v17 = 2097151.0; | |
if ( v19 < 2097151.0 ) | |
{ | |
v17 = v19; | |
v16 = 2097151.0; | |
} | |
else | |
{ | |
v16 = 2097151.0; | |
} | |
} | |
v20 = v17; | |
v21 = *(_DWORD *)v6; | |
v59 = (signed int)v20; | |
v54 = (signed int)(v20 * (*(float *)(a2 + 4) - (double)v21)); | |
v22 = v16; | |
if ( *(float *)(a1 + 8) != 0.0 ) | |
{ | |
v23 = fabs(*(float *)a1 / *(float *)(a1 + 8)); | |
v24 = 1024.0 * v23; | |
if ( v24 < v16 ) | |
v22 = v24; | |
} | |
LABEL_27: | |
v33 = v22; | |
v56 = (signed int)v33; | |
v52 = (signed int)(v33 * (*(float *)(a2 + 8) - (double)v9)); | |
goto LABEL_37; | |
} | |
} | |
v25 = fabs(*(float *)(a1 + 8)); | |
if ( v25 <= v15 ) | |
{ | |
v21 = *(_DWORD *)v6; | |
v59 = 1024; | |
v54 = (signed int)((*(float *)(a2 + 4) - (double)v21) * 1024.0); | |
if ( 0.0 == *(float *)a1 ) | |
{ | |
v26 = 2097151.0; | |
v27 = 2097151.0; | |
} | |
else | |
{ | |
v28 = fabs(*(float *)(a1 + 4) / *(float *)a1); | |
v29 = v28 * 1024.0; | |
v27 = 2097151.0; | |
if ( v29 < 2097151.0 ) | |
{ | |
v27 = v29; | |
v26 = 2097151.0; | |
} | |
else | |
{ | |
v26 = 2097151.0; | |
} | |
} | |
v30 = v27; | |
v58 = (signed int)v30; | |
v55 = *(_DWORD *)a3; | |
v53 = (signed int)(v30 * (*(float *)a2 - (double)*(signed int *)a3)); | |
v22 = v26; | |
if ( *(float *)(a1 + 8) != 0.0 ) | |
{ | |
v31 = fabs(*(float *)(a1 + 4) / *(float *)(a1 + 8)); | |
v32 = 1024.0 * v31; | |
if ( v32 < v26 ) | |
v22 = v32; | |
} | |
goto LABEL_27; | |
} | |
v56 = 1024; | |
v52 = (signed int)((*(float *)(a2 + 8) - (double)v9) * 1024.0); | |
if ( 0.0 == *(float *)a1 ) | |
{ | |
v34 = 2097151.0; | |
v35 = 2097151.0; | |
} | |
else | |
{ | |
v36 = fabs(*(float *)(a1 + 8) / *(float *)a1); | |
v37 = v36 * 1024.0; | |
v35 = 2097151.0; | |
if ( v37 < 2097151.0 ) | |
{ | |
v35 = v37; | |
v34 = 2097151.0; | |
} | |
else | |
{ | |
v34 = 2097151.0; | |
} | |
} | |
v38 = v35; | |
v55 = *(_DWORD *)a3; | |
v58 = (signed int)v38; | |
v53 = (signed int)(v38 * (*(float *)a2 - (double)*(signed int *)a3)); | |
v39 = v34; | |
if ( *(float *)(a1 + 4) != 0.0 ) | |
{ | |
v40 = fabs(*(float *)(a1 + 8) / *(float *)(a1 + 4)); | |
v41 = 1024.0 * v40; | |
if ( v41 < v34 ) | |
v39 = v41; | |
} | |
v42 = v39; | |
v21 = *(_DWORD *)v6; | |
v59 = (signed int)v42; | |
v54 = (signed int)(v42 * (*(float *)(a2 + 4) - (double)v21)); | |
LABEL_37: | |
if ( v60 >= 0 ) | |
v53 = v58 - v53; | |
if ( v61 >= 0 ) | |
v54 = v59 - v54; | |
if ( v63 >= 0 ) | |
v52 = v56 - v52; | |
v43 = dword_4F1F80[v55 + (v21 << 9)]; | |
if ( v9 < *(_BYTE *)(v43 + 1) ) | |
{ | |
LABEL_48: | |
v47 = v62; | |
goto LABEL_49; | |
} | |
do | |
{ | |
v44 = *(_BYTE *)v43; | |
if ( !*(_BYTE *)v43 ) | |
{ | |
result = a5; | |
*(_DWORD *)a4 = 0; | |
*(_DWORD *)a5 = -1; | |
return result; | |
} | |
v45 = v44; | |
v46 = *(_BYTE *)(v43 + 4 * v44 + 1); | |
v43 += 4 * v45; | |
} | |
while ( v9 >= v46 ); | |
v47 = *(_BYTE *)(v43 + 3); | |
LABEL_49: | |
while ( 1 ) | |
{ | |
v49 = *(_BYTE *)(v43 + 1); | |
while ( v52 <= v53 && v52 <= v54 ) | |
{ | |
v52 += v56; | |
*(_DWORD *)(a3 + 8) = v63 + v9; | |
*(_DWORD *)a5 = 5 - (v63 > 0); | |
v9 = *(_DWORD *)(a3 + 8); | |
if ( v9 < v47 ) | |
{ | |
if ( v9 >= v62 ) | |
{ | |
result = v43 - 4; | |
*(_DWORD *)a4 = result; | |
return result; | |
} | |
goto LABEL_69; | |
} | |
if ( v9 >= v49 ) | |
{ | |
result = v43 + 4; | |
*(_DWORD *)a4 = result; | |
return result; | |
} | |
} | |
if ( v53 >= v54 ) | |
{ | |
result = a3; | |
*(_DWORD *)(result + 4) += v61; | |
*(_DWORD *)a5 = 3 - (v61 > 0); | |
if ( *(_DWORD *)(a3 + 4) >= 0x200u ) | |
{ | |
*(_DWORD *)a4 = 0; | |
return result; | |
} | |
v50 = a3; | |
v54 += v59; | |
} | |
else | |
{ | |
v50 = a3; | |
*(_DWORD *)v50 += v60; | |
*(_DWORD *)a5 = v60 <= 0; | |
if ( *(_DWORD *)a3 >= 0x200u ) | |
{ | |
LABEL_69: | |
result = a4; | |
*(_DWORD *)a4 = 0; | |
return result; | |
} | |
v53 += v58; | |
} | |
v9 = *(_DWORD *)(v50 + 8); | |
v51 = *(_DWORD *)v50 + (*(_DWORD *)(v50 + 4) << 9); | |
v43 = dword_4F1F80[v51]; | |
if ( v9 >= *(_BYTE *)(v43 + 1) ) | |
break; | |
LABEL_64: | |
if ( v43 == dword_4F1F80[v51] ) | |
goto LABEL_48; | |
v47 = *(_BYTE *)(v43 + 3); | |
if ( v9 < v47 ) | |
{ | |
result = v43 + 4 * (v9 - *(_BYTE *)(v43 + 3)); | |
*(_DWORD *)a4 = result; | |
return result; | |
} | |
} | |
while ( v9 > *(_BYTE *)(v43 + 2) && *(_BYTE *)v43 ) | |
{ | |
v43 += 4 * *(_BYTE *)v43; | |
if ( v9 < *(_BYTE *)(v43 + 1) ) | |
goto LABEL_64; | |
} | |
result = v43 + 4 * (v9 - *(_BYTE *)(v43 + 1)) + 4; | |
*(_DWORD *)a4 = result; | |
return result; | |
} | |
// 4F1F80: using guessed type int dword_4F1F80[]; | |
//----- (00418D10) -------------------------------------------------------- | |
signed int __cdecl sub_418D10(float a1, float a2, float a3, float a4, float a5, float a6) | |
{ | |
float v6; // ST18_4@1 | |
float v7; // ST18_4@1 | |
float v8; // ST18_4@1 | |
float v9; // ST18_4@1 | |
float v10; // ST18_4@1 | |
signed int v11; // edx@19 | |
signed int v12; // ebp@19 | |
int v13; // edi@19 | |
signed int v14; // esi@19 | |
signed int v15; // ebx@19 | |
int v16; // eax@27 | |
int v18; // [sp+0h] [bp-60h]@1 | |
float v19; // [sp+4h] [bp-5Ch]@1 | |
signed int v20; // [sp+Ch] [bp-54h]@1 | |
signed int v21; // [sp+10h] [bp-50h]@1 | |
signed int v22; // [sp+14h] [bp-4Ch]@1 | |
signed int v23; // [sp+18h] [bp-48h]@16 | |
signed int v24; // [sp+1Ch] [bp-44h]@16 | |
int v25; // [sp+20h] [bp-40h]@16 | |
int v26; // [sp+24h] [bp-3Ch]@16 | |
int v27; // [sp+28h] [bp-38h]@16 | |
int v28; // [sp+2Ch] [bp-34h]@16 | |
int v29; // [sp+30h] [bp-30h]@1 | |
int v30; // [sp+34h] [bp-2Ch]@1 | |
int v31; // [sp+38h] [bp-28h]@1 | |
float v32; // [sp+3Ch] [bp-24h]@2 | |
float v33; // [sp+40h] [bp-20h]@7 | |
float v34; // [sp+44h] [bp-1Ch]@12 | |
float v35; // [sp+48h] [bp-18h]@2 | |
float v36; // [sp+4Ch] [bp-14h]@7 | |
float v37; // [sp+50h] [bp-10h]@12 | |
int v38; // [sp+54h] [bp-Ch]@2 | |
int v39; // [sp+58h] [bp-8h]@7 | |
int v40; // [sp+5Ch] [bp-4h]@12 | |
float v41; // [sp+64h] [bp+4h]@16 | |
float v42; // [sp+64h] [bp+4h]@16 | |
float v43; // [sp+64h] [bp+4h]@16 | |
v19 = a1 - 0.5; | |
v18 = 0; | |
v20 = (signed int)v19; | |
v6 = a2 - 0.5; | |
v21 = (signed int)v6; | |
v7 = a3 - 0.5; | |
v22 = (signed int)v7; | |
v8 = a4 - 0.5; | |
v29 = (signed int)v8; | |
v9 = a5 - 0.5; | |
v30 = (signed int)v9; | |
v10 = a6 - 0.5; | |
v31 = (signed int)v10; | |
if ( v29 >= v20 ) | |
{ | |
if ( v29 == v20 ) | |
{ | |
v32 = 0.0; | |
v35 = 0.0; | |
} | |
else | |
{ | |
v38 = 1; | |
v18 = v29 - v20; | |
v35 = (double)(v20 + 1) - a1; | |
v32 = (a4 - a1) * 1024.0; | |
} | |
} | |
else | |
{ | |
v38 = -1; | |
v18 = v20 - v29; | |
v35 = a1 - (double)v20; | |
v32 = (a1 - a4) * 1024.0; | |
} | |
if ( v30 >= v21 ) | |
{ | |
if ( v30 == v21 ) | |
{ | |
v33 = 0.0; | |
v36 = 0.0; | |
} | |
else | |
{ | |
v18 += v30 - v21; | |
v39 = 1; | |
v36 = (double)(v21 + 1) - a2; | |
v33 = (a5 - a2) * 1024.0; | |
} | |
} | |
else | |
{ | |
v18 += v21 - v30; | |
v39 = -1; | |
v36 = a2 - (double)v21; | |
v33 = (a2 - a5) * 1024.0; | |
} | |
if ( v31 >= v22 ) | |
{ | |
if ( v31 == v22 ) | |
{ | |
v34 = 0.0; | |
v37 = 0.0; | |
} | |
else | |
{ | |
v18 += v31 - v22; | |
v40 = 1; | |
v37 = (double)(v22 + 1) - a3; | |
v34 = 1024.0 * (a6 - a3); | |
} | |
} | |
else | |
{ | |
v18 += v22 - v31; | |
v40 = -1; | |
v37 = a3 - (double)v22; | |
v34 = 1024.0 * (a3 - a6); | |
} | |
v41 = v34 * v35 - v37 * v32; | |
v23 = (signed int)v41; | |
v26 = (signed int)v32; | |
v42 = v34 * v36 - v37 * v33; | |
v24 = (signed int)v42; | |
v27 = (signed int)v33; | |
v43 = v36 * v32 - v33 * v35; | |
v25 = (signed int)v43; | |
v28 = (signed int)v34; | |
if ( v18 <= 32 ) | |
{ | |
if ( !v18 ) | |
return 1; | |
} | |
else | |
{ | |
v18 = 32; | |
} | |
v11 = v22; | |
v12 = (signed int)v19; | |
v13 = v25; | |
v14 = v24; | |
v15 = v23; | |
while ( 1 ) | |
{ | |
if ( (v15 | v14) < 0 || v11 == v31 ) | |
{ | |
if ( v13 < 0 || v12 == v29 ) | |
{ | |
v21 += v39; | |
v14 += v28; | |
v13 += v26; | |
v25 = v13; | |
} | |
else | |
{ | |
v12 += v38; | |
v15 += v28; | |
v13 -= v27; | |
v25 = v13; | |
} | |
} | |
else | |
{ | |
v11 += v40; | |
v15 -= v26; | |
v14 -= v27; | |
} | |
v16 = dword_4F1F80[(v12 & 0x1FF) + ((v21 & 0x1FF) << 9)]; | |
if ( v11 >= *(_BYTE *)(v16 + 1) ) | |
break; | |
LABEL_31: | |
--v18; | |
if ( !v18 ) | |
return 1; | |
} | |
while ( *(_BYTE *)v16 ) | |
{ | |
v16 += 4 * *(_BYTE *)v16; | |
if ( v11 < *(_BYTE *)(v16 + 3) ) | |
break; | |
if ( v11 < *(_BYTE *)(v16 + 1) ) | |
goto LABEL_31; | |
} | |
return 0; | |
} | |
// 4F1F80: using guessed type int dword_4F1F80[]; | |
//----- (00419180) -------------------------------------------------------- | |
signed int __usercall sub_419180<eax>(const char *a1<eax>, int a2<edi>, int a3, int a4, int a5, int a6) | |
{ | |
int v6; // edx@1 | |
signed int result; // eax@1 | |
flt_468724[245 * a2] = 256.0; | |
flt_468720[245 * a2] = 256.0; | |
flt_468728[245 * a2] = 128.0; | |
flt_468734[245 * a2] = 0.0; | |
flt_468730[245 * a2] = 0.0; | |
flt_46872C[245 * a2] = 0.0; | |
flt_468738[245 * a2] = 1.0; | |
flt_46874C[245 * a2] = 1.0; | |
flt_46873C[245 * a2] = 0.0; | |
flt_468740[245 * a2] = 0.0; | |
flt_468744[245 * a2] = 0.0; | |
flt_468748[245 * a2] = 0.0; | |
flt_468750[245 * a2] = 0.0; | |
flt_468754[245 * a2] = -1.0; | |
*(float *)&dword_468758[245 * a2] = 0.0; | |
strncpy((char *)&unk_468844 + 980 * a2, a1, 0xFu); | |
v6 = dword_273CA00[a4]; | |
dword_468800[245 * a2] = a6; | |
byte_468853[980 * a2] = 0; | |
dword_4687F8[245 * a2] = 0; | |
dword_4687F4[245 * a2] = 0; | |
dword_4687F0[245 * a2] = 0; | |
dword_4687EC[245 * a2] = 0; | |
dword_4687E8[245 * a2] = 0; | |
dword_4687E4[245 * a2] = 0; | |
dword_4687E0[245 * a2] = 0; | |
dword_4687DC[245 * a2] = 0; | |
dword_4687FC[245 * a2] = a4; | |
dword_4686C8[245 * a2] = v6; | |
sub_417530(a2, a3); | |
flt_46853C[245 * a2] = 0.0; | |
flt_4684A0[245 * a2] = 0.0; | |
result = 1; | |
flt_4684A4[245 * a2] = 0.0; | |
dword_468808[245 * a2] = 0; | |
flt_4684A8[245 * a2] = 0.0; | |
dword_468820[245 * a2] = 0; | |
dword_468818[245 * a2] = 0; | |
flt_4684AC[245 * a2] = 0.1; | |
dword_468814[245 * a2] = 0; | |
flt_468650[245 * a2] = 0.1; | |
dword_468830[245 * a2] = 0; | |
dword_46882C[245 * a2] = 0; | |
dword_468828[245 * a2] = 0; | |
flt_468638[245 * a2] = 0.0; | |
dword_468838[245 * a2] = 0; | |
flt_468644[245 * a2] = 0.0; | |
dword_46880C[245 * a2] = 1; | |
flt_468648[245 * a2] = 0.0; | |
dword_468810[245 * a2] = 1; | |
flt_46864C[245 * a2] = 0.0; | |
dword_468824[245 * a2] = a5; | |
dword_468834[245 * a2] = a2; | |
return result; | |
} | |
// 4684A0: using guessed type float flt_4684A0[]; | |
// 4684A4: using guessed type float flt_4684A4[]; | |
// 4684A8: using guessed type float flt_4684A8[]; | |
// 4684AC: using guessed type float flt_4684AC[]; | |
// 46853C: using guessed type float flt_46853C[]; | |
// 468638: using guessed type float flt_468638[]; | |
// 468644: using guessed type float flt_468644[]; | |
// 468648: using guessed type float flt_468648[]; | |
// 46864C: using guessed type float flt_46864C[]; | |
// 468650: using guessed type float flt_468650[]; | |
// 4686C8: using guessed type int dword_4686C8[]; | |
// 468720: using guessed type float flt_468720[]; | |
// 468724: using guessed type float flt_468724[]; | |
// 468728: using guessed type float flt_468728[]; | |
// 46872C: using guessed type float flt_46872C[]; | |
// 468730: using guessed type float flt_468730[]; | |
// 468734: using guessed type float flt_468734[]; | |
// 468738: using guessed type float flt_468738[]; | |
// 46873C: using guessed type float flt_46873C[]; | |
// 468740: using guessed type float flt_468740[]; | |
// 468744: using guessed type float flt_468744[]; | |
// 468748: using guessed type float flt_468748[]; | |
// 46874C: using guessed type float flt_46874C[]; | |
// 468750: using guessed type float flt_468750[]; | |
// 468754: using guessed type float flt_468754[]; | |
// 468758: using guessed type int dword_468758[]; | |
// 4687DC: using guessed type int dword_4687DC[]; | |
// 4687E0: using guessed type int dword_4687E0[]; | |
// 4687E4: using guessed type int dword_4687E4[]; | |
// 4687E8: using guessed type int dword_4687E8[]; | |
// 4687EC: using guessed type int dword_4687EC[]; | |
// 4687F0: using guessed type int dword_4687F0[]; | |
// 4687F4: using guessed type int dword_4687F4[]; | |
// 4687F8: using guessed type int dword_4687F8[]; | |
// 4687FC: using guessed type int dword_4687FC[]; | |
// 468800: using guessed type int dword_468800[]; | |
// 468808: using guessed type int dword_468808[]; | |
// 46880C: using guessed type int dword_46880C[]; | |
// 468810: using guessed type int dword_468810[]; | |
// 468814: using guessed type int dword_468814[]; | |
// 468818: using guessed type int dword_468818[]; | |
// 468820: using guessed type int dword_468820[]; | |
// 468824: using guessed type int dword_468824[]; | |
// 468828: using guessed type int dword_468828[]; | |
// 46882C: using guessed type int dword_46882C[]; | |
// 468830: using guessed type int dword_468830[]; | |
// 468834: using guessed type int dword_468834[]; | |
// 468838: using guessed type int dword_468838[]; | |
// 273CA00: using guessed type int dword_273CA00[]; | |
//----- (00419310) -------------------------------------------------------- | |
void __cdecl sub_419310() | |
{ | |
int i; // ecx@2 | |
int v1; // esi@3 | |
signed int v2; // ebx@6 | |
int v3; // ebp@6 | |
void *v4; // edi@7 | |
const void *v5; // esi@7 | |
int v6; // edi@13 | |
int v7; // esi@14 | |
char *v8; // ebp@14 | |
int v9; // ecx@15 | |
int v10; // edx@15 | |
int *v11; // [sp+10h] [bp-8h]@7 | |
if ( dword_43D024 >= 2048 ) | |
{ | |
memset(dword_5F1FA0, -1, 0x4000u); | |
} | |
else | |
{ | |
for ( i = dword_43D024 - 1; i >= 0; dword_5F1FA0[v1] = -1 ) | |
{ | |
v1 = ((unsigned __int16)(dword_471F40[2 * i] >> 15) - (unsigned __int16)(dword_471F40[2 * i] >> 3)) & 0xFFF; | |
--i; | |
} | |
} | |
v2 = dword_701FC0; | |
v3 = dword_701FC0 - 1; | |
dword_43D024 = 0; | |
if ( dword_701FC0 - 1 >= 0 ) | |
{ | |
v4 = &dword_701FE0[15 * v3]; | |
v11 = &dword_701FE0[15 * v3]; | |
v5 = &dword_701FE0[15 * dword_701FC0]; | |
do | |
{ | |
if ( !sub_417EE0((int)v4) ) | |
{ | |
--v2; | |
v5 = (char *)v5 - 60; | |
memcpy(v4, v5, 0x3Cu); | |
v4 = v11; | |
} | |
v4 = (char *)v4 - 60; | |
--v3; | |
v11 = (int *)v4; | |
} | |
while ( v3 >= 0 ); | |
dword_701FC0 = v2; | |
} | |
if ( v2 >= 32 || (v6 = dword_46FFC4 - 1, dword_46FFC4 - 1 < 0) ) | |
{ | |
LABEL_18: | |
dword_46FFC4 = 0; | |
} | |
else | |
{ | |
v7 = (int)&dword_701FE0[15 * v2]; | |
v8 = (char *)&unk_6F5FC0 + 12 * v6; | |
while ( 1 ) | |
{ | |
v9 = *((_DWORD *)v8 + 1); | |
v10 = *((_DWORD *)v8 + 2); | |
*(_DWORD *)(v7 + 12) = *(_DWORD *)v8; | |
*(_DWORD *)(v7 + 16) = v9; | |
*(_DWORD *)(v7 + 20) = v10; | |
if ( sub_417EE0(v7) ) | |
{ | |
*(_DWORD *)(v7 + 56) = 0; | |
++v2; | |
v7 += 60; | |
dword_701FC0 = v2; | |
if ( v7 >= (signed int)&dword_702760 ) | |
break; | |
} | |
v8 -= 12; | |
--v6; | |
if ( v6 < 0 ) | |
goto LABEL_18; | |
} | |
dword_46FFC4 = 0; | |
} | |
} | |
// 43D024: using guessed type int dword_43D024; | |
// 46FFC4: using guessed type int dword_46FFC4; | |
// 471F40: using guessed type int dword_471F40[]; | |
// 5F1FA0: using guessed type int dword_5F1FA0[]; | |
// 701FC0: using guessed type int dword_701FC0; | |
// 701FE0: using guessed type int dword_701FE0[]; | |
// 702760: using guessed type int dword_702760; | |
//----- (00419460) -------------------------------------------------------- | |
int __cdecl sub_419460() | |
{ | |
int v0; // ebx@1 | |
int v1; // edx@2 | |
int v2; // edi@4 | |
int v3; // edi@6 | |
int v4; // ebp@8 | |
int v5; // ebp@11 | |
int v6; // ebp@14 | |
int v7; // ebp@17 | |
int v8; // ebp@20 | |
int v9; // ebp@27 | |
int v10; // ebx@30 | |
int v11; // ecx@30 | |
int result; // eax@30 | |
int v13; // esi@30 | |
int v14; // ebx@31 | |
int v15; // ebp@33 | |
unsigned int v16; // eax@33 | |
int v17; // esi@33 | |
signed int v18; // edi@33 | |
int v19; // eax@33 | |
unsigned __int8 v20; // dl@33 | |
int v21; // ecx@33 | |
int v22; // esi@33 | |
int v23; // edx@35 | |
int i; // eax@35 | |
void *v25; // eax@37 | |
int v26; // [sp+10h] [bp-1Ch]@2 | |
int v27; // [sp+10h] [bp-1Ch]@31 | |
int v28; // [sp+14h] [bp-18h]@4 | |
int v29; // [sp+18h] [bp-14h]@6 | |
int v30; // [sp+1Ch] [bp-10h]@30 | |
int v31; // [sp+20h] [bp-Ch]@33 | |
int v32; // [sp+28h] [bp-4h]@30 | |
v0 = dword_4678FC; | |
if ( dword_467900 ) | |
{ | |
v1 = dword_4678F8; | |
v26 = dword_4678F8; | |
dword_467900 = 0; | |
} | |
else | |
{ | |
v0 = dword_4678FC - 1; | |
v26 = dword_4678F8 + 1; | |
v1 = dword_4678F8 + 1; | |
} | |
v2 = dword_467B08 + 512; | |
v28 = dword_467B08 + 512; | |
if ( dword_467B08 + 512 == dword_46FFCC + 4608 ) | |
{ | |
v28 = dword_46FFCC + 3072; | |
v2 = dword_46FFCC + 3072; | |
} | |
v3 = v2 + 512; | |
v29 = v3; | |
if ( v3 == dword_46FFCC + 4608 ) | |
{ | |
v3 = dword_46FFCC + 3072; | |
v29 = dword_46FFCC + 3072; | |
} | |
v4 = v0; | |
if ( v0 < dword_467904 ) | |
{ | |
do | |
{ | |
sub_416D40(dword_43D04C - 2, v4, v28 + 1536 * (v4 & 0x1FF)); | |
++v4; | |
} | |
while ( v4 < dword_467904 ); | |
v1 = v26; | |
} | |
v5 = v1; | |
if ( v1 > dword_4678F4 ) | |
{ | |
do | |
{ | |
sub_416D40(dword_43D04C - 2, v5, v28 + 1536 * (v5 & 0x1FF)); | |
--v5; | |
} | |
while ( v5 > dword_4678F4 ); | |
v1 = v26; | |
} | |
v6 = v0 - 1; | |
if ( v0 - 1 < dword_4678EC ) | |
{ | |
do | |
{ | |
sub_416D40(dword_43D04C - 1, v6, v3 + 1536 * (v6 & 0x1FF)); | |
++v6; | |
} | |
while ( v6 < dword_4678EC ); | |
v1 = v26; | |
} | |
v7 = v1 + 1; | |
if ( v1 + 1 > dword_4678F0 ) | |
{ | |
do | |
{ | |
sub_416D40(dword_43D04C - 1, v7, v3 + 1536 * (v7 & 0x1FF)); | |
--v7; | |
} | |
while ( v7 > dword_4678F0 ); | |
v1 = v26; | |
} | |
dword_467904 = v0 - 1; | |
dword_4678F4 = v1 + 1; | |
v8 = v0; | |
if ( dword_46FFD4 ) | |
{ | |
if ( v0 > v1 ) | |
goto LABEL_30; | |
do | |
{ | |
sub_416D40(dword_43D04C, v8, dword_467B08 + 1536 * (v8 & 0x1FF)); | |
++v8; | |
} | |
while ( v8 <= v26 ); | |
goto LABEL_29; | |
} | |
if ( v0 < dword_4678FC ) | |
{ | |
do | |
{ | |
sub_416D40(dword_43D04C, v8, dword_467B08 + 1536 * (v8 & 0x1FF)); | |
++v8; | |
} | |
while ( v8 < dword_4678FC ); | |
v1 = v26; | |
} | |
v9 = v1; | |
if ( v1 > dword_4678F8 ) | |
{ | |
do | |
{ | |
sub_416D40(dword_43D04C, v9, dword_467B08 + 1536 * (v9 & 0x1FF)); | |
--v9; | |
} | |
while ( v9 > dword_4678F8 ); | |
LABEL_29: | |
v1 = v26; | |
} | |
LABEL_30: | |
dword_4678F0 = v1; | |
dword_4678EC = v0; | |
v10 = v0 & 0x1FF; | |
v11 = ((_WORD)dword_43D04C - 1) & 0x1FF; | |
result = 384 * v10; | |
v30 = ((_WORD)dword_43D04C - 1) & 0x1FF; | |
v13 = v10; | |
v32 = ((v1 & 0x1FF) + 1) & 0x1FF; | |
if ( v10 != v32 ) | |
{ | |
v14 = v11 << 9; | |
v27 = v11 << 9; | |
while ( 1 ) | |
{ | |
v15 = ((_WORD)v13 + 1) & 0x1FF; | |
v16 = sub_4169D0( | |
v3 + 4 * result, | |
(int *)(v3 + 1536 * (((_WORD)v13 - 1) & 0x1FF)), | |
(int *)(v3 + 1536 * (((_WORD)v13 + 1) & 0x1FF)), | |
(int *)(v28 + 4 * result), | |
(int *)(dword_467B08 + 4 * result), | |
v13, | |
v11); | |
v17 = v14 + v13; | |
v18 = v16; | |
v19 = dword_4F1F80[v17]; | |
v20 = *(_BYTE *)v19; | |
v21 = (dword_4F1F80[v17] - (signed int)&unk_7027A0) >> 2; | |
v31 = v17; | |
v22 = dword_4F1F80[v17]; | |
if ( *(_BYTE *)v19 ) | |
{ | |
do | |
{ | |
v22 += 4 * v20; | |
v20 = *(_BYTE *)v22; | |
} | |
while ( *(_BYTE *)v22 ); | |
} | |
v23 = v21 + ((v22 + 4 * (*(_BYTE *)(v22 + 2) - *(_BYTE *)(v22 + 1)) + 8 - v19) >> 2); | |
for ( i = __ROL__(1, v21); v21 < v23; i = __ROL__(i, 1) ) | |
{ | |
dword_5F5FA0[v21 >> 5] &= ~i; | |
++v21; | |
} | |
v25 = sub_4170E0(v18); | |
dword_4F1F80[v31] = (int)v25; | |
memcpy(v25, byte_271A7E0, 4 * (v18 >> 2)); | |
v13 = v15; | |
result = 384 * v15; | |
if ( v15 == v32 ) | |
break; | |
v14 = v27; | |
v11 = v30; | |
v3 = v29; | |
} | |
} | |
return result; | |
} | |
// 43D04C: using guessed type int dword_43D04C; | |
// 4678EC: using guessed type int dword_4678EC; | |
// 4678F0: using guessed type int dword_4678F0; | |
// 4678F4: using guessed type int dword_4678F4; | |
// 4678F8: using guessed type int dword_4678F8; | |
// 4678FC: using guessed type int dword_4678FC; | |
// 467900: using guessed type int dword_467900; | |
// 467904: using guessed type int dword_467904; | |
// 467B08: using guessed type int dword_467B08; | |
// 46FFCC: using guessed type int dword_46FFCC; | |
// 46FFD4: using guessed type int dword_46FFD4; | |
// 4F1F80: using guessed type int dword_4F1F80[]; | |
// 5F5FA0: using guessed type int dword_5F5FA0[]; | |
//----- (004197D0) -------------------------------------------------------- | |
signed int __usercall sub_4197D0<eax>(int a1<eax>) | |
{ | |
FILE *v1; // edi@1 | |
FILE *v2; // ST0C_4@1 | |
char *v3; // esi@1 | |
__int32 v4; // eax@1 | |
signed int v5; // ecx@1 | |
char i; // al@2 | |
int v7; // edx@3 | |
int v8; // ebx@5 | |
signed int v9; // ebp@6 | |
int v10; // esi@7 | |
signed int j; // edi@8 | |
int v12; // edi@11 | |
int v13; // ebx@11 | |
signed int k; // esi@11 | |
int v16; // [sp+10h] [bp-8h]@5 | |
int v17; // [sp+14h] [bp-4h]@5 | |
v1 = (FILE *)a1; | |
v2 = (FILE *)a1; | |
v3 = (char *)&unk_7027A4; | |
v4 = _filelength(*(_DWORD *)(a1 + 16)); | |
fread(&unk_7027A4, v4, 1u, v2); | |
v5 = (signed int)dword_4F1F80; | |
do | |
{ | |
*(_DWORD *)v5 = v3; | |
for ( i = *v3; i; v3 += 4 * v7 ) | |
{ | |
v7 = (unsigned __int8)i; | |
i = v3[4 * (unsigned __int8)i]; | |
} | |
v5 += 4; | |
v3 += 4 * ((unsigned __int8)v3[2] - (unsigned __int8)v3[1]) + 8; | |
} | |
while ( v5 < (signed int)&dword_5F1F80 ); | |
fclose(v1); | |
dword_467B0C = (signed int)(v3 - (char *)&unk_7027A0) >> 2; | |
memset(dword_5F5FA0, -1, 4 * ((signed int)(v3 - (char *)&unk_7027A0) >> 7)); | |
memset(&dword_5F5FA0[dword_467B0C >> 5], 0, 4 * ((2097152 - dword_467B0C) >> 5)); | |
v8 = 0; | |
dword_5F5FA0[dword_467B0C >> 5] = (1 << dword_467B0C) - 1; | |
v17 = 0; | |
v16 = 0; | |
do | |
{ | |
v9 = 0; | |
do | |
{ | |
v10 = dword_4F1F80[v16]; | |
while ( 1 ) | |
{ | |
for ( j = *(_BYTE *)(v10 + 1); j <= *(_BYTE *)(v10 + 2); ++j ) | |
*(_BYTE *)(v10 + 4 * (j - *(_BYTE *)(v10 + 1)) + 7) = sub_4186C0(j, v8, v9); | |
if ( !*(_BYTE *)v10 ) | |
break; | |
v12 = *(_BYTE *)(v10 + 4 * *(_BYTE *)v10 + 3); | |
v13 = v10 + 4 * *(_BYTE *)v10; | |
for ( k = *(_BYTE *)(v10 + 2) - *(_BYTE *)(v10 + 1) - *(_BYTE *)v10 + v12 + 2; k < v12; ++k ) | |
{ | |
*(_BYTE *)(v13 + 4 * (k - v12) + 3) = sub_4186C0(k, v17, v9); | |
v12 = *(_BYTE *)(v13 + 3); | |
} | |
v10 = v13; | |
v8 = v17; | |
} | |
++v16; | |
++v9; | |
} | |
while ( v9 < 512 ); | |
++v8; | |
v17 = v8; | |
} | |
while ( v8 < 512 ); | |
dword_701FC0 = 0; | |
return 1; | |
} | |
// 467B0C: using guessed type int dword_467B0C; | |
// 4F1F80: using guessed type int dword_4F1F80[]; | |
// 5F1F80: using guessed type int dword_5F1F80; | |
// 5F5FA0: using guessed type int dword_5F5FA0[]; | |
// 701FC0: using guessed type int dword_701FC0; | |
//----- (00419990) -------------------------------------------------------- | |
char __cdecl sub_419990(signed int a1) | |
{ | |
float v1; // ST14_4@1 | |
signed int v2; // eax@1 | |
int v3; // ebx@1 | |
int v4; // esi@1 | |
int v5; // eax@1 | |
int v6; // ebp@1 | |
int v7; // esi@4 | |
signed int i; // edi@5 | |
int v9; // edi@8 | |
int v10; // ebx@8 | |
signed int j; // esi@8 | |
int v13; // [sp+Ch] [bp-8h]@1 | |
int v14; // [sp+10h] [bp-4h]@1 | |
int v15; // [sp+18h] [bp+4h]@1 | |
v1 = sqrt(256.0 - (double)(a1 * a1)); | |
v2 = (signed int)(*(float *)&dword_4F1F54 * 16.0 + flt_4F1F44 + (double)a1); | |
v3 = v2 & 0x1FF; | |
v4 = ((signed int)(*(float *)&dword_4F1F54 * 16.0 + flt_4F1F44 + (double)a1) & 0x1FF) << 9; | |
v15 = (signed int)(*(float *)&dword_4F1F54 * 16.0 + flt_4F1F44 + (double)a1) & 0x1FF; | |
v14 = (v2 & 0x1FF) << 9; | |
v5 = (signed int)(16.0 * *(float *)&dword_4F1F50 + flt_4F1F40 + (double)(signed int)v1) & 0x1FF; | |
v6 = ((_WORD)v5 - 2 * (unsigned __int16)(signed int)v1) & 0x1FF; | |
v13 = (signed int)(16.0 * *(float *)&dword_4F1F50 + flt_4F1F40 + (double)(signed int)v1) & 0x1FF; | |
if ( v6 != v5 ) | |
{ | |
while ( 1 ) | |
{ | |
v7 = dword_4F1F80[v4 + v6]; | |
while ( 1 ) | |
{ | |
for ( i = *(_BYTE *)(v7 + 1); i <= *(_BYTE *)(v7 + 2); ++i ) | |
*(_BYTE *)(v7 + 4 * (i - *(_BYTE *)(v7 + 1)) + 7) = sub_4186C0(i, v3, v6); | |
LOBYTE(v5) = *(_BYTE *)v7; | |
if ( !*(_BYTE *)v7 ) | |
break; | |
v9 = *(_BYTE *)(v7 + 4 * (unsigned __int8)v5 + 3); | |
v10 = v7 + 4 * (unsigned __int8)v5; | |
for ( j = *(_BYTE *)(v7 + 2) - *(_BYTE *)(v7 + 1) - (unsigned __int8)v5 + v9 + 2; j < v9; ++j ) | |
{ | |
*(_BYTE *)(v10 + 4 * (j - v9) + 3) = sub_4186C0(j, v15, v6); | |
v9 = *(_BYTE *)(v10 + 3); | |
} | |
v7 = v10; | |
v3 = v15; | |
} | |
v6 = ((_WORD)v6 + 1) & 0x1FF; | |
if ( v6 == v13 ) | |
break; | |
v4 = v14; | |
} | |
} | |
return v5; | |
} | |
// 4F1F40: using guessed type float flt_4F1F40; | |
// 4F1F44: using guessed type float flt_4F1F44; | |
// 4F1F50: using guessed type int dword_4F1F50; | |
// 4F1F54: using guessed type int dword_4F1F54; | |
// 4F1F80: using guessed type int dword_4F1F80[]; | |
//----- (00419AE0) -------------------------------------------------------- | |
int __cdecl sub_419AE0() | |
{ | |
int result; // eax@6 | |
if ( dword_43D04C != -2147483648 ) | |
{ | |
sub_419460(); | |
++dword_43D04C; | |
dword_46FFD4 = 1; | |
dword_467B08 += 512; | |
if ( dword_467B08 == dword_46FFCC + 4608 ) | |
dword_467B08 = dword_46FFCC + 3072; | |
sub_419460(); | |
++dword_43D04C; | |
dword_467900 = 1; | |
dword_467B08 += 512; | |
if ( dword_467B08 == dword_46FFCC + 4608 ) | |
dword_467B08 = dword_46FFCC + 3072; | |
result = sub_419460(); | |
dword_43D04C = -2147483648; | |
dword_46FFD4 = 0; | |
} | |
return result; | |
} | |
// 43D04C: using guessed type int dword_43D04C; | |
// 467900: using guessed type int dword_467900; | |
// 467B08: using guessed type int dword_467B08; | |
// 46FFCC: using guessed type int dword_46FFCC; | |
// 46FFD4: using guessed type int dword_46FFD4; | |
//----- (00419B90) -------------------------------------------------------- | |
int __usercall sub_419B90<eax>(int a1<edi>, int a2) | |
{ | |
int v2; // eax@3 | |
int v3; // esi@8 | |
if ( a2 != dword_43D04C ) | |
{ | |
if ( dword_43D04C < 0 ) | |
{ | |
dword_4678EC = a1 + 1; | |
dword_467904 = a1 + 1; | |
v2 = dword_46FFCC; | |
dword_4678F0 = a1; | |
dword_4678F4 = a1; | |
dword_467900 = 1; | |
dword_43D04C = a2; | |
} | |
else | |
{ | |
sub_419460(); | |
v2 = dword_46FFCC; | |
++dword_43D04C; | |
dword_467B08 += 512; | |
if ( dword_467B08 != dword_46FFCC + 4608 ) | |
{ | |
LABEL_7: | |
dword_4678FC = a1; | |
goto LABEL_8; | |
} | |
} | |
dword_467B08 = v2 + 3072; | |
goto LABEL_7; | |
} | |
LABEL_8: | |
v3 = dword_467B08 + 1536 * a1; | |
dword_4678F8 = a1; | |
sub_416D40(a2, a1, v3); | |
return v3; | |
} | |
// 43D04C: using guessed type int dword_43D04C; | |
// 4678EC: using guessed type int dword_4678EC; | |
// 4678F0: using guessed type int dword_4678F0; | |
// 4678F4: using guessed type int dword_4678F4; | |
// 4678F8: using guessed type int dword_4678F8; | |
// 4678FC: using guessed type int dword_4678FC; | |
// 467900: using guessed type int dword_467900; | |
// 467904: using guessed type int dword_467904; | |
// 467B08: using guessed type int dword_467B08; | |
// 46FFCC: using guessed type int dword_46FFCC; | |
//----- (00419C40) -------------------------------------------------------- | |
void __usercall sub_419C40(int a1<eax>) | |
{ | |
int v1; // edi@1 | |
int v2; // eax@1 | |
int v3; // ebp@1 | |
int v4; // eax@3 | |
int v5; // edx@3 | |
int v6; // esi@3 | |
int v7; // edx@3 | |
int v8; // eax@5 | |
int v9; // edi@8 | |
int v10; // eax@9 | |
int v11; // ecx@9 | |
v1 = a1; | |
v2 = *(_DWORD *)a1; | |
v3 = v2 + 2; | |
dword_70277C = (v2 - 1) & ((v2 - 1 <= 0) - 1); | |
if ( v2 + 2 >= 512 ) | |
v3 = 512; | |
v4 = *(_DWORD *)(v1 + 4); | |
v5 = v4 - 1 <= 0; | |
dword_4F1F5C = v3; | |
v6 = (v4 - 1) & (v5 - 1); | |
dword_4F1F60 = (v4 - 1) & (v5 - 1); | |
v7 = v4 + 2; | |
if ( v4 + 2 >= 512 ) | |
v7 = 512; | |
v8 = *(_DWORD *)(v1 + 8); | |
dword_5F1F80 = v7; | |
dword_6F5FA0 = v8 + 2; | |
dword_702760 = (v8 - 1) & ((v8 - 1 <= 0) - 1); | |
if ( v8 + 2 >= 62 ) | |
dword_6F5FA0 = 62; | |
for ( dword_4F1F4C = (int (__cdecl *)(_DWORD, _DWORD, _DWORD))sub_417230; v6 < v7; ++v6 ) | |
{ | |
v9 = dword_70277C; | |
if ( dword_70277C < v3 ) | |
{ | |
do | |
{ | |
v10 = sub_419B90(v9, v6); | |
sub_4168D0(v11, v10); | |
v3 = dword_4F1F5C; | |
++v9; | |
} | |
while ( v9 < dword_4F1F5C ); | |
v7 = dword_5F1F80; | |
} | |
} | |
sub_419AE0(); | |
sub_4165B0(); | |
} | |
// 417230: using guessed type int sub_417230(); | |
// 4F1F4C: using guessed type int (__cdecl *dword_4F1F4C)(_DWORD, _DWORD, _DWORD); | |
// 4F1F5C: using guessed type int dword_4F1F5C; | |
// 4F1F60: using guessed type int dword_4F1F60; | |
// 5F1F80: using guessed type int dword_5F1F80; | |
// 6F5FA0: using guessed type int dword_6F5FA0; | |
// 702760: using guessed type int dword_702760; | |
// 70277C: using guessed type int dword_70277C; | |
//----- (00419D30) -------------------------------------------------------- | |
void __thiscall sub_419D30(int this) | |
{ | |
int v1; // edx@1 | |
int v2; // edi@1 | |
int v3; // eax@1 | |
int v4; // eax@3 | |
int v5; // esi@3 | |
int v6; // eax@5 | |
int v7; // eax@7 | |
int v8; // ecx@7 | |
v1 = *(_DWORD *)this <= 0; | |
v2 = *(_DWORD *)this & (v1 - 1); | |
v3 = *(_DWORD *)this + 1; | |
dword_70277C = *(_DWORD *)this & (v1 - 1); | |
dword_4F1F5C = v3; | |
if ( v3 >= 512 ) | |
dword_4F1F5C = 512; | |
v4 = *(_DWORD *)(this + 4); | |
v5 = v4 & ((v4 <= 0) - 1); | |
dword_4F1F60 = v4 & ((v4 <= 0) - 1); | |
dword_5F1F80 = v4 + 1; | |
if ( v4 + 1 >= 512 ) | |
dword_5F1F80 = 512; | |
v6 = *(_DWORD *)(this + 8); | |
dword_6F5FA0 = v6 + 2; | |
dword_702760 = (v6 - 1) & ((v6 - 1 <= 0) - 1); | |
if ( v6 + 2 >= 62 ) | |
dword_6F5FA0 = 62; | |
dword_4F1F4C = (int (__cdecl *)(_DWORD, _DWORD, _DWORD))sub_417230; | |
v7 = sub_419B90(v2, v5); | |
sub_4168D0(v8, v7); | |
sub_419AE0(); | |
sub_4165B0(); | |
} | |
// 417230: using guessed type int sub_417230(); | |
// 4F1F4C: using guessed type int (__cdecl *dword_4F1F4C)(_DWORD, _DWORD, _DWORD); | |
// 4F1F5C: using guessed type int dword_4F1F5C; | |
// 4F1F60: using guessed type int dword_4F1F60; | |
// 5F1F80: using guessed type int dword_5F1F80; | |
// 6F5FA0: using guessed type int dword_6F5FA0; | |
// 702760: using guessed type int dword_702760; | |
// 70277C: using guessed type int dword_70277C; | |
//----- (00419DE0) -------------------------------------------------------- | |
void __usercall sub_419DE0(int a1<eax>) | |
{ | |
int v1; // edi@1 | |
int v2; // ecx@1 | |
int v3; // eax@1 | |
int v4; // ecx@1 | |
v1 = *(_DWORD *)a1; | |
dword_4F1F5C = *(_DWORD *)a1 + 1; | |
v2 = *(_DWORD *)(a1 + 4); | |
dword_702760 = *(_DWORD *)(a1 + 8); | |
dword_70277C = v1; | |
dword_4F1F60 = v2; | |
dword_5F1F80 = v2 + 1; | |
dword_6F5FA0 = dword_702760 + 1; | |
dword_4F1F4C = (int (__cdecl *)(_DWORD, _DWORD, _DWORD))sub_417230; | |
v3 = sub_419B90(v1, v2); | |
sub_4168D0(v4, v3); | |
sub_419AE0(); | |
sub_4165B0(); | |
} | |
// 417230: using guessed type int sub_417230(); | |
// 4F1F4C: using guessed type int (__cdecl *dword_4F1F4C)(_DWORD, _DWORD, _DWORD); | |
// 4F1F5C: using guessed type int dword_4F1F5C; | |
// 4F1F60: using guessed type int dword_4F1F60; | |
// 5F1F80: using guessed type int dword_5F1F80; | |
// 6F5FA0: using guessed type int dword_6F5FA0; | |
// 702760: using guessed type int dword_702760; | |
// 70277C: using guessed type int dword_70277C; | |
//----- (00419E40) -------------------------------------------------------- | |
int __usercall sub_419E40<eax>(int a1<eax>, int a2<ecx>) | |
{ | |
int v2; // esi@1 | |
int v3; // ebx@1 | |
int v4; // eax@1 | |
v2 = a2; | |
dword_702764 = a1 | 0x7F000000; | |
dword_4F1F4C = (int (__cdecl *)(_DWORD, _DWORD, _DWORD))sub_4172E0; | |
sub_416730(a2); | |
v3 = *(_DWORD *)(v2 + 8); | |
v4 = sub_419B90(*(_DWORD *)v2, *(_DWORD *)(v2 + 4)); | |
sub_4167E0(v3, v4, v3 + 1); | |
return sub_419AE0(); | |
} | |
// 4172E0: using guessed type int sub_4172E0(); | |
// 4F1F4C: using guessed type int (__cdecl *dword_4F1F4C)(_DWORD, _DWORD, _DWORD); | |
// 702764: using guessed type int dword_702764; | |
//----- (00419E90) -------------------------------------------------------- | |
void __cdecl sub_419E90() | |
{ | |
int v0; // edx@1 | |
int v1; // ebp@1 | |
int *v2; // ebx@2 | |
int i; // esi@5 | |
int j; // edi@6 | |
v0 = dword_701FC0; | |
v1 = dword_701FC0 - 1; | |
if ( dword_701FC0 - 1 >= 0 ) | |
{ | |
v2 = &dword_701FFC[15 * v1]; | |
do | |
{ | |
if ( *v2 < 0 ) | |
{ | |
if ( *v2 == -1 ) | |
{ | |
for ( i = v2[2]; i <= v2[5]; ++i ) | |
{ | |
for ( j = v2[1]; j <= v2[4]; ++j ) | |
sub_419B90(j, i); | |
} | |
sub_419AE0(); | |
v0 = dword_701FC0; | |
} | |
--v0; | |
dword_701FC0 = v0; | |
memcpy(v2 - 7, &dword_701FE0[15 * v0], 0x3Cu); | |
} | |
v2 -= 15; | |
--v1; | |
} | |
while ( v1 >= 0 ); | |
} | |
} | |
// 701FC0: using guessed type int dword_701FC0; | |
// 701FE0: using guessed type int dword_701FE0[]; | |
// 701FFC: using guessed type int dword_701FFC[]; | |
//----- (00419F20) -------------------------------------------------------- | |
unsigned int __cdecl sub_419F20() | |
{ | |
int v0; // ebp@1 | |
unsigned int v1; // edi@1 | |
int v2; // ecx@1 | |
unsigned int result; // eax@2 | |
void *v4; // esi@4 | |
void (__cdecl *v5)(_DWORD); // eax@4 | |
int v6; // [sp+Ch] [bp-14h]@1 | |
void *v7; // [sp+1Ch] [bp-4h]@4 | |
v0 = dword_283CC94; | |
v1 = (unsigned int)dword_2848704; | |
sub_42EC70(dword_283CC94, 0); | |
if ( sub_42DE60(v2, v1, (signed int)&v6, 2500) <= 0 ) | |
{ | |
LABEL_10: | |
result = sub_42EB80(v0); | |
} | |
else | |
{ | |
while ( 1 ) | |
{ | |
result = v6 - 2; | |
if ( v6 == 2 ) | |
break; | |
if ( v6 == 3 ) | |
{ | |
v4 = v7; | |
v5 = (void (__cdecl *)(_DWORD))*((_DWORD *)v7 + 4); | |
if ( v5 ) | |
v5(v7); | |
if ( !(*((_BYTE *)v4 + 4) & 4) ) | |
off_43D29C(*((_DWORD *)v4 + 2)); | |
off_43D29C(v4); | |
} | |
if ( sub_42DE60(v2, v1, (signed int)&v6, 2500) <= 0 ) | |
goto LABEL_10; | |
} | |
} | |
return result; | |
} | |
// 43D29C: using guessed type int (__cdecl *off_43D29C)(_DWORD); | |
//----- (00419FC0) -------------------------------------------------------- | |
bool __cdecl sub_419FC0(int a1) | |
{ | |
u_long v1; // edi@1 | |
int v2; // eax@1 | |
int v4; // [sp+Ch] [bp-1Ch]@3 | |
__int16 v5; // [sp+10h] [bp-18h]@3 | |
int v6; // [sp+14h] [bp-14h]@4 | |
v1 = hostlong; | |
v2 = sub_42F780(1); | |
dword_2848704 = (void *)v2; | |
return !v2 | |
|| sub_430960(v2) | |
|| (v4 = a1, v5 = -32649, (dword_283CC94 = sub_42F410((int)dword_2848704, (int)&v4, v1)) == 0) | |
|| sub_42DE60((int)dword_2848704, (unsigned int)dword_2848704, (signed int)&v6, 2500) <= 0 | |
|| v6 != 1; | |
} | |
//----- (0041A070) -------------------------------------------------------- | |
signed int __thiscall sub_41A070(int _ECX) | |
{ | |
signed int result; // eax@5 | |
__asm | |
{ | |
fld dword ptr [ecx] | |
fsub flt_4F1F40 | |
fst [esp+44h+var_44] | |
fstp [esp+44h+var_28] | |
fld dword ptr [ecx+4] | |
fsub flt_4F1F44 | |
fst [esp+44h+var_3C] | |
fstp [esp+44h+var_24] | |
fld [esp+44h+var_24] | |
fld [esp+44h+var_28] | |
fmul st, st | |
fld st(1) | |
fmulp st(2), st | |
faddp st(1), st | |
fcomp ds:dbl_4394A0 | |
fnstsw ax | |
} | |
if ( HIBYTE(_AX) & 0x41 ) | |
{ | |
_EAX = *(_DWORD *)(_ECX + 80); | |
__asm | |
{ | |
fild dword ptr [eax] | |
fld ds:dbl_439488 | |
fmul st(1), st | |
fxch st(1) | |
fstp [esp+44h+var_1C] | |
fld [esp+44h+var_1C] | |
fld st | |
fsub dword ptr [eax+0Ch] | |
fstp [esp+44h+var_28] | |
fild dword ptr [eax+4] | |
fmul st, st(2) | |
fstp [esp+44h+var_18] | |
fld [esp+44h+var_18] | |
fld st | |
fsub dword ptr [eax+10h] | |
fstp [esp+44h+var_24] | |
fild dword ptr [eax+8] | |
fmulp st(3), st | |
fxch st(2) | |
fstp [esp+44h+var_14] | |
fld [esp+44h+var_14] | |
fld st | |
fsub dword ptr [eax+14h] | |
fstp [esp+44h+var_20] | |
fld dword ptr [ecx+0Ch] | |
fld [esp+44h+var_28] | |
fld st | |
fmulp st(2), st | |
fld dword ptr [ecx+18h] | |
fld [esp+44h+var_24] | |
fld st | |
fmulp st(2), st | |
fxch st(3) | |
faddp st(1), st | |
fld dword ptr [ecx+24h] | |
fmul [esp+44h+var_20] | |
faddp st(1), st | |
fadd [esp+44h+var_44] | |
fstp [esp+44h+var_1C] | |
fld dword ptr [ecx+10h] | |
fmul st, st(1) | |
fld dword ptr [ecx+1Ch] | |
fmul st, st(3) | |
faddp st(1), st | |
fld dword ptr [ecx+28h] | |
fmul [esp+44h+var_20] | |
faddp st(1), st | |
fadd [esp+44h+var_3C] | |
fstp [esp+44h+var_18] | |
fmul dword ptr [ecx+14h] | |
fld dword ptr [ecx+20h] | |
fmulp st(2), st | |
faddp st(1), st | |
fld [esp+44h+var_20] | |
fmul dword ptr [ecx+2Ch] | |
faddp st(1), st | |
fld dword ptr [ecx+8] | |
fsub flt_4F1F48 | |
faddp st(1), st | |
fstp [esp+44h+var_14] | |
fld dword ptr [ecx+0Ch] | |
fmul st, st(2) | |
fstp dword ptr [esp+44h+var_3C] | |
fld dword ptr [ecx+10h] | |
fmul st, st(2) | |
fstp dword ptr [esp+44h+var_3C+4] | |
fld dword ptr [ecx+14h] | |
fmulp st(2), st | |
fxch st(1) | |
fstp [esp+44h+var_34] | |
fld dword ptr [ecx+18h] | |
fmul st, st(2) | |
fstp [esp+44h+var_28] | |
fld dword ptr [ecx+1Ch] | |
fmul st, st(2) | |
fstp [esp+44h+var_24] | |
fld dword ptr [ecx+20h] | |
fmulp st(2), st | |
fxch st(1) | |
fstp [esp+44h+var_20] | |
fld dword ptr [ecx+24h] | |
fmul st, st(1) | |
fstp [esp+44h+var_10] | |
fld dword ptr [ecx+28h] | |
fmul st, st(1) | |
fstp [esp+44h+var_C] | |
fmul dword ptr [ecx+2Ch] | |
} | |
_ECX = (signed int)&flt_273C5A8; | |
__asm | |
{ | |
fstp [esp+44h+var_8] | |
fld [esp+44h+var_14] | |
fld [esp+44h+var_18] | |
fld [esp+44h+var_1C] | |
fld [esp+44h+var_34] | |
} | |
while ( 1 ) | |
{ | |
__asm | |
{ | |
fld dword ptr [ecx] | |
fmul [esp+44h+var_24] | |
fld dword ptr [ecx-4] | |
fmul [esp+44h+var_28] | |
faddp st(1), st | |
fld dword ptr [ecx+4] | |
fmul [esp+44h+var_20] | |
faddp st(1), st | |
fabs | |
fstp dword ptr [esp+44h+var_44] | |
fld dword ptr [esp+44h+var_44] | |
fld dword ptr [ecx] | |
fmul dword ptr [esp+44h+var_3C+4] | |
fld dword ptr [ecx-4] | |
fmul dword ptr [esp+44h+var_3C] | |
faddp st(1), st | |
fld dword ptr [ecx+4] | |
fmul st, st(3) | |
faddp st(1), st | |
fabs | |
fstp dword ptr [esp+44h+var_44] | |
fadd dword ptr [esp+44h+var_44] | |
fld dword ptr [ecx] | |
fmul [esp+44h+var_C] | |
fld dword ptr [ecx-4] | |
fmul [esp+44h+var_10] | |
faddp st(1), st | |
fld dword ptr [ecx+4] | |
fmul [esp+44h+var_8] | |
faddp st(1), st | |
fabs | |
fstp dword ptr [esp+44h+var_44] | |
fadd dword ptr [esp+44h+var_44] | |
fld dword ptr [ecx-4] | |
fmul st, st(3) | |
faddp st(1), st | |
fld dword ptr [ecx] | |
fmul st, st(4) | |
faddp st(1), st | |
fld dword ptr [ecx+4] | |
fmul st, st(5) | |
faddp st(1), st | |
fcomp ds:dbl_439498 | |
fnstsw ax | |
} | |
if ( !__SETP__(HIBYTE(_AX) & 5, 0) ) | |
break; | |
_ECX -= 12; | |
if ( _ECX < (signed int)&flt_273C584 ) | |
{ | |
__asm { fstp st(3) } | |
result = 1; | |
__asm | |
{ | |
fstp st(1) | |
fstp st | |
fstp st | |
} | |
return result; | |
} | |
} | |
__asm | |
{ | |
fstp st(3) | |
fstp st(1) | |
fstp st | |
fstp st | |
} | |
} | |
return 0; | |
} | |
// 41A073: inconsistent fpu stack | |
// 273C584: using guessed type float flt_273C584; | |
// 273C5A8: using guessed type float flt_273C5A8; | |
//----- (0041A280) -------------------------------------------------------- | |
int __cdecl sub_41A280(int a1, int a2, int a3) | |
{ | |
__m64 v3; // mm1@1 | |
int result; // eax@1 | |
v3 = _m_pfsub(*(__m64 *)(a2 + 8), *(__m64 *)(a3 + 8)); | |
result = a1; | |
*(_QWORD *)a1 = _m_pfsub(*(__m64 *)a2, *(__m64 *)a3); | |
*(_QWORD *)(a1 + 8) = v3; | |
return result; | |
} | |
//----- (0041A2B0) -------------------------------------------------------- | |
int __cdecl sub_41A2B0(int a1, int a2, int a3) | |
{ | |
__m64 v3; // mm1@1 | |
int result; // eax@1 | |
v3 = _m_pfmul(*(__m64 *)(a2 + 8), *(__m64 *)(a3 + 8)); | |
result = a1; | |
*(_QWORD *)a1 = _m_pfmul(*(__m64 *)a2, *(__m64 *)a3); | |
*(_QWORD *)(a1 + 8) = v3; | |
return result; | |
} | |
//----- (0041A2E0) -------------------------------------------------------- | |
int __cdecl sub_41A2E0(int a1, int a2, int a3) | |
{ | |
__m64 v3; // mm1@1 | |
int result; // eax@1 | |
v3 = _m_pfadd(*(__m64 *)(a2 + 8), *(__m64 *)(a3 + 8)); | |
result = a1; | |
*(_QWORD *)a1 = _m_pfadd(*(__m64 *)a2, *(__m64 *)a3); | |
*(_QWORD *)(a1 + 8) = v3; | |
return result; | |
} | |
//----- (0041A310) -------------------------------------------------------- | |
int __cdecl sub_41A310(int a1, unsigned int a2) | |
{ | |
int result; // eax@1 | |
__m64 v3; // mm0@1 | |
__m64 v4; // mm0@1 | |
result = a1; | |
v3 = _m_pi2fd(_mm_cvtsi32_si64(a2)); | |
v4 = _m_punpckldq(v3, v3); | |
*(_QWORD *)a1 = v4; | |
*(_QWORD *)(a1 + 8) = v4; | |
return result; | |
} | |
//----- (0041A330) -------------------------------------------------------- | |
int __cdecl sub_41A330(int a1, int a2) | |
{ | |
__int64 v2; // mm1@1 | |
int result; // eax@1 | |
v2 = *(_QWORD *)(a2 + 8); | |
result = a1; | |
*(_QWORD *)a1 = *(_QWORD *)a2; | |
*(_QWORD *)(a1 + 8) = v2; | |
return result; | |
} | |
//----- (0041A3E0) -------------------------------------------------------- | |
signed int __usercall sub_41A3E0<eax>(int a1<esi>, __m64 a2<mm5>, int a3) | |
{ | |
unsigned int v3; // eax@1 | |
double v4; // st5@2 | |
signed int v5; // ecx@2 | |
float v6; // ST04_4@6 | |
float v7; // ST08_4@6 | |
float v8; // ST0C_4@6 | |
double v9; // ST10_8@6 | |
signed int result; // eax@6 | |
__m64 v11; // mm5@6 | |
__m64 v12; // mm6@6 | |
signed int v13; // ecx@6 | |
__m64 v14; // mm0@7 | |
__m64 v15; // mm1@7 | |
bool v16; // cf@7 | |
float v17; // [sp+24h] [bp+8h]@2 | |
float v18; // [sp+24h] [bp+8h]@6 | |
float v19; // [sp+24h] [bp+8h]@6 | |
float v20; // [sp+24h] [bp+8h]@6 | |
v3 = 0; | |
if ( a3 ) | |
{ | |
v4 = *(float *)(a1 + 4) - flt_4F1F44; | |
v17 = sqrt(v4 * v4 + (*(float *)a1 - flt_4F1F40) * (*(float *)a1 - flt_4F1F40)); | |
v5 = 2047; | |
if ( (signed int)v17 <= 2047 ) | |
v5 = (signed int)v17; | |
v3 = LODWORD(qword_4638D0[v5]); | |
qword_408100 = (__int64)_m_pmulhuw( | |
_m_paddd((__m64)qword_43D050, (__m64)qword_43D050), | |
(__m64)__PAIR__(HIDWORD(qword_4638D0[v5]), v3)); | |
_m_femms(); | |
} | |
else | |
{ | |
qword_408100 = 0i64; | |
} | |
v18 = (double)(((signed int)~v3 >> 2) & 0x1FFF); | |
word_4638B6 = (signed int)v18; | |
v6 = *(float *)(a1 + 16) + *(float *)(a1 + 12) + *(float *)(a1 + 20); | |
v7 = *(float *)(a1 + 28) + *(float *)(a1 + 24) + *(float *)(a1 + 32); | |
v8 = *(float *)(a1 + 40) + *(float *)(a1 + 36) + *(float *)(a1 + 44); | |
v9 = v18; | |
v19 = sqrt(v8 * v8 + v7 * v7 + v6 * v6); | |
v20 = v9 / (v19 + v19); | |
word_4638B0 = (signed int)(v6 * v20); | |
unk_4638B2 = (signed int)(v7 * v20); | |
result = (signed int)(v20 * v8); | |
word_4638B4 = (signed int)(v20 * v8); | |
v11 = _m_punpcklbw(a2, (__m64)qword_702768); | |
v12 = *(__m64 *)&word_4638B0; | |
v13 = 255; | |
do | |
{ | |
v14 = _m_pmaddwd((__m64)qword_4630B0[v13], v12); | |
v15 = _m_pmaddwd((__m64)qword_4630A8[v13], v12); | |
qword_407900[v13] = (__int64)_m_pmulhuw(_m_pshufw(_m_paddd(v14, _m_pshufw(v14, 78)), 85), v11); | |
qword_4078F8[v13] = (__int64)_m_pmulhuw(_m_pshufw(_m_paddd(v15, _m_pshufw(v15, 78)), 85), v11); | |
v16 = (unsigned int)(v13 * 8) < 0x10; | |
v13 -= 2; | |
} | |
while ( !v16 ); | |
return result; | |
} | |
// 4078F8: using guessed type __int64 qword_4078F8[]; | |
// 407900: using guessed type __int64 qword_407900[]; | |
// 408100: using guessed type __int64 qword_408100; | |
// 43D050: using guessed type __int64 qword_43D050; | |
// 4630A8: using guessed type __int64 qword_4630A8[]; | |
// 4630B0: using guessed type __int64 qword_4630B0[]; | |
// 4638B0: using guessed type __int16 word_4638B0; | |
// 4638B4: using guessed type __int16 word_4638B4; | |
// 4638B6: using guessed type __int16 word_4638B6; | |
// 4638D0: using guessed type __int64 qword_4638D0[]; | |
// 4F1F40: using guessed type float flt_4F1F40; | |
// 4F1F44: using guessed type float flt_4F1F44; | |
// 702768: using guessed type __int64 qword_702768; | |
//----- (0041A570) -------------------------------------------------------- | |
int __usercall sub_41A570<eax>(int a1<eax>, int a2, int a3, int a4) | |
{ | |
int v4; // edi@1 | |
int result; // eax@1 | |
signed int v6; // ebp@1 | |
signed int v7; // ecx@1 | |
int v8; // esi@12 | |
signed int j; // ecx@14 | |
int v10; // esi@20 | |
signed int i; // ecx@22 | |
int v12; // [sp+18h] [bp+8h]@20 | |
v4 = a1; | |
result = a3; | |
v6 = a4 - v4; | |
v7 = a3 - a2; | |
if ( (a3 - a2) | (a4 - v4) ) | |
{ | |
if ( a2 < dword_4716E4 ) | |
{ | |
if ( a2 >= 0 ) | |
{ | |
if ( a3 < dword_4716E4 ) | |
{ | |
if ( a3 >= 0 ) | |
{ | |
result = dword_471F28; | |
if ( v4 < dword_471F28 ) | |
{ | |
if ( v4 >= 0 && a4 < dword_471F28 && a4 >= 0 ) | |
{ | |
if ( abs(v7) < abs(v6) ) | |
{ | |
if ( a4 <= v4 ) | |
{ | |
v10 = a4; | |
v12 = v4; | |
} | |
else | |
{ | |
v10 = v4; | |
v12 = a4; | |
} | |
result = (v7 << 20) / v6; | |
for ( i = (a2 << 20) + result * (v10 - v4); v10 <= v12; i += result ) | |
{ | |
if ( i >> 20 < (unsigned int)dword_4716E4 ) | |
*(_DWORD *)(dword_273A800[v10] + ((i >> 18) & 0xFFFFFFFC) + HIDWORD(qword_4630A8[0])) = 65535; | |
++v10; | |
} | |
} | |
else | |
{ | |
if ( a3 <= a2 ) | |
{ | |
v8 = a3; | |
a3 = a2; | |
} | |
else | |
{ | |
v8 = a2; | |
} | |
result = (v6 << 20) / v7; | |
for ( j = (v4 << 20) + result * (v8 - a2); v8 <= a3; j += result ) | |
{ | |
if ( j >> 20 < (unsigned int)dword_471F28 ) | |
*(_DWORD *)(dword_273A800[j >> 20] + 4 * v8 + HIDWORD(qword_4630A8[0])) = 65535; | |
++v8; | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
return result; | |
} | |
// 4630A8: using guessed type __int64 qword_4630A8[]; | |
// 4716E4: using guessed type int dword_4716E4; | |
// 471F28: using guessed type int dword_471F28; | |
// 273A800: using guessed type int dword_273A800[]; | |
//----- (0041A6D0) -------------------------------------------------------- | |
signed int __usercall sub_41A6D0<eax>(int _EAX<eax>, int _ECX<ecx>, int _EDI<edi>, int _ESI<esi>) | |
{ | |
signed int result; // eax@5 | |
__asm { fld dword ptr [ecx+10h] } | |
_EDX = *(_DWORD *)(_ECX + 80); | |
__asm | |
{ | |
fld dword ptr [ecx+0Ch] | |
fld dword ptr [ecx+14h] | |
fld st(1) | |
fmulp st(2), st | |
fld st(2) | |
fmulp st(3), st | |
fxch st(1) | |
faddp st(2), st | |
fmul st, st | |
faddp st(1), st | |
fstp [esp+20h+var_1C] | |
fld [esp+20h+var_1C] | |
fst dword ptr [esi] | |
fld dword ptr [ecx+1Ch] | |
fld dword ptr [ecx+18h] | |
fld dword ptr [ecx+20h] | |
fld st(1) | |
fmulp st(2), st | |
fld st(2) | |
fmulp st(3), st | |
fxch st(1) | |
faddp st(2), st | |
fmul st, st | |
faddp st(1), st | |
fstp [esp+20h+var_1C] | |
fld [esp+20h+var_1C] | |
fst dword ptr [esi+4] | |
fld dword ptr [ecx+28h] | |
fld dword ptr [ecx+24h] | |
fld dword ptr [ecx+2Ch] | |
fld st(1) | |
fmulp st(2), st | |
fld st(2) | |
fmulp st(3), st | |
fxch st(1) | |
faddp st(2), st | |
fmul st, st | |
faddp st(1), st | |
fstp [esp+20h+var_1C] | |
fld [esp+20h+var_1C] | |
fst dword ptr [esi+8] | |
fld dword ptr [edi] | |
fsub dword ptr [ecx] | |
fstp [esp+20h+var_C] | |
fld dword ptr [edi+4] | |
fsub dword ptr [ecx+4] | |
fstp [esp+20h+var_8] | |
fld dword ptr [edi+8] | |
fsub dword ptr [ecx+8] | |
fstp [esp+20h+var_4] | |
fld dword ptr [ecx+10h] | |
fld [esp+20h+var_8] | |
fld st | |
fmulp st(2), st | |
fld [esp+20h+var_C] | |
fld st | |
fmul dword ptr [ecx+0Ch] | |
faddp st(3), st | |
fld dword ptr [ecx+14h] | |
fmul [esp+20h+var_4] | |
faddp st(3), st | |
fld st(5) | |
fdivp st(3), st | |
fld dword ptr [edx+0Ch] | |
faddp st(3), st | |
fxch st(2) | |
fstp [esp+20h+var_18] | |
fld dword ptr [ecx+18h] | |
fmul st, st(2) | |
fld dword ptr [ecx+1Ch] | |
fmul st, st(2) | |
faddp st(1), st | |
fld dword ptr [ecx+20h] | |
fmul [esp+20h+var_4] | |
faddp st(1), st | |
fdiv st, st(4) | |
fadd dword ptr [edx+10h] | |
fstp [esp+20h+var_14] | |
fld dword ptr [ecx+24h] | |
fmulp st(2), st | |
fmul dword ptr [ecx+28h] | |
faddp st(1), st | |
fld dword ptr [ecx+2Ch] | |
fmul [esp+20h+var_4] | |
faddp st(1), st | |
fdiv st, st(1) | |
fadd dword ptr [edx+14h] | |
fstp [esp+20h+var_10] | |
fld dword ptr [ecx+10h] | |
fmul dword ptr [eax+4] | |
fld dword ptr [eax] | |
fmul dword ptr [ecx+0Ch] | |
faddp st(1), st | |
fld dword ptr [ecx+14h] | |
fmul dword ptr [eax+8] | |
faddp st(1), st | |
fdivrp st(3), st | |
fxch st(2) | |
fstp [esp+20h+var_C] | |
fld dword ptr [ecx+1Ch] | |
fmul dword ptr [eax+4] | |
fld dword ptr [ecx+18h] | |
fmul dword ptr [eax] | |
faddp st(1), st | |
fld dword ptr [ecx+20h] | |
fmul dword ptr [eax+8] | |
faddp st(1), st | |
fdivrp st(1), st | |
fstp [esp+20h+var_8] | |
fld dword ptr [ecx+28h] | |
fmul dword ptr [eax+4] | |
fld dword ptr [ecx+24h] | |
fmul dword ptr [eax] | |
faddp st(1), st | |
fld dword ptr [ecx+2Ch] | |
fmul dword ptr [eax+8] | |
faddp st(1), st | |
fdivrp st(1), st | |
fstp [esp+20h+var_4] | |
fldz | |
fld [esp+20h+var_18] | |
fcom st(1) | |
fnstsw ax | |
fld [esp+20h+var_4] | |
fld [esp+20h+var_8] | |
fld [esp+20h+var_C] | |
} | |
if ( __SETP__(HIBYTE(_AX) & 5, 0) ) | |
{ | |
__asm | |
{ | |
fild dword ptr [edx] | |
fstp [esp+20h+var_1C] | |
fld [esp+20h+var_1C] | |
fcom st(4) | |
fnstsw ax | |
} | |
if ( __SETP__(HIBYTE(_AX) & 5, 0) ) | |
{ | |
__asm | |
{ | |
fstp st | |
fxch st(1) | |
fxch st(4) | |
fxch st(1) | |
fxch st(3) | |
} | |
} | |
else | |
{ | |
__asm | |
{ | |
fxch st(1) | |
fcom st(5) | |
fnstsw ax | |
} | |
if ( !(HIBYTE(_AX) & 1) ) | |
{ | |
__asm { fstp st(4) } | |
result = 0; | |
__asm | |
{ | |
fstp st(4) | |
fstp st(1) | |
fstp st | |
fstp st | |
fstp st | |
} | |
return result; | |
} | |
__asm | |
{ | |
fld st(1) | |
fsubp st(5), st | |
fld st | |
fdivp st(5), st | |
fxch st(4) | |
fstp [esp+20h+var_20] | |
fstp [esp+20h+var_18] | |
fld [esp+20h+var_14] | |
fld [esp+20h+var_20] | |
fld st | |
fmul st, st(3) | |
fsubp st(2), st | |
fxch st(1) | |
fstp [esp+20h+var_14] | |
fld st(2) | |
fmulp st(1), st | |
fsubr [esp+20h+var_10] | |
fstp [esp+20h+var_10] | |
fld [esp+20h+var_18] | |
fxch st(1) | |
fxch st(4) | |
fxch st(1) | |
} | |
} | |
} | |
else | |
{ | |
__asm | |
{ | |
fcom st(4) | |
fnstsw ax | |
} | |
if ( !__SETP__(HIBYTE(_AX) & 0x41, 0) ) | |
{ | |
__asm | |
{ | |
fstp st(3) | |
fstp st(3) | |
} | |
LABEL_4: | |
__asm { fstp st } | |
LABEL_5: | |
__asm { fstp st(1) } | |
result = 0; | |
__asm { fstp st } | |
return result; | |
} | |
__asm | |
{ | |
fld st | |
fdivp st(4), st | |
fxch st(3) | |
fstp [esp+20h+var_20] | |
fxch st(3) | |
fst [esp+20h+var_18] | |
fld [esp+20h+var_14] | |
fld [esp+20h+var_20] | |
fld st | |
fmul st, st(6) | |
fsubp st(2), st | |
fxch st(1) | |
fstp [esp+20h+var_14] | |
fld st(2) | |
fmulp st(1), st | |
fsubr [esp+20h+var_10] | |
fstp [esp+20h+var_10] | |
fld [esp+20h+var_18] | |
} | |
} | |
__asm | |
{ | |
fld [esp+20h+var_14] | |
fcom st(2) | |
fnstsw ax | |
} | |
if ( __SETP__(HIBYTE(_AX) & 5, 0) ) | |
{ | |
__asm | |
{ | |
fild dword ptr [edx+4] | |
fcomp st(1) | |
fnstsw ax | |
} | |
if ( __SETP__(HIBYTE(_AX) & 5, 0) ) | |
{ | |
__asm { fxch st(1) } | |
} | |
else | |
{ | |
__asm | |
{ | |
fxch st(5) | |
fcom st(2) | |
fnstsw ax | |
} | |
if ( !(HIBYTE(_AX) & 1) ) | |
goto LABEL_13; | |
__asm | |
{ | |
fild dword ptr [edx+4] | |
fstp [esp+20h+var_1C] | |
fld [esp+20h+var_1C] | |
fld st | |
fsubp st(7), st | |
fld st(1) | |
fdivp st(7), st | |
fxch st(6) | |
fstp [esp+20h+var_20] | |
fxch st(5) | |
fstp [esp+20h+var_14] | |
fld [esp+20h+var_20] | |
fld st | |
fmul st, st(5) | |
fsubp st(2), st | |
fxch st(1) | |
fstp [esp+20h+var_18] | |
fld st(2) | |
fmulp st(1), st | |
fsubr [esp+20h+var_10] | |
fstp [esp+20h+var_10] | |
fld [esp+20h+var_14] | |
fld [esp+20h+var_18] | |
} | |
} | |
} | |
else | |
{ | |
__asm | |
{ | |
fxch st(5) | |
fcom st(2) | |
fnstsw ax | |
} | |
if ( !__SETP__(HIBYTE(_AX) & 0x41, 0) ) | |
{ | |
LABEL_13: | |
__asm { fstp st(1) } | |
result = 0; | |
__asm | |
{ | |
fstp st(1) | |
fstp st(1) | |
fstp st | |
fstp st | |
fstp st | |
} | |
return result; | |
} | |
__asm | |
{ | |
fld st | |
fdivp st(6), st | |
fxch st(5) | |
fstp [esp+20h+var_20] | |
fxch st(1) | |
fst [esp+20h+var_14] | |
fld [esp+20h+var_20] | |
fld st | |
fmul st, st(5) | |
fsubp st(3), st | |
fxch st(2) | |
fstp [esp+20h+var_18] | |
fld [esp+20h+var_10] | |
fld st(3) | |
fmulp st(3), st | |
fsubrp st(2), st | |
fxch st(1) | |
fstp [esp+20h+var_10] | |
fld [esp+20h+var_14] | |
fld [esp+20h+var_18] | |
} | |
} | |
__asm | |
{ | |
fld [esp+20h+var_10] | |
fcom st(3) | |
fnstsw ax | |
} | |
if ( __SETP__(HIBYTE(_AX) & 5, 0) ) | |
{ | |
__asm | |
{ | |
fild dword ptr [edx+8] | |
fcompp | |
fnstsw ax | |
} | |
if ( __SETP__(HIBYTE(_AX) & 5, 0) ) | |
{ | |
__asm | |
{ | |
fstp st(3) | |
fstp st(4) | |
fstp st(2) | |
fxch st(1) | |
fxch st(2) | |
fxch st(1) | |
} | |
} | |
else | |
{ | |
__asm | |
{ | |
fxch st(3) | |
fcom st(2) | |
fnstsw ax | |
} | |
if ( !(HIBYTE(_AX) & 1) ) | |
{ | |
__asm { fstp st(3) } | |
result = 0; | |
__asm | |
{ | |
fstp st(1) | |
fstp st(1) | |
fstp st(2) | |
fstp st | |
fstp st | |
} | |
return result; | |
} | |
__asm | |
{ | |
fild dword ptr [edx+8] | |
fstp [esp+20h+var_1C] | |
fld [esp+20h+var_10] | |
fsub [esp+20h+var_1C] | |
fdivrp st(1), st | |
fstp [esp+20h+var_20] | |
fld [esp+20h+var_1C] | |
fstp [esp+20h+var_10] | |
fld [esp+20h+var_20] | |
fld st | |
fmulp st(5), st | |
fxch st(3) | |
fsubrp st(4), st | |
fxch st(3) | |
fstp [esp+20h+var_18] | |
fxch st(1) | |
fmulp st(3), st | |
fxch st(1) | |
fsubrp st(2), st | |
fxch st(1) | |
fstp [esp+20h+var_14] | |
fld [esp+20h+var_14] | |
fld [esp+20h+var_18] | |
} | |
} | |
} | |
else | |
{ | |
__asm | |
{ | |
fxch st(4) | |
fcom st(3) | |
fnstsw ax | |
} | |
if ( !__SETP__(HIBYTE(_AX) & 0x41, 0) ) | |
{ | |
__asm { fstp st(1) } | |
result = 0; | |
__asm | |
{ | |
fstp st(2) | |
fstp st(1) | |
fstp st(3) | |
fstp st(1) | |
fstp st(1) | |
fstp st | |
} | |
return result; | |
} | |
__asm | |
{ | |
fdivp st(4), st | |
fxch st(3) | |
fstp [esp+20h+var_20] | |
fxch st(1) | |
fst [esp+20h+var_10] | |
fld [esp+20h+var_20] | |
fld st | |
fmulp st(5), st | |
fxch st(3) | |
fsubrp st(4), st | |
fxch st(3) | |
fstp [esp+20h+var_18] | |
fxch st(1) | |
fmulp st(3), st | |
fsubrp st(2), st | |
fxch st(1) | |
fstp [esp+20h+var_14] | |
fld [esp+20h+var_14] | |
fld [esp+20h+var_18] | |
} | |
} | |
__asm | |
{ | |
fcom st(2) | |
fnstsw ax | |
} | |
if ( !__SETP__(HIBYTE(_AX) & 5, 0) ) | |
goto LABEL_4; | |
__asm | |
{ | |
fild dword ptr [edx] | |
fcomp st(1) | |
fnstsw ax | |
} | |
if ( !__SETP__(HIBYTE(_AX) & 5, 0) ) | |
goto LABEL_4; | |
__asm | |
{ | |
fxch st(2) | |
fcomp st(1) | |
fnstsw ax | |
} | |
if ( !(HIBYTE(_AX) & 0x41) ) | |
goto LABEL_5; | |
__asm | |
{ | |
fild dword ptr [edx+4] | |
fcomp st(1) | |
fnstsw ax | |
} | |
if ( !__SETP__(HIBYTE(_AX) & 5, 0) ) | |
goto LABEL_5; | |
__asm { fld dword ptr [edx+0Ch] } | |
result = 1; | |
__asm | |
{ | |
fsubp st(2), st | |
fxch st(1) | |
fstp [esp+20h+var_18] | |
fsub dword ptr [edx+10h] | |
fstp [esp+20h+var_14] | |
fld [esp+20h+var_10] | |
fsub dword ptr [edx+14h] | |
fstp [esp+20h+var_10] | |
fld dword ptr [ecx+18h] | |
fld [esp+20h+var_14] | |
fld st | |
fmulp st(2), st | |
fld [esp+20h+var_18] | |
fld st | |
fmul dword ptr [ecx+0Ch] | |
faddp st(3), st | |
fld dword ptr [ecx+24h] | |
fld [esp+20h+var_10] | |
fld st | |
fmulp st(2), st | |
fxch st(4) | |
faddp st(1), st | |
fadd dword ptr [ecx] | |
fstp dword ptr [esi] | |
fld dword ptr [ecx+10h] | |
fmul st, st(1) | |
fld dword ptr [ecx+1Ch] | |
fmul st, st(3) | |
faddp st(1), st | |
fld dword ptr [ecx+28h] | |
fmul st, st(4) | |
faddp st(1), st | |
fadd dword ptr [ecx+4] | |
fstp dword ptr [esi+4] | |
fmul dword ptr [ecx+14h] | |
fld dword ptr [ecx+20h] | |
fmulp st(2), st | |
faddp st(1), st | |
fld dword ptr [ecx+2Ch] | |
fmulp st(2), st | |
faddp st(1), st | |
fadd dword ptr [ecx+8] | |
fstp dword ptr [esi+8] | |
} | |
return result; | |
} | |
// 41A6D3: inconsistent fpu stack | |
//----- (0041AB50) -------------------------------------------------------- | |
char __cdecl sub_41AB50() | |
{ | |
char result; // al@1 | |
result = 32; | |
BYTE7(qword_43D068) = 64; | |
BYTE7(qword_43D070) = 0; | |
BYTE3(off_43D07C) = 32; | |
BYTE3(off_43D084) = 32; | |
BYTE3(off_43D08C) = 16; | |
BYTE3(off_43D094) = 48; | |
return result; | |
} | |
// 43D068: using guessed type __int64 qword_43D068; | |
// 43D070: using guessed type __int64 qword_43D070; | |
// 43D07C: using guessed type void *off_43D07C; | |
// 43D084: using guessed type void *off_43D084; | |
// 43D08C: using guessed type void *off_43D08C; | |
// 43D094: using guessed type void *off_43D094; | |
//----- (0041AB80) -------------------------------------------------------- | |
int __usercall sub_41AB80<eax>(int a1<eax>, int a2<ecx>, int a3, int a4, int a5, int a6, int a7) | |
{ | |
float v7; // edi@1 | |
float v8; // esi@1 | |
float v9; // edx@1 | |
float v10; // ecx@1 | |
int v11; // edx@1 | |
int v12; // ecx@1 | |
float v13; // edx@1 | |
int result; // eax@1 | |
LODWORD(flt_4F1F40) = *(_DWORD *)a3; | |
LODWORD(v7) = *(_DWORD *)(a3 + 4); | |
LODWORD(flt_4F1F48) = *(_DWORD *)(a3 + 8); | |
LODWORD(flt_5F1F90) = *(_DWORD *)a4; | |
__asm { fld flt_5F1F90 } | |
LODWORD(v8) = *(_DWORD *)(a4 + 4); | |
LODWORD(flt_5F1F98) = *(_DWORD *)(a4 + 8); | |
LODWORD(flt_702770) = *(_DWORD *)a2; | |
LODWORD(v9) = *(_DWORD *)(a2 + 4); | |
LODWORD(v10) = *(_DWORD *)(a2 + 8); | |
flt_702774 = v9; | |
v11 = *(_DWORD *)a1; | |
flt_702778 = v10; | |
v12 = *(_DWORD *)(a1 + 4); | |
dword_4F1F50 = v11; | |
LODWORD(v13) = *(_DWORD *)(a1 + 8); | |
__asm | |
{ | |
fst dword ptr qword_4678D0 | |
fld flt_702770 | |
} | |
flt_5F1F94 = v8; | |
__asm { fst dword ptr qword_4678D0+4 } | |
dword_4F1F54 = v12; | |
__asm { fld dword_4F1F50 } | |
flt_4F1F58 = v13; | |
__asm { fst flt_4678D8 } | |
flt_4F1F44 = v7; | |
__asm { fld flt_5F1F94 } | |
result = a5; | |
__asm | |
{ | |
fst flt_459104 | |
fld flt_702774 | |
fst flt_459108 | |
} | |
HIDWORD(qword_4605F4) = a5; | |
__asm { fld dword_4F1F54 } | |
dword_45F13C = a6; | |
__asm { fstp flt_45910C } | |
dword_45F124 = a7; | |
__asm | |
{ | |
fld flt_5F1F98 | |
fstp flt_4605E8 | |
fld flt_702778 | |
fstp flt_4605EC | |
fld flt_4F1F58 | |
fstp flt_4605F0 | |
fld flt_4F1F44 | |
fmul st, st(2) | |
fld flt_4F1F40 | |
fmul st, st(6) | |
faddp st(1), st | |
fld flt_4F1F48 | |
fmul flt_5F1F98 | |
faddp st(1), st | |
fchs | |
fstp flt_4605FC | |
fld flt_4F1F44 | |
fmul st, st(1) | |
fld flt_4F1F40 | |
fmul st, st(5) | |
faddp st(1), st | |
fld flt_4F1F48 | |
fmul flt_702778 | |
faddp st(1), st | |
fchs | |
fstp flt_460600 | |
fld flt_4F1F44 | |
fmul dword_4F1F54 | |
fld flt_4F1F40 | |
fmul st, st(4) | |
faddp st(1), st | |
fld flt_4F1F48 | |
fmul flt_4F1F58 | |
faddp st(1), st | |
fchs | |
fstp flt_460604 | |
fild [esp+10h+arg_10] | |
fstp [esp+10h+arg_10] | |
fild [esp+10h+arg_C] | |
fstp [esp+10h+arg_C] | |
fild [esp+10h+arg_8] | |
fstp [esp+10h+arg_8] | |
fld [esp+10h+arg_10] | |
fmulp st(3), st | |
fld [esp+10h+arg_8] | |
fmul st, st(5) | |
fld [esp+10h+arg_C] | |
fmul st, st(5) | |
faddp st(1), st | |
fsubp st(3), st | |
fxch st(2) | |
fstp flt_4590D4 | |
fld [esp+10h+arg_10] | |
fmul dword_4F1F54 | |
fld [esp+10h+arg_8] | |
fmul st, st(2) | |
fld [esp+10h+arg_C] | |
fmul st, st(4) | |
faddp st(1), st | |
fsubp st(1), st | |
fstp flt_4590D8 | |
fld [esp+10h+arg_10] | |
fmul flt_4F1F58 | |
fld [esp+10h+arg_C] | |
fmul flt_702778 | |
fld [esp+10h+arg_8] | |
fmul flt_5F1F98 | |
faddp st(1), st | |
fsubp st(1), st | |
fstp flt_4590DC | |
fild dword_4716E4 | |
fstp [esp+10h+arg_10] | |
fld [esp+10h+arg_10] | |
fld st | |
fmulp st(5), st | |
fld flt_4590D4 | |
fld st | |
faddp st(6), st | |
fxch st(5) | |
fstp flt_4590E0 | |
fld st | |
fmulp st(2), st | |
fld flt_4590D8 | |
fld st | |
faddp st(3), st | |
fxch st(2) | |
fstp flt_4590E4 | |
fmul flt_5F1F98 | |
fld flt_4590DC | |
fld st | |
faddp st(2), st | |
fxch st(1) | |
fstp flt_4590E8 | |
fild dword_471F28 | |
fstp [esp+10h+arg_10] | |
fld [esp+10h+arg_10] | |
fld st | |
fmulp st(5), st | |
fxch st(4) | |
fst [esp+10h+var_8] | |
fld flt_4590E0 | |
fld st | |
faddp st(2), st | |
fxch st(1) | |
fstp flt_4590EC | |
fld st(4) | |
fmulp st(4), st | |
fld flt_4590E4 | |
fld st | |
fadd st, st(5) | |
fstp flt_4590F0 | |
fld flt_702778 | |
fmulp st(6), st | |
fld flt_4590E8 | |
fadd st, st(6) | |
fstp flt_4590F4 | |
fld st(6) | |
fadd [esp+10h+var_8] | |
fstp flt_4590F8 | |
fld st(3) | |
faddp st(5), st | |
fxch st(4) | |
fstp flt_4590FC | |
fld st(1) | |
faddp st(5), st | |
fxch st(4) | |
fstp flt_459100 | |
fld flt_4590FC | |
fmul st, st(1) | |
fld flt_459100 | |
fmul st, st(3) | |
fsubp st(1), st | |
fstp flt_273C5A4 | |
fld flt_459100 | |
fmul st, st(5) | |
fld flt_4590F8 | |
fmul st, st(2) | |
fsubp st(1), st | |
fstp flt_273C5A8 | |
fld flt_4590F8 | |
fmul st, st(2) | |
fld flt_4590FC | |
fmul st, st(6) | |
fsubp st(1), st | |
fstp flt_273C5AC | |
fld flt_4590E8 | |
fmul st, st(2) | |
fld st(3) | |
fmul st, st(2) | |
fsubp st(1), st | |
fstp flt_273C580 | |
fmul st, st(3) | |
fld flt_4590E8 | |
fld st | |
fmul st, st(6) | |
fsubp st(2), st | |
fxch st(1) | |
fstp flt_273C584 | |
fld st(2) | |
fmulp st(5), st | |
fld st(3) | |
fmulp st(2), st | |
fxch st(4) | |
fsubrp st(1), st | |
fstp flt_273C588 | |
fld flt_4590F4 | |
fld st | |
fmul st, st(2) | |
fld flt_4590F0 | |
fld st | |
fmul st, st(6) | |
fsubp st(2), st | |
fxch st(1) | |
fstp flt_273C58C | |
fld flt_4590EC | |
fld st | |
fmulp st(6), st | |
fld st(2) | |
fmul st, st(5) | |
fsubp st(6), st | |
fxch st(5) | |
fstp flt_273C590 | |
fld st | |
fmulp st(4), st | |
fld st(4) | |
fmulp st(3), st | |
fxch st(3) | |
fsubrp st(2), st | |
fxch st(1) | |
fstp flt_273C594 | |
fld flt_459100 | |
fld st | |
fmul st, st(3) | |
fld flt_4590FC | |
fld st | |
fmul st, st(4) | |
fsubp st(2), st | |
fxch st(1) | |
fstp flt_273C598 | |
fld flt_4590F8 | |
fld st | |
fmulp st(4), st | |
fld st(5) | |
fmulp st(3), st | |
fxch st(3) | |
fsubrp st(2), st | |
fxch st(1) | |
fstp flt_273C59C | |
fmulp st(3), st | |
fmulp st(1), st | |
fsubp st(1), st | |
fstp flt_273C5A0 | |
} | |
return result; | |
} | |
// 41ABA9: inconsistent fpu stack | |
// 45F124: using guessed type int dword_45F124; | |
// 45F13C: using guessed type int dword_45F13C; | |
// 4605F4: using guessed type __int64 qword_4605F4; | |
// 4678D0: using guessed type __int64 qword_4678D0[]; | |
// 4F1F40: using guessed type float flt_4F1F40; | |
// 4F1F44: using guessed type float flt_4F1F44; | |
// 4F1F48: using guessed type float flt_4F1F48; | |
// 4F1F50: using guessed type int dword_4F1F50; | |
// 4F1F54: using guessed type int dword_4F1F54; | |
// 4F1F58: using guessed type float flt_4F1F58; | |
// 5F1F90: using guessed type float flt_5F1F90; | |
// 5F1F94: using guessed type float flt_5F1F94; | |
// 5F1F98: using guessed type float flt_5F1F98; | |
// 702770: using guessed type float flt_702770; | |
// 702774: using guessed type float flt_702774; | |
// 702778: using guessed type float flt_702778; | |
//----- (0041AF60) -------------------------------------------------------- | |
void __cdecl sub_41AF60(unsigned int a1, __m64 a2, int a3, int a4) | |
{ | |
int v4; // eax@2 | |
int v5; // esi@2 | |
int v6; // edi@2 | |
__m64 v7; // mm0@2 | |
__m64 v8; // mm1@2 | |
__m64 v9; // mm0@2 | |
int v10; // ecx@2 | |
int v11; // edx@2 | |
int v12; // ebx@2 | |
__m64 v13; // mm5@3 | |
__m64 v14; // mm2@3 | |
__m64 v15; // mm4@3 | |
__m64 v16; // mm3@3 | |
unsigned int v17; // eax@3 | |
__m64 v18; // mm2@3 | |
__m64 v19; // mm4@3 | |
__m64 v20; // mm4@3 | |
if ( a1 < HIDWORD(a2.m64_u64) ) | |
{ | |
v4 = HIDWORD(qword_4630A8[0]) + dword_273A800[(signed int)a2.m64_u64]; | |
v5 = v4 + 4 * HIDWORD(a2.m64_u64); | |
v6 = v4 + 4 * a1; | |
v7 = _m_pi2fd(_m_punpckldq(_mm_cvtsi32_si64(a1), a2)); | |
v8 = _m_punpckldq(_mm_cvtsi32_si64(dword_4605CC), (__m64)qword_45F144); | |
v9 = _m_pfadd( | |
_m_pfadd( | |
_m_pfmul(_m_punpckldq(v7, v7), v8), | |
_m_pfmul(_m_pshufw(v7, -18), _m_punpckldq(_mm_cvtsi32_si64(dword_4678E0), (__m64)qword_4605F4))), | |
_m_punpckldq(_mm_cvtsi32_si64(dword_4638C8), (__m64)qword_45F134)); | |
v10 = dword_273B810; | |
v11 = a3; | |
v12 = dword_4638C4 + 4 * a1; | |
do | |
{ | |
v13 = _mm_cvtsi32_si64(*(_DWORD *)v12); | |
*(_DWORD *)v12 = _mm_cvtsi64_si32(_m_paddd(v13, *(__m64 *)(v12 + 5120))); | |
v14 = *(__m64 *)(dword_459110[_m_pextrw(v13, 1)] + 8 * v11); | |
v15 = _m_pfmul(v9, v9); | |
v9 = _m_pfadd(v9, v8); | |
v16 = _m_pfmul(_m_pi2fd(_m_pshufw(v14, -18)), _m_pfrsqrt(_m_pfacc(v15, v15))); | |
v17 = _m_pextrw(v14, 3); | |
v18 = _m_punpcklbw(v14, 0i64); | |
v19 = _m_psubw((__m64)qword_43D050, v18); | |
v20 = _m_pmulhw(_m_paddw(v19, v19), (__m64)qword_4638D0[v17 >> 4]); | |
*(_DWORD *)v6 = _mm_cvtsi64_si32(_m_packuswb(_m_paddw(v18, v20), v20)); | |
*(_DWORD *)(v6 + v10) = _mm_cvtsi64_si32(v16); | |
v11 += a4; | |
v12 += 4; | |
v6 += 4; | |
} | |
while ( v6 < (unsigned int)v5 ); | |
} | |
} | |
// 43D050: using guessed type __int64 qword_43D050; | |
// 459110: using guessed type int dword_459110[]; | |
// 45F134: using guessed type __int64 qword_45F134; | |
// 45F144: using guessed type __int64 qword_45F144; | |
// 4605CC: using guessed type int dword_4605CC; | |
// 4605F4: using guessed type __int64 qword_4605F4; | |
// 4630A8: using guessed type __int64 qword_4630A8[]; | |
// 4638C4: using guessed type int dword_4638C4; | |
// 4638C8: using guessed type int dword_4638C8; | |
// 4638D0: using guessed type __int64 qword_4638D0[]; | |
// 4678E0: using guessed type int dword_4678E0; | |
// 273A800: using guessed type int dword_273A800[]; | |
// 273B810: using guessed type int dword_273B810; | |
//----- (0041B070) -------------------------------------------------------- | |
unsigned int __usercall sub_41B070<eax>(__m64 a1<mm0>, __m128 a2<xmm0>, __m128 a3<xmm1>, int a4, signed int a5, int a6, int a7, int a8) | |
{ | |
unsigned int result; // eax@1 | |
int v9; // ecx@1 | |
int v10; // edi@1 | |
__m128 v11; // xmm0@1 | |
__m128 v12; // xmm1@1 | |
__m128 v13; // xmm2@1 | |
__m128 v14; // xmm3@1 | |
__m128 v15; // xmm0@1 | |
__m128 v16; // xmm2@1 | |
int v17; // ecx@1 | |
int v18; // esi@1 | |
int v19; // ebx@1 | |
int v20; // edx@7 | |
float v21; // xmm7_4@7 | |
__m64 v22; // mm0@7 | |
__m64 v23; // mm1@7 | |
__m64 v24; // mm1@7 | |
__m64 v25; // mm7@12 | |
__m64 v26; // mm6@12 | |
__m64 v27; // mm4@12 | |
__m64 v28; // mm1@12 | |
int v29; // eax@12 | |
int v30; // edx@12 | |
__m64 v31; // mm7@12 | |
__m64 v32; // mm5@12 | |
__m64 v33; // mm3@12 | |
__m64 v34; // mm0@12 | |
__m64 v35; // mm2@12 | |
__m64 v36; // mm4@12 | |
__m64 v37; // mm5@12 | |
__m64 v38; // mm0@12 | |
__m64 v39; // mm1@12 | |
__m64 v40; // mm2@12 | |
__m64 v41; // mm3@12 | |
__m64 v42; // mm7@12 | |
__m64 v43; // mm0@12 | |
__m64 v44; // mm7@12 | |
__m64 v45; // mm1@12 | |
__m64 v46; // mm7@12 | |
__m64 v47; // mm2@12 | |
__m64 v48; // mm7@12 | |
__m64 v49; // mm2@12 | |
__m64 v50; // mm7@15 | |
__m64 v51; // mm6@15 | |
__m64 v52; // mm4@15 | |
__m64 v53; // mm1@15 | |
int v54; // eax@15 | |
int v55; // edx@15 | |
__m64 v56; // mm7@15 | |
__m64 v57; // mm5@15 | |
__m64 v58; // mm3@15 | |
__m64 v59; // mm0@15 | |
__m64 v60; // mm2@15 | |
__m64 v61; // mm4@15 | |
__m64 v62; // mm5@15 | |
__m64 v63; // mm0@15 | |
__m64 v64; // mm1@15 | |
__m64 v65; // mm2@15 | |
__m64 v66; // mm3@15 | |
__m64 v67; // mm7@15 | |
__m64 v68; // mm0@15 | |
__m64 v69; // mm7@15 | |
__m64 v70; // mm1@15 | |
__m64 v71; // mm7@15 | |
__m64 v72; // mm2@15 | |
__m64 v73; // mm7@15 | |
__m64 v74; // mm2@15 | |
int v75; // edx@17 | |
float v76; // xmm7_4@17 | |
__m64 v77; // mm0@17 | |
__m64 v78; // mm1@17 | |
__m64 v79; // mm1@17 | |
int v80; // [sp+1Ch] [bp+10h]@1 | |
result = a5; | |
v9 = HIDWORD(qword_4630A8[0]) + dword_273A800[a5]; | |
v10 = v9 + 4 * a4; | |
a2.m128_f32[0] = (float)(a4 & 0xFFFFFFFC); | |
a3.m128_f32[0] = a2.m128_f32[0]; | |
a2.m128_f32[0] = (float)((float)(a2.m128_f32[0] * *(float *)&dword_4605CC) + *(float *)&dword_4638C8) | |
+ (float)((float)a5 * *(float *)&dword_4678E0); | |
a3.m128_f32[0] = (float)((float)(a3.m128_f32[0] * *(float *)&qword_45F144) + *(float *)&qword_45F134) | |
+ (float)((float)a5 * *(float *)&qword_4605F4); | |
v11 = _mm_add_ps(_mm_shuffle_ps(a2, a2, 0), (__m128)xmmword_4037F0); | |
v12 = _mm_add_ps(_mm_shuffle_ps(a3, a3, 0), (__m128)xmmword_403800); | |
v13 = _mm_add_ps((__m128)xmmword_403810, v11); | |
v14 = _mm_add_ps((__m128)xmmword_403820, v12); | |
v15 = _mm_add_ps(_mm_mul_ps(v11, v11), _mm_mul_ps(v12, v12)); | |
v16 = _mm_sub_ps(_mm_add_ps(_mm_mul_ps(v13, v13), _mm_mul_ps(v14, v14)), v15); | |
v80 = v9 + 4 * a6; | |
v17 = dword_273B810; | |
v18 = dword_4638C4 + 4 * a4; | |
v19 = a7; | |
if ( v10 >= (unsigned int)v80 ) | |
return result; | |
if ( !(v10 & 0xF) ) | |
{ | |
LABEL_10: | |
if ( v10 + 16 <= (unsigned int)v80 ) | |
{ | |
if ( a8 < 0 ) | |
{ | |
do | |
{ | |
v50 = *(__m64 *)(v18 + 8); | |
v51 = _m_paddd(*(__m64 *)v18, *(__m64 *)(v18 + 5120)); | |
v52 = *(__m64 *)(dword_459110[_m_pextrw(*(__m64 *)v18, 1)] + 8 * v19); | |
v53 = *(__m64 *)(dword_459110[_m_pextrw(*(__m64 *)v18, 3)] + 8 * v19 - 8); | |
v54 = _m_pextrw(v50, 1); | |
v55 = _m_pextrw(v50, 3); | |
v56 = _m_paddd(v50, *(__m64 *)(v18 + 5128)); | |
v57 = *(__m64 *)(dword_459110[v54] + 8 * v19 - 16); | |
v58 = *(__m64 *)(dword_459110[v55] + 8 * v19 - 24); | |
v19 -= 4; | |
v59 = v52; | |
v60 = v57; | |
v61 = _m_punpckhdq(v52, v53); | |
v62 = _m_punpckhdq(v57, v58); | |
_mm_stream_ps( | |
(float *)(v10 + v17), | |
_mm_mul_ps(_mm_movelh_ps(_mm_cvt_pi32ps(v61), _mm_cvt_pi32ps(v62)), _mm_rsqrt_ps(v15))); | |
v15 = _mm_add_ps(v15, v16); | |
v16 = _mm_add_ps(v16, (__m128)xmmword_403830); | |
*(_QWORD *)v18 = v51; | |
*(_QWORD *)(v18 + 8) = v56; | |
v63 = _m_punpcklbw(v59, 0i64); | |
v64 = _m_punpcklbw(v53, 0i64); | |
v65 = _m_punpcklbw(v60, 0i64); | |
v66 = _m_punpcklbw(v58, 0i64); | |
v67 = _m_psubw((__m64)qword_43D050, v63); | |
v68 = _m_paddw(v63, _m_pmulhw(_m_paddw(v67, v67), (__m64)qword_4638D0[(unsigned int)_m_pextrw(v61, 1) >> 4])); | |
v69 = _m_psubw((__m64)qword_43D050, v64); | |
v70 = _m_paddw(v64, _m_pmulhw(_m_paddw(v69, v69), (__m64)qword_4638D0[(unsigned int)_m_pextrw(v61, 3) >> 4])); | |
v71 = _m_psubw((__m64)qword_43D050, v65); | |
v72 = _m_paddw(v65, _m_pmulhw(_m_paddw(v71, v71), (__m64)qword_4638D0[(unsigned int)_m_pextrw(v62, 1) >> 4])); | |
v73 = _m_psubw((__m64)qword_43D050, v66); | |
result = (unsigned int)_m_pextrw(v62, 3) >> 4; | |
a1 = _m_packuswb(v68, v70); | |
v74 = _m_packuswb(v72, _m_paddw(v66, _m_pmulhw(_m_paddw(v73, v73), (__m64)qword_4638D0[result]))); | |
_mm_stream_pi((__m64 *)v10, a1); | |
_mm_stream_pi((__m64 *)(v10 + 8), v74); | |
v18 += 16; | |
v10 += 16; | |
} | |
while ( v10 + 16 <= (unsigned int)v80 ); | |
if ( v10 >= (unsigned int)v80 ) | |
return result; | |
} | |
else | |
{ | |
do | |
{ | |
v25 = *(__m64 *)(v18 + 8); | |
v26 = _m_paddd(*(__m64 *)v18, *(__m64 *)(v18 + 5120)); | |
v27 = *(__m64 *)(dword_459110[_m_pextrw(*(__m64 *)v18, 1)] + 8 * v19); | |
v28 = *(__m64 *)(dword_459110[_m_pextrw(*(__m64 *)v18, 3)] + 8 * v19 + 8); | |
v29 = _m_pextrw(v25, 1); | |
v30 = _m_pextrw(v25, 3); | |
v31 = _m_paddd(v25, *(__m64 *)(v18 + 5128)); | |
v32 = *(__m64 *)(dword_459110[v29] + 8 * v19 + 16); | |
v33 = *(__m64 *)(dword_459110[v30] + 8 * v19 + 24); | |
v19 += 4; | |
v34 = v27; | |
v35 = v32; | |
v36 = _m_punpckhdq(v27, v28); | |
v37 = _m_punpckhdq(v32, v33); | |
_mm_stream_ps( | |
(float *)(v10 + v17), | |
_mm_mul_ps(_mm_movelh_ps(_mm_cvt_pi32ps(v36), _mm_cvt_pi32ps(v37)), _mm_rsqrt_ps(v15))); | |
v15 = _mm_add_ps(v15, v16); | |
v16 = _mm_add_ps(v16, (__m128)xmmword_403830); | |
*(_QWORD *)v18 = v26; | |
*(_QWORD *)(v18 + 8) = v31; | |
v38 = _m_punpcklbw(v34, 0i64); | |
v39 = _m_punpcklbw(v28, 0i64); | |
v40 = _m_punpcklbw(v35, 0i64); | |
v41 = _m_punpcklbw(v33, 0i64); | |
v42 = _m_psubw((__m64)qword_43D050, v38); | |
v43 = _m_paddw(v38, _m_pmulhw(_m_paddw(v42, v42), (__m64)qword_4638D0[(unsigned int)_m_pextrw(v36, 1) >> 4])); | |
v44 = _m_psubw((__m64)qword_43D050, v39); | |
v45 = _m_paddw(v39, _m_pmulhw(_m_paddw(v44, v44), (__m64)qword_4638D0[(unsigned int)_m_pextrw(v36, 3) >> 4])); | |
v46 = _m_psubw((__m64)qword_43D050, v40); | |
v47 = _m_paddw(v40, _m_pmulhw(_m_paddw(v46, v46), (__m64)qword_4638D0[(unsigned int)_m_pextrw(v37, 1) >> 4])); | |
v48 = _m_psubw((__m64)qword_43D050, v41); | |
result = (unsigned int)_m_pextrw(v37, 3) >> 4; | |
a1 = _m_packuswb(v43, v45); | |
v49 = _m_packuswb(v47, _m_paddw(v41, _m_pmulhw(_m_paddw(v48, v48), (__m64)qword_4638D0[result]))); | |
_mm_stream_pi((__m64 *)v10, a1); | |
_mm_stream_pi((__m64 *)(v10 + 8), v49); | |
v18 += 16; | |
v10 += 16; | |
} | |
while ( v10 + 16 <= (unsigned int)v80 ); | |
if ( v10 >= (unsigned int)v80 ) | |
return result; | |
} | |
} | |
do | |
{ | |
v75 = dword_459110[*(_DWORD *)v18 >> 16]; | |
*(_DWORD *)v18 += *(_DWORD *)(v18 + 5120); | |
v76 = (float)*(signed int *)(v75 + 8 * v19 + 4) * (float)(1.0 / fsqrt(v15.m128_f32[0])); | |
v15 = _mm_shuffle_ps(v15, v15, 57); | |
*(_DWORD *)(v10 + v17) = LODWORD(v76); | |
v77 = _m_psrlw(_m_punpcklbw(a1, *(__m64 *)(v75 + 8 * v19)), 8u); | |
v78 = _m_psubw((__m64)qword_43D050, v77); | |
result = *(_DWORD *)(v75 + 8 * v19 + 4) >> 20; | |
v79 = _m_pmulhw(_m_paddw(v78, v78), (__m64)qword_4638D0[result]); | |
a1 = _m_packuswb(_m_paddw(v77, v79), v79); | |
*(_DWORD *)v10 = _mm_cvtsi64_si32(a1); | |
v19 += a8; | |
v18 += 4; | |
v10 += 4; | |
} | |
while ( v10 != v80 ); | |
return result; | |
} | |
if ( v10 & 8 ) | |
v15 = _mm_shuffle_ps(v15, v15, 78); | |
if ( v10 & 4 ) | |
v15 = _mm_shuffle_ps(v15, v15, 57); | |
while ( 1 ) | |
{ | |
v20 = dword_459110[*(_DWORD *)v18 >> 16]; | |
*(_DWORD *)v18 += *(_DWORD *)(v18 + 5120); | |
v21 = (float)*(signed int *)(v20 + 8 * v19 + 4) * (float)(1.0 / fsqrt(v15.m128_f32[0])); | |
v15 = _mm_shuffle_ps(v15, v15, 57); | |
*(_DWORD *)(v10 + v17) = LODWORD(v21); | |
v22 = _m_psrlw(_m_punpcklbw(a1, *(__m64 *)(v20 + 8 * v19)), 8u); | |
v23 = _m_psubw((__m64)qword_43D050, v22); | |
result = *(_DWORD *)(v20 + 8 * v19 + 4) >> 20; | |
v24 = _m_pmulhw(_m_paddw(v23, v23), (__m64)qword_4638D0[result]); | |
a1 = _m_packuswb(_m_paddw(v22, v24), v24); | |
*(_DWORD *)v10 = _mm_cvtsi64_si32(a1); | |
v19 += a8; | |
v18 += 4; | |
v10 += 4; | |
if ( v10 == v80 ) | |
return result; | |
if ( !(v10 & 0xF) ) | |
{ | |
v15 = _mm_add_ps(v15, v16); | |
v16 = _mm_add_ps(v16, (__m128)xmmword_403830); | |
goto LABEL_10; | |
} | |
} | |
} | |
// 4037F0: using guessed type __int128 xmmword_4037F0; | |
// 403800: using guessed type __int128 xmmword_403800; | |
// 403810: using guessed type __int128 xmmword_403810; | |
// 403820: using guessed type __int128 xmmword_403820; | |
// 403830: using guessed type __int128 xmmword_403830; | |
// 43D050: using guessed type __int64 qword_43D050; | |
// 459110: using guessed type int dword_459110[]; | |
// 45F134: using guessed type __int64 qword_45F134; | |
// 45F144: using guessed type __int64 qword_45F144; | |
// 4605CC: using guessed type int dword_4605CC; | |
// 4605F4: using guessed type __int64 qword_4605F4; | |
// 4630A8: using guessed type __int64 qword_4630A8[]; | |
// 4638C4: using guessed type int dword_4638C4; | |
// 4638C8: using guessed type int dword_4638C8; | |
// 4638D0: using guessed type __int64 qword_4638D0[]; | |
// 4678E0: using guessed type int dword_4678E0; | |
// 273A800: using guessed type int dword_273A800[]; | |
// 273B810: using guessed type int dword_273B810; | |
//----- (0041B4E0) -------------------------------------------------------- | |
unsigned int __cdecl sub_41B4E0(unsigned int a1, __m64 a2, unsigned int a3, unsigned int a4, int a5) | |
{ | |
int v5; // eax@1 | |
int v6; // esi@1 | |
int v7; // edi@1 | |
__m64 v8; // mm0@1 | |
__m64 v9; // mm1@1 | |
__m64 v10; // mm0@1 | |
__m64 v11; // mm6@1 | |
__m64 v12; // mm7@1 | |
int v13; // ecx@1 | |
__m64 v14; // mm2@2 | |
__m64 v15; // mm4@2 | |
__m64 v16; // mm3@2 | |
unsigned int v17; // eax@2 | |
__m64 v18; // mm2@2 | |
__m64 v19; // mm4@2 | |
unsigned int result; // eax@2 | |
__m64 v21; // mm4@2 | |
v5 = HIDWORD(qword_4630A8[0]) + dword_273A800[(signed int)a2.m64_u64]; | |
v6 = v5 + 4 * HIDWORD(a2.m64_u64); | |
v7 = v5 + 4 * a1; | |
v8 = _m_pi2fd(_m_punpckldq(_mm_cvtsi32_si64(a1), a2)); | |
v9 = _m_punpckldq(_mm_cvtsi32_si64(dword_4605CC), (__m64)qword_45F144); | |
v10 = _m_pfadd( | |
_m_pfadd( | |
_m_pfmul(_m_punpckldq(v8, v8), v9), | |
_m_pfmul(_m_pshufw(v8, -18), _m_punpckldq(_mm_cvtsi32_si64(dword_4678E0), (__m64)qword_4605F4))), | |
_m_punpckldq(_mm_cvtsi32_si64(dword_4638C8), (__m64)qword_45F134)); | |
v11 = _mm_cvtsi32_si64(a3); | |
v12 = _mm_cvtsi32_si64(a4); | |
v13 = dword_273B810; | |
do | |
{ | |
v14 = *(__m64 *)(dword_459110[_m_pextrw(v11, 1)] + 8 * a5); | |
v15 = _m_pfmul(v10, v10); | |
v10 = _m_pfadd(v10, v9); | |
v16 = _m_pfmul(_m_pi2fd(_m_pshufw(v14, -18)), _m_pfrsqrt(_m_pfacc(v15, v15))); | |
v11 = _m_paddd(v11, v12); | |
v17 = _m_pextrw(v14, 3); | |
v18 = _m_punpcklbw(v14, 0i64); | |
v19 = _m_psubw((__m64)qword_43D050, v18); | |
result = v17 >> 4; | |
v21 = _m_pmulhw(_m_paddw(v19, v19), (__m64)qword_4638D0[result]); | |
*(_DWORD *)v7 = _mm_cvtsi64_si32(_m_packuswb(_m_paddw(v18, v21), v21)); | |
*(_DWORD *)(v7 + v13) = _mm_cvtsi64_si32(v16); | |
v7 += 4; | |
} | |
while ( v7 < (unsigned int)v6 ); | |
return result; | |
} | |
// 43D050: using guessed type __int64 qword_43D050; | |
// 459110: using guessed type int dword_459110[]; | |
// 45F134: using guessed type __int64 qword_45F134; | |
// 45F144: using guessed type __int64 qword_45F144; | |
// 4605CC: using guessed type int dword_4605CC; | |
// 4605F4: using guessed type __int64 qword_4605F4; | |
// 4630A8: using guessed type __int64 qword_4630A8[]; | |
// 4638C8: using guessed type int dword_4638C8; | |
// 4638D0: using guessed type __int64 qword_4638D0[]; | |
// 4678E0: using guessed type int dword_4678E0; | |
// 273A800: using guessed type int dword_273A800[]; | |
// 273B810: using guessed type int dword_273B810; | |
//----- (0041B5D0) -------------------------------------------------------- | |
unsigned int __usercall sub_41B5D0<eax>(__m64 a1<mm0>, __m128 a2<xmm0>, __m128 a3<xmm1>, int a4, signed int a5, int a6, unsigned int a7, unsigned int a8, int a9) | |
{ | |
int v9; // edx@1 | |
int v10; // edi@1 | |
int v11; // esi@1 | |
int v12; // ecx@1 | |
__m64 v13; // mm6@1 | |
__m64 v14; // mm7@1 | |
__m128 v15; // xmm0@1 | |
__m128 v16; // xmm1@1 | |
__m128 v17; // xmm2@1 | |
__m128 v18; // xmm3@1 | |
__m128 v19; // xmm0@1 | |
__m128 v20; // xmm2@1 | |
int v21; // eax@6 | |
int v22; // eax@6 | |
float v23; // xmm7_4@6 | |
__m64 v24; // mm0@6 | |
__m64 v25; // mm1@6 | |
unsigned int result; // eax@6 | |
__m64 v27; // mm1@6 | |
__m64 v28; // mm0@10 | |
__m64 v29; // mm7@10 | |
int v30; // esi@10 | |
__m64 v31; // mm4@11 | |
__m64 v32; // mm1@11 | |
__m64 v33; // mm6@11 | |
__m64 v34; // mm5@11 | |
__m64 v35; // mm3@11 | |
__m64 v36; // mm0@11 | |
__m64 v37; // mm2@11 | |
__m64 v38; // mm4@11 | |
__m64 v39; // mm5@11 | |
__m64 v40; // mm0@11 | |
__m64 v41; // mm1@11 | |
__m64 v42; // mm2@11 | |
__m64 v43; // mm3@11 | |
__m64 v44; // mm7@11 | |
__m64 v45; // mm0@11 | |
__m64 v46; // mm7@11 | |
__m64 v47; // mm1@11 | |
__m64 v48; // mm7@11 | |
__m64 v49; // mm2@11 | |
__m64 v50; // mm7@11 | |
__m64 v51; // mm2@11 | |
int v52; // eax@14 | |
int v53; // eax@14 | |
float v54; // xmm7_4@14 | |
__m64 v55; // mm0@14 | |
__m64 v56; // mm1@14 | |
__m64 v57; // mm1@14 | |
v9 = HIDWORD(qword_4630A8[0]) + dword_273A800[a5]; | |
v10 = v9 + 4 * a4; | |
v11 = v9 + 4 * a6; | |
a2.m128_f32[0] = (float)(a4 & 0xFFFFFFFC); | |
a3.m128_f32[0] = a2.m128_f32[0]; | |
a2.m128_f32[0] = (float)((float)(a2.m128_f32[0] * *(float *)&dword_4605CC) + *(float *)&dword_4638C8) | |
+ (float)((float)a5 * *(float *)&dword_4678E0); | |
a3.m128_f32[0] = (float)((float)(a3.m128_f32[0] * *(float *)&qword_45F144) + *(float *)&qword_45F134) | |
+ (float)((float)a5 * *(float *)&qword_4605F4); | |
v12 = dword_273B810; | |
v13 = _mm_cvtsi32_si64(a7); | |
v14 = _mm_cvtsi32_si64(a8); | |
v15 = _mm_add_ps(_mm_shuffle_ps(a2, a2, 0), (__m128)xmmword_4037F0); | |
v16 = _mm_add_ps(_mm_shuffle_ps(a3, a3, 0), (__m128)xmmword_403800); | |
v17 = _mm_add_ps((__m128)xmmword_403810, v15); | |
v18 = _mm_add_ps((__m128)xmmword_403820, v16); | |
v19 = _mm_add_ps(_mm_mul_ps(v15, v15), _mm_mul_ps(v16, v16)); | |
v20 = _mm_sub_ps(_mm_add_ps(_mm_mul_ps(v17, v17), _mm_mul_ps(v18, v18)), v19); | |
if ( !(v10 & 0xF) ) | |
{ | |
LABEL_9: | |
if ( v10 + 16 <= (unsigned int)v11 ) | |
{ | |
v28 = _m_paddd(v13, v14); | |
v29 = _m_punpckldq(v14, v14); | |
v13 = _m_punpckldq(v13, v28); | |
v30 = v11 - 16; | |
qword_4605D0 = (__int64)_m_paddd(v29, v29); | |
do | |
{ | |
v31 = *(__m64 *)(dword_459110[_m_pextrw(v13, 1)] + 8 * a9); | |
v32 = *(__m64 *)(dword_459110[_m_pextrw(v13, 3)] + 8 * a9); | |
v33 = _m_paddd(v13, (__m64)qword_4605D0); | |
v34 = *(__m64 *)(dword_459110[_m_pextrw(v33, 1)] + 8 * a9); | |
v35 = *(__m64 *)(dword_459110[_m_pextrw(v33, 3)] + 8 * a9); | |
v13 = _m_paddd(v33, (__m64)qword_4605D0); | |
v36 = v31; | |
v37 = v34; | |
v38 = _m_punpckhdq(v31, v32); | |
v39 = _m_punpckhdq(v34, v35); | |
_mm_stream_ps( | |
(float *)(v10 + v12), | |
_mm_mul_ps(_mm_movelh_ps(_mm_cvt_pi32ps(v38), _mm_cvt_pi32ps(v39)), _mm_rsqrt_ps(v19))); | |
v19 = _mm_add_ps(v19, v20); | |
v20 = _mm_add_ps(v20, (__m128)xmmword_403830); | |
v40 = _m_punpcklbw(v36, 0i64); | |
v41 = _m_punpcklbw(v32, 0i64); | |
v42 = _m_punpcklbw(v37, 0i64); | |
v43 = _m_punpcklbw(v35, 0i64); | |
v44 = _m_psubw((__m64)qword_43D050, v40); | |
v45 = _m_paddw(v40, _m_pmulhw(_m_paddw(v44, v44), (__m64)qword_4638D0[(unsigned int)_m_pextrw(v38, 1) >> 4])); | |
v46 = _m_psubw((__m64)qword_43D050, v41); | |
v47 = _m_paddw(v41, _m_pmulhw(_m_paddw(v46, v46), (__m64)qword_4638D0[(unsigned int)_m_pextrw(v38, 3) >> 4])); | |
v48 = _m_psubw((__m64)qword_43D050, v42); | |
v49 = _m_paddw(v42, _m_pmulhw(_m_paddw(v48, v48), (__m64)qword_4638D0[(unsigned int)_m_pextrw(v39, 1) >> 4])); | |
v50 = _m_psubw((__m64)qword_43D050, v43); | |
result = (unsigned int)_m_pextrw(v39, 3) >> 4; | |
a1 = _m_packuswb(v45, v47); | |
v51 = _m_packuswb(v49, _m_paddw(v43, _m_pmulhw(_m_paddw(v50, v50), (__m64)qword_4638D0[result]))); | |
_mm_stream_pi((__m64 *)v10, a1); | |
_mm_stream_pi((__m64 *)(v10 + 8), v51); | |
v10 += 16; | |
} | |
while ( v10 <= (unsigned int)v30 ); | |
v11 = v30 + 16; | |
if ( v10 >= (unsigned int)v11 ) | |
return result; | |
v14 = _m_psrad((__m64)qword_4605D0, 1u); | |
} | |
do | |
{ | |
v52 = _m_pextrw(v13, 1); | |
v13 = _m_paddd(v13, v14); | |
v53 = dword_459110[v52]; | |
v54 = (float)*(signed int *)(v53 + 8 * a9 + 4) * (float)(1.0 / fsqrt(v19.m128_f32[0])); | |
v19 = _mm_shuffle_ps(v19, v19, 57); | |
*(_DWORD *)(v10 + v12) = LODWORD(v54); | |
v55 = _m_psrlw(_m_punpcklbw(a1, *(__m64 *)(v53 + 8 * a9)), 8u); | |
v56 = _m_psubw((__m64)qword_43D050, v55); | |
result = *(_DWORD *)(v53 + 8 * a9 + 4) >> 20; | |
v57 = _m_pmulhw(_m_paddw(v56, v56), (__m64)qword_4638D0[result]); | |
a1 = _m_packuswb(_m_paddw(v55, v57), v57); | |
*(_DWORD *)v10 = _mm_cvtsi64_si32(a1); | |
v10 += 4; | |
} | |
while ( v10 < (unsigned int)v11 ); | |
return result; | |
} | |
if ( v10 & 8 ) | |
v19 = _mm_shuffle_ps(v19, v19, 78); | |
if ( v10 & 4 ) | |
v19 = _mm_shuffle_ps(v19, v19, 57); | |
while ( 1 ) | |
{ | |
v21 = _m_pextrw(v13, 1); | |
v13 = _m_paddd(v13, v14); | |
v22 = dword_459110[v21]; | |
v23 = (float)*(signed int *)(v22 + 8 * a9 + 4) * (float)(1.0 / fsqrt(v19.m128_f32[0])); | |
v19 = _mm_shuffle_ps(v19, v19, 57); | |
*(_DWORD *)(v10 + v12) = LODWORD(v23); | |
v24 = _m_psrlw(_m_punpcklbw(a1, *(__m64 *)(v22 + 8 * a9)), 8u); | |
v25 = _m_psubw((__m64)qword_43D050, v24); | |
result = *(_DWORD *)(v22 + 8 * a9 + 4) >> 20; | |
v27 = _m_pmulhw(_m_paddw(v25, v25), (__m64)qword_4638D0[result]); | |
a1 = _m_packuswb(_m_paddw(v24, v27), v27); | |
*(_DWORD *)v10 = _mm_cvtsi64_si32(a1); | |
v10 += 4; | |
if ( v10 == v11 ) | |
return result; | |
if ( !(v10 & 0xF) ) | |
{ | |
v19 = _mm_add_ps(v19, v20); | |
v20 = _mm_add_ps(v20, (__m128)xmmword_403830); | |
goto LABEL_9; | |
} | |
} | |
} | |
// 4037F0: using guessed type __int128 xmmword_4037F0; | |
// 403800: using guessed type __int128 xmmword_403800; | |
// 403810: using guessed type __int128 xmmword_403810; | |
// 403820: using guessed type __int128 xmmword_403820; | |
// 403830: using guessed type __int128 xmmword_403830; | |
// 43D050: using guessed type __int64 qword_43D050; | |
// 459110: using guessed type int dword_459110[]; | |
// 45F134: using guessed type __int64 qword_45F134; | |
// 45F144: using guessed type __int64 qword_45F144; | |
// 4605CC: using guessed type int dword_4605CC; | |
// 4605D0: using guessed type __int64 qword_4605D0; | |
// 4605F4: using guessed type __int64 qword_4605F4; | |
// 4630A8: using guessed type __int64 qword_4630A8[]; | |
// 4638C8: using guessed type int dword_4638C8; | |
// 4638D0: using guessed type __int64 qword_4638D0[]; | |
// 4678E0: using guessed type int dword_4678E0; | |
// 273A800: using guessed type int dword_273A800[]; | |
// 273B810: using guessed type int dword_273B810; | |
//----- (0041B8D0) -------------------------------------------------------- | |
void __usercall sub_41B8D0(int a1<ecx>, int a2<edi>, int a3, int a4) | |
{ | |
int v4; // esi@1 | |
int v5; // ebp@2 | |
signed int v6; // edx@2 | |
int v7; // ebx@2 | |
int v8; // ecx@4 | |
char *v9; // eax@5 | |
v4 = a4; | |
if ( a4 ) | |
{ | |
v5 = dword_4590C8; | |
v6 = 1; | |
v7 = HIDWORD(qword_4630A8[0]) + a3 * dword_4590C8 + 4 * a1; | |
do | |
{ | |
if ( *(_BYTE *)v4 ) | |
{ | |
v8 = v7 + 8; | |
do | |
{ | |
v9 = &byte_4382F0[6 * *(_BYTE *)v4]; | |
if ( (unsigned __int8)v6 & (unsigned __int8)byte_4382F0[6 * *(_BYTE *)v4] ) | |
*(_DWORD *)(v8 - 8) = a2; | |
if ( (unsigned __int8)v6 & (unsigned __int8)v9[1] ) | |
*(_DWORD *)(v8 - 4) = a2; | |
if ( (unsigned __int8)v6 & (unsigned __int8)v9[2] ) | |
*(_DWORD *)v8 = a2; | |
if ( (unsigned __int8)v6 & (unsigned __int8)v9[3] ) | |
*(_DWORD *)(v8 + 4) = a2; | |
if ( (unsigned __int8)v6 & (unsigned __int8)v9[4] ) | |
*(_DWORD *)(v8 + 8) = a2; | |
if ( (unsigned __int8)v6 & (unsigned __int8)v9[5] ) | |
*(_DWORD *)(v8 + 12) = a2; | |
++v4; | |
v8 += 24; | |
} | |
while ( *(_BYTE *)v4 ); | |
v4 = a4; | |
} | |
v6 *= 2; | |
v7 += v5; | |
} | |
while ( v6 < 256 ); | |
} | |
} | |
// 4590C8: using guessed type int dword_4590C8; | |
// 4630A8: using guessed type __int64 qword_4630A8[]; | |
//----- (0041BA20) -------------------------------------------------------- | |
float *__usercall sub_41BA20<eax>(__m128 a1<xmm1>, __m128 a2<xmm7>, int a3, int a4, int a5, int a6, int a7, int a8, int a9, int a10) | |
{ | |
__m128 v10; // xmm0@2 | |
__m128 v11; // xmm6@2 | |
__m128 v12; // xmm1@2 | |
__m128 v13; // xmm0@2 | |
__m128 v14; // xmm1@2 | |
__m128 v15; // xmm2@2 | |
__m128 v16; // xmm3@2 | |
__m128 v17; // xmm4@2 | |
__m128 v18; // xmm5@2 | |
__m128 v19; // xmm0@2 | |
__m128 v20; // xmm3@2 | |
__m128 v21; // xmm4@2 | |
__m128 v22; // xmm5@2 | |
__m128 v23; // xmm0@2 | |
__m128 v24; // xmm1@2 | |
__m128 v25; // xmm2@2 | |
__m128 v26; // xmm3@2 | |
__m128 v27; // xmm4@2 | |
__m128 v28; // xmm5@2 | |
float *result; // eax@2 | |
float v30; // ST20_4@3 | |
float v31; // ST24_4@3 | |
float v32; // ST28_4@3 | |
float v33; // ST2C_4@3 | |
float v34; // ST30_4@3 | |
float v35; // ST34_4@3 | |
float v36; // ST38_4@3 | |
float v37; // ST3C_4@3 | |
float v38; // ST40_4@3 | |
float v39; // ST44_4@3 | |
float v40; // ST48_4@3 | |
double v41; // st7@3 | |
float v42; // ST4C_4@3 | |
if ( (unsigned int)&unk_2000000 & dword_46FFDC ) | |
{ | |
v10 = _mm_unpacklo_ps(*(__m128 *)a3, *(__m128 *)a4); | |
v11 = _mm_unpacklo_ps(*(__m128 *)a5, *(__m128 *)a6); | |
v12 = _mm_movehl_ps(a1, v10); | |
v13 = _mm_movelh_ps(v10, v11); | |
v14 = _mm_movelh_ps(v12, _mm_movehl_ps(a2, v11)); | |
v15 = _mm_movelh_ps(_mm_unpackhi_ps(*(__m128 *)a3, *(__m128 *)a4), _mm_unpackhi_ps(*(__m128 *)a5, *(__m128 *)a6)); | |
v16 = _mm_mul_ps(_mm_shuffle_ps((__m128)LODWORD(qword_4678D0[0]), (__m128)LODWORD(qword_4678D0[0]), 0), v13); | |
v17 = _mm_mul_ps(_mm_shuffle_ps((__m128)HIDWORD(qword_4678D0[0]), (__m128)HIDWORD(qword_4678D0[0]), 0), v13); | |
v18 = _mm_add_ps( | |
_mm_mul_ps(_mm_shuffle_ps((__m128)LODWORD(qword_4678D0[1]), (__m128)LODWORD(qword_4678D0[1]), 0), v13), | |
_mm_mul_ps( | |
_mm_shuffle_ps((__m128)*((_DWORD *)&flt_459104 + 2), (__m128)*((_DWORD *)&flt_459104 + 2), 0), | |
v14)); | |
v19 = _mm_mul_ps(_mm_shuffle_ps((__m128)*((_DWORD *)&flt_4605E8 + 2), (__m128)*((_DWORD *)&flt_4605E8 + 2), 0), v15); | |
v20 = _mm_add_ps( | |
_mm_add_ps( | |
v16, | |
_mm_mul_ps(_mm_shuffle_ps((__m128)LODWORD(flt_459104), (__m128)LODWORD(flt_459104), 0), v14)), | |
_mm_mul_ps(_mm_shuffle_ps((__m128)LODWORD(flt_4605E8), (__m128)LODWORD(flt_4605E8), 0), v15)); | |
v21 = _mm_add_ps( | |
_mm_add_ps( | |
v17, | |
_mm_mul_ps( | |
_mm_shuffle_ps((__m128)*((_DWORD *)&flt_459104 + 1), (__m128)*((_DWORD *)&flt_459104 + 1), 0), | |
v14)), | |
_mm_mul_ps( | |
_mm_shuffle_ps((__m128)*((_DWORD *)&flt_4605E8 + 1), (__m128)*((_DWORD *)&flt_4605E8 + 1), 0), | |
v15)); | |
v22 = _mm_add_ps(v18, v19); | |
*(_DWORD *)a7 = (_DWORD)v20.m128_f32[0]; | |
v23 = _mm_movehl_ps(v19, v20); | |
*(_DWORD *)(a7 + 4) = (_DWORD)v21.m128_f32[0]; | |
v24 = _mm_movehl_ps(v14, v21); | |
*(_DWORD *)(a7 + 8) = (_DWORD)v22.m128_f32[0]; | |
v25 = _mm_movehl_ps(v15, v22); | |
*(_DWORD *)a9 = (_DWORD)v23.m128_f32[0]; | |
*(_DWORD *)(a9 + 4) = (_DWORD)v24.m128_f32[0]; | |
*(_DWORD *)(a9 + 8) = (_DWORD)v25.m128_f32[0]; | |
v26 = _mm_shuffle_ps(v20, v20, -79); | |
v27 = _mm_shuffle_ps(v21, v21, -79); | |
v28 = _mm_shuffle_ps(v22, v22, -79); | |
result = &flt_4605FC; | |
*(_DWORD *)a8 = (_DWORD)v26.m128_f32[0]; | |
*(_DWORD *)(a8 + 4) = (_DWORD)v27.m128_f32[0]; | |
*(_DWORD *)(a8 + 8) = (_DWORD)v28.m128_f32[0]; | |
v24.m128_f32[0] = COERCE_FLOAT(*(_OWORD *)&_mm_movehl_ps(v24, v27)) + *(&flt_4605FC + 1); | |
v25.m128_f32[0] = COERCE_FLOAT(*(_OWORD *)&_mm_movehl_ps(v25, v28)) + *(&flt_4605FC + 2); | |
*(float *)a10 = COERCE_FLOAT(*(_OWORD *)&_mm_movehl_ps(v23, v26)) + flt_4605FC; | |
*(_DWORD *)(a10 + 4) = (_DWORD)v24.m128_f32[0]; | |
*(_DWORD *)(a10 + 8) = (_DWORD)v25.m128_f32[0]; | |
} | |
else | |
{ | |
v30 = *(float *)(a3 + 8) * flt_4605E8 + *(float *)(a3 + 4) * flt_459104 + *(float *)qword_4678D0 * *(float *)a3; | |
v31 = *(float *)(a3 + 4) * flt_459108 | |
+ *((float *)qword_4678D0 + 1) * *(float *)a3 | |
+ *(float *)(a3 + 8) * flt_4605EC; | |
v32 = *(float *)(a3 + 4) * flt_45910C + flt_4678D8 * *(float *)a3 + *(float *)(a3 + 8) * flt_4605F0; | |
v33 = *(float *)a4 * *(float *)qword_4678D0 + flt_459104 * *(float *)(a4 + 4) + *(float *)(a4 + 8) * flt_4605E8; | |
v34 = *(float *)a4 * *((float *)qword_4678D0 + 1) | |
+ flt_459108 * *(float *)(a4 + 4) | |
+ *(float *)(a4 + 8) * flt_4605EC; | |
v35 = *(float *)a4 * flt_4678D8 + flt_45910C * *(float *)(a4 + 4) + *(float *)(a4 + 8) * flt_4605F0; | |
v36 = *(float *)a5 * *(float *)qword_4678D0 + *(float *)(a5 + 4) * flt_459104 + *(float *)(a5 + 8) * flt_4605E8; | |
v37 = *(float *)a5 * *((float *)qword_4678D0 + 1) | |
+ *(float *)(a5 + 4) * flt_459108 | |
+ *(float *)(a5 + 8) * flt_4605EC; | |
v38 = *(float *)a5 * flt_4678D8 + *(float *)(a5 + 4) * flt_45910C + *(float *)(a5 + 8) * flt_4605F0; | |
v39 = flt_4605E8 * *(float *)(a6 + 8) | |
+ flt_459104 * *(float *)(a6 + 4) | |
+ *(float *)qword_4678D0 * *(float *)a6 | |
+ flt_4605FC; | |
v40 = flt_459108 * *(float *)(a6 + 4) | |
+ *((float *)qword_4678D0 + 1) * *(float *)a6 | |
+ flt_4605EC * *(float *)(a6 + 8) | |
+ flt_460600; | |
v41 = *(float *)a6 * flt_4678D8 + *(float *)(a6 + 4) * flt_45910C + flt_4605F0 * *(float *)(a6 + 8) + flt_460604; | |
*(_DWORD *)a7 = LODWORD(v30); | |
*(_DWORD *)(a7 + 4) = LODWORD(v31); | |
v42 = v41; | |
*(_DWORD *)(a7 + 8) = LODWORD(v32); | |
*(_DWORD *)a8 = LODWORD(v33); | |
*(_DWORD *)(a8 + 4) = LODWORD(v34); | |
*(_DWORD *)(a8 + 8) = LODWORD(v35); | |
*(_DWORD *)a9 = LODWORD(v36); | |
*(_DWORD *)(a9 + 4) = LODWORD(v37); | |
result = (float *)LODWORD(v40); | |
*(_DWORD *)(a9 + 8) = LODWORD(v38); | |
*(_DWORD *)a10 = LODWORD(v39); | |
*(_DWORD *)(a10 + 4) = LODWORD(v40); | |
*(_DWORD *)(a10 + 8) = LODWORD(v42); | |
} | |
return result; | |
} | |
// 459104: using guessed type float flt_459104; | |
// 459108: using guessed type float flt_459108; | |
// 45910C: using guessed type float flt_45910C; | |
// 4605E8: using guessed type float flt_4605E8; | |
// 4605EC: using guessed type float flt_4605EC; | |
// 4605F0: using guessed type float flt_4605F0; | |
// 4605FC: using guessed type float flt_4605FC; | |
// 460600: using guessed type float flt_460600; | |
// 460604: using guessed type float flt_460604; | |
// 4678D0: using guessed type __int64 qword_4678D0[]; | |
// 4678D8: using guessed type float flt_4678D8; | |
// 46FFDC: using guessed type int dword_46FFDC; | |
//----- (0041BDA0) -------------------------------------------------------- | |
int __usercall sub_41BDA0<eax>(int result<eax>, double a2<st0>, __m64 a3<mm5>, __m128 a4<xmm1>, __m128 a5<xmm7>, int a6) | |
{ | |
int v6; // esi@1 | |
int v8; // ecx@2 | |
int v9; // edx@2 | |
int v10; // eax@2 | |
int v11; // ecx@2 | |
int v12; // eax@2 | |
int v13; // edx@2 | |
int v14; // ecx@2 | |
int v15; // edx@2 | |
__int32 v19; // eax@3 | |
int v20; // ebp@3 | |
__int32 v21; // eax@3 | |
signed int v22; // ebx@3 | |
__int32 v23; // eax@3 | |
int v24; // ecx@5 | |
int v25; // edx@6 | |
int v26; // ecx@7 | |
int v27; // ecx@9 | |
float v28; // ecx@11 | |
float v29; // ST34_4@11 | |
float v30; // ST34_4@11 | |
int v31; // edx@11 | |
float v32; // ST34_4@11 | |
__m128 v34; // xmm7@19 | |
signed int v35; // edx@19 | |
int v36; // ecx@20 | |
__m128 v37; // xmm7@22 | |
unsigned int v38; // ebx@24 | |
int v39; // ebp@24 | |
int v40; // eax@24 | |
unsigned int v41; // edi@26 | |
int v42; // esi@26 | |
int v43; // eax@36 | |
int v44; // ebx@36 | |
int v45; // esi@38 | |
int v46; // edi@38 | |
int v47; // esi@49 | |
int v48; // edi@49 | |
int v49; // ecx@59 | |
float *v50; // esi@59 | |
int v51; // edx@59 | |
int v52; // ebp@61 | |
int v53; // edx@61 | |
int v54; // ebx@61 | |
int v55; // edi@63 | |
int v56; // esi@63 | |
int v57; // ebx@74 | |
unsigned int v58; // edi@76 | |
int v59; // esi@76 | |
int v60; // esi@88 | |
int v61; // edi@88 | |
int v62; // ebp@100 | |
int v63; // edx@100 | |
int v64; // ebx@100 | |
int v65; // edi@102 | |
int v66; // esi@102 | |
int v67; // ebx@113 | |
unsigned int v68; // edi@115 | |
int v69; // esi@115 | |
int v70; // esi@127 | |
int v71; // edi@127 | |
int v72; // ecx@137 | |
int v73; // edx@138 | |
int v74; // ecx@138 | |
unsigned int v75; // edi@140 | |
int v76; // ebx@140 | |
int v77; // ebp@140 | |
int v78; // esi@143 | |
int v79; // esi@143 | |
int v80; // eax@153 | |
int v81; // ebp@153 | |
int v82; // esi@154 | |
int v83; // edi@154 | |
int v84; // esi@165 | |
int v85; // edi@165 | |
int v86; // ebp@175 | |
int v87; // ecx@175 | |
int v88; // edx@175 | |
int v89; // ecx@176 | |
int v90; // ebx@176 | |
int v91; // esi@177 | |
int v92; // edi@177 | |
int v93; // edx@187 | |
int v94; // ecx@187 | |
int v95; // ebx@187 | |
int v96; // edi@188 | |
int v97; // esi@188 | |
int v98; // esi@188 | |
int v99; // edi@200 | |
int v100; // esi@200 | |
int v101; // ecx@211 | |
int v102; // ebx@211 | |
int v103; // esi@212 | |
int v104; // edi@212 | |
int v105; // edx@222 | |
int v106; // ecx@222 | |
int v107; // ebx@222 | |
int v108; // edi@223 | |
int v109; // esi@223 | |
int v110; // esi@223 | |
int v111; // edi@235 | |
int v112; // esi@235 | |
int v113; // [sp+14h] [bp-9Ch]@22 | |
int v114; // [sp+14h] [bp-9Ch]@24 | |
int v115; // [sp+14h] [bp-9Ch]@59 | |
int v116; // [sp+14h] [bp-9Ch]@139 | |
int v117; // [sp+14h] [bp-9Ch]@143 | |
int v118; // [sp+18h] [bp-98h]@22 | |
int v119; // [sp+18h] [bp-98h]@59 | |
int v120; // [sp+18h] [bp-98h]@139 | |
int v121; // [sp+18h] [bp-98h]@175 | |
int v122; // [sp+1Ch] [bp-94h]@5 | |
int v123; // [sp+20h] [bp-90h]@22 | |
int v124; // [sp+20h] [bp-90h]@59 | |
int v125; // [sp+20h] [bp-90h]@139 | |
int v126; // [sp+20h] [bp-90h]@175 | |
float v127; // [sp+24h] [bp-8Ch]@2 | |
int v128; // [sp+28h] [bp-88h]@2 | |
int v129; // [sp+2Ch] [bp-84h]@2 | |
float v130; // [sp+30h] [bp-80h]@2 | |
int v131; // [sp+34h] [bp-7Ch]@2 | |
int v132; // [sp+38h] [bp-78h]@2 | |
float v133; // [sp+3Ch] [bp-74h]@2 | |
int v135; // [sp+44h] [bp-6Ch]@2 | |
float v136; // [sp+48h] [bp-68h]@2 | |
int v138; // [sp+50h] [bp-60h]@2 | |
__int32 v139; // [sp+54h] [bp-5Ch]@3 | |
int v140; // [sp+58h] [bp-58h]@2 | |
int v141; // [sp+5Ch] [bp-54h]@2 | |
int v142; // [sp+60h] [bp-50h]@2 | |
int v143; // [sp+64h] [bp-4Ch]@2 | |
int v144; // [sp+68h] [bp-48h]@2 | |
int v145; // [sp+6Ch] [bp-44h]@2 | |
int v146; // [sp+70h] [bp-40h]@2 | |
int v147; // [sp+74h] [bp-3Ch]@2 | |
int v148; // [sp+78h] [bp-38h]@2 | |
int v149; // [sp+7Ch] [bp-34h]@2 | |
int v150; // [sp+80h] [bp-30h]@1 | |
__m128 *v151; // [sp+84h] [bp-2Ch]@2 | |
float *v152; // [sp+88h] [bp-28h]@23 | |
__m128 *v153; // [sp+8Ch] [bp-24h]@25 | |
__int32 v154; // [sp+90h] [bp-20h]@3 | |
__m128 *v155; // [sp+94h] [bp-1Ch]@2 | |
v6 = result; | |
_EDI = *(_DWORD *)(result + 80); | |
v150 = _EDI; | |
if ( _EDI ) | |
{ | |
v8 = *(_DWORD *)(result + 16); | |
v9 = *(_DWORD *)(result + 20); | |
v143 = *(_DWORD *)(result + 12); | |
v10 = *(_DWORD *)(result + 24); | |
v144 = v8; | |
v11 = *(_DWORD *)(v6 + 28); | |
v146 = v10; | |
v12 = *(_DWORD *)(v6 + 36); | |
v145 = v9; | |
v13 = *(_DWORD *)(v6 + 32); | |
v147 = v11; | |
v14 = *(_DWORD *)(v6 + 40); | |
v140 = v12; | |
v148 = v13; | |
v15 = *(_DWORD *)(v6 + 44); | |
v141 = v14; | |
v142 = v15; | |
v151 = (__m128 *)&xmmword_4078C0; | |
v149 = (int)&flt_4078D0; | |
v155 = (__m128 *)dword_4078E0; | |
sub_41BA20(a4, a5, (int)&v143, (int)&v146, (int)&v140, v6, (int)&v136, (int)&v127, (int)&v130, (int)&v133); | |
__asm | |
{ | |
fld dword ptr [edi+10h] | |
fld [esp+0D0h+var_8C] | |
fld st | |
fmulp st(2), st | |
fld dword ptr [edi+0Ch] | |
fld [esp+0B0h+var_68] | |
fld st | |
fmulp st(2), st | |
fxch st(3) | |
faddp st(1), st | |
fld [esp+0B0h+var_80] | |
fld st | |
fmul dword ptr [edi+14h] | |
faddp st(2), st | |
fxch st(1) | |
fsubr [esp+0B0h+var_74] | |
fxch st(1) | |
fxch st(3) | |
fxch st(2) | |
fxch st(1) | |
fstp [esp+0B0h+var_74] | |
fld [esp+0B0h+var_70] | |
fld dword ptr [edi+10h] | |
fmul [esp+0B0h+var_88] | |
fld dword ptr [edi+0Ch] | |
fld [esp+0B0h+var_64] | |
fld st | |
fmulp st(2), st | |
fxch st(2) | |
faddp st(1), st | |
fld [esp+0B0h+var_7C] | |
fmul dword ptr [edi+14h] | |
faddp st(1), st | |
fsubp st(2), st | |
fxch st(1) | |
fstp [esp+0B0h+var_70] | |
fld [esp+0B0h+var_6C] | |
fld dword ptr [edi+10h] | |
fmul [esp+0B0h+var_84] | |
fld dword ptr [edi+0Ch] | |
fmul [esp+0B0h+var_60] | |
faddp st(1), st | |
fld [esp+0B0h+var_78] | |
fmul dword ptr [edi+14h] | |
faddp st(1), st | |
fsubp st(1), st | |
fstp [esp+0B0h+var_6C] | |
fld [esp+0B0h+var_78] | |
fmul [esp+0B0h+var_88] | |
fld [esp+0B0h+var_84] | |
fld [esp+0B0h+var_7C] | |
fld st | |
fmulp st(2), st | |
fxch st(2) | |
fsubrp st(1), st | |
fstp [esp+0B0h+var_18] | |
fld [esp+0B0h+var_60] | |
fmul st, st(1) | |
fld [esp+0B0h+var_78] | |
fmul st, st(3) | |
fsubp st(1), st | |
fstp [esp+0B0h+var_14] | |
fld [esp+0B0h+var_84] | |
fmul st, st(2) | |
fld [esp+0B0h+var_60] | |
fmul [esp+0B0h+var_88] | |
fsubp st(1), st | |
fstp [esp+0B0h+var_10] | |
fld [esp+0B0h+var_14] | |
fmul st, st(3) | |
fld [esp+0B0h+var_18] | |
fmul st, st(5) | |
faddp st(1), st | |
fld [esp+0B0h+var_10] | |
fmul st, st(6) | |
faddp st(1), st | |
fstp [esp+0B0h+var_9C] | |
fld [esp+0B0h+var_9C] | |
fld st | |
fldz | |
fucompp | |
fnstsw ax | |
fld [esp+0B0h+var_70] | |
} | |
if ( __SETP__(HIBYTE(_AX) & 0x44, 0) ) | |
{ | |
__asm | |
{ | |
fld ds:dbl_439538 | |
fdivrp st(2), st | |
fxch st(1) | |
fstp [esp+0B0h+var_9C] | |
fld [esp+0B0h+var_78] | |
fmul st, st(1) | |
fld [esp+0B0h+var_6C] | |
fmulp st(3), st | |
fsubrp st(2), st | |
fxch st(1) | |
fstp [esp+0B0h+var_C] | |
fld [esp+0B0h+var_6C] | |
fmul [esp+0B0h+var_88] | |
fld [esp+0B0h+var_84] | |
fmul st, st(2) | |
fsubp st(1), st | |
fstp [esp+0B0h+var_8] | |
fld [esp+0B0h+var_60] | |
fmul st, st(1) | |
fld [esp+0B0h+var_6C] | |
fmul st, st(3) | |
fsubp st(1), st | |
fstp [esp+0B0h+var_4] | |
fld [esp+0B0h+var_18] | |
fmul [esp+0B0h+var_74] | |
fld [esp+0B0h+var_C] | |
fmul st, st(4) | |
fsubp st(1), st | |
fld [esp+0B0h+var_8] | |
fmul st, st(6) | |
fsubp st(1), st | |
fmul [esp+0B0h+var_9C] | |
} | |
v19 = _ftol2_sse(a2); | |
__asm | |
{ | |
fld [esp+0B0h+var_14] | |
fmul [esp+0B0h+var_74] | |
} | |
v20 = v19; | |
__asm { fld [esp+0B0h+var_C] } | |
v154 = v19; | |
__asm | |
{ | |
fmul st, st(5) | |
faddp st(1), st | |
fld [esp+0B0h+var_4] | |
fmulp st(6), st | |
fsubrp st(5), st | |
fld [esp+0B0h+var_9C] | |
fld st | |
fmulp st(6), st | |
fxch st(5) | |
} | |
v21 = _ftol2_sse(a2); | |
__asm | |
{ | |
fld [esp+0B0h+var_10] | |
fmul [esp+0B0h+var_74] | |
} | |
v22 = v21; | |
__asm { fld [esp+0B0h+var_8] } | |
v139 = v21; | |
__asm | |
{ | |
fmul st, st(5) | |
faddp st(1), st | |
fld [esp+0B0h+var_4] | |
fmulp st(4), st | |
faddp st(3), st | |
fxch st(2) | |
fmulp st(4), st | |
fxch st(3) | |
} | |
v23 = _ftol2_sse(a2); | |
} | |
else | |
{ | |
__asm { fstp st(2) } | |
v23 = -1; | |
__asm { fstp st } | |
v22 = -1; | |
__asm { fstp st(2) } | |
v20 = -1; | |
__asm { fstp st(3) } | |
v139 = -1; | |
v154 = -1; | |
} | |
v24 = *(_DWORD *)_EDI + 1; | |
v122 = v23; | |
if ( v20 + 1 > (unsigned int)v24 ) | |
{ | |
v25 = v24 & ((-1 - v20) >> 31); | |
v20 = v25 - 1; | |
v154 = v25 - 1; | |
} | |
v26 = *(_DWORD *)(_EDI + 4) + 1; | |
if ( v22 + 1 > (unsigned int)v26 ) | |
v139 = (v26 & ((-1 - v22) >> 31)) - 1; | |
v27 = *(_DWORD *)(_EDI + 8) + 1; | |
if ( v23 + 1 > (unsigned int)v27 ) | |
v122 = (v27 & ((-1 - v23) >> 31)) - 1; | |
v28 = v130; | |
v29 = v127; | |
__asm { fld [esp+0B0h+var_9C] } | |
result = v131; | |
__asm | |
{ | |
fchs | |
fstp [esp+0B0h+var_80] | |
} | |
LODWORD(v30) = v128; | |
__asm { fld [esp+0B0h+var_9C] } | |
v31 = v132; | |
__asm { fchs } | |
v127 = v28; | |
__asm { fstp [esp+0B0h+var_7C] } | |
LODWORD(v32) = v129; | |
__asm | |
{ | |
fld [esp+0B0h+var_9C] | |
fchs | |
} | |
v128 = result; | |
__asm { fstp [esp+0B0h+var_78] } | |
v129 = v31; | |
if ( *(_DWORD *)(_EDI + 8) < 1024 ) | |
{ | |
LODWORD(qword_4078F0) = 0; | |
word_408108 = WORD2(qword_4605F4) - dword_4716E4 + 32767; | |
HIWORD(dword_40810A) = WORD2(qword_4605F4) - dword_4716E4 + 32767; | |
LOWORD(dword_40810A) = dword_45F13C - (_WORD)dword_471F28 + 32767; | |
word_40810E = dword_45F13C - (_WORD)dword_471F28 + 32767; | |
if ( v138 < 0 ) | |
{ | |
__asm | |
{ | |
fld [esp+0B0h+var_60] | |
fldz | |
fsubrp st(1), st | |
fstp dword ptr ds:qword_4078F0 | |
} | |
} | |
if ( v31 < 0 ) | |
{ | |
__asm | |
{ | |
fld dword ptr ds:qword_4078F0 | |
fsub [esp+0B0h+var_84] | |
fstp dword ptr ds:qword_4078F0 | |
} | |
} | |
if ( v132 < 0 ) | |
{ | |
__asm | |
{ | |
fld dword ptr ds:qword_4078F0 | |
fsub [esp+0B0h+var_78] | |
fstp dword ptr ds:qword_4078F0 | |
} | |
} | |
__asm { fild dword_45F124 } | |
dword_40386C = v31; | |
dword_403868 = v31; | |
__asm { fstp [esp+0B0h+var_9C] } | |
dword_40385C = v138; | |
__asm { fld [esp+0B0h+var_9C] } | |
dword_403858 = v138; | |
__asm | |
{ | |
fld st | |
fmulp st(3), st | |
fxch st(2) | |
} | |
dword_40388C = v132; | |
dword_403888 = v132; | |
__asm { fstp ds:flt_403850 } | |
dword_4078DC = v135; | |
__asm { fld st(1) } | |
dword_4078D8 = dword_4078DC; | |
__asm | |
{ | |
fmulp st(3), st | |
fxch st(2) | |
fstp ds:flt_403854 | |
fld st | |
fmul [esp+0B4h+var_8C] | |
fstp ds:flt_403860 | |
fld st | |
fmul [esp+0B4h+var_88] | |
fstp ds:flt_403864 | |
fld st | |
fmul [esp+0B4h+var_80] | |
fstp ds:flt_403880 | |
fld st | |
fmul [esp+0B4h+var_7C] | |
fstp ds:flt_403884 | |
fld st | |
fmul [esp+0B4h+var_74] | |
fstp ds:flt_4078D0 | |
fmulp st(1), st | |
fstp ds:flt_4078D4 | |
} | |
sub_41A3E0(v6, a3, a6); | |
if ( (unsigned int)&unk_2000000 & dword_46FFDC ) | |
{ | |
*(_OWORD *)dword_403870 = _mm_add_ps(*(__m128 *)&flt_403850, *(__m128 *)&flt_403860); | |
*(_OWORD *)dword_403890 = _mm_add_ps(*(__m128 *)&flt_403850, *(__m128 *)&flt_403880); | |
*(_OWORD *)dword_4038A0 = _mm_add_ps(*(__m128 *)&flt_403860, *(__m128 *)&flt_403880); | |
v34 = _mm_add_ps(*(__m128 *)dword_403870, *(__m128 *)&flt_403880); | |
*(_OWORD *)dword_4038B0 = v34; | |
v35 = 1; | |
if ( *(_DWORD *)(_EDI + 8) > 1 ) | |
{ | |
v36 = (int)dword_4038D0; | |
do | |
{ | |
v34 = _mm_add_ps(*(__m128 *)(v36 - 16), *(__m128 *)&flt_403860); | |
*(_OWORD *)v36 = v34; | |
++v35; | |
v36 += 16; | |
} | |
while ( v35 < *(_DWORD *)(_EDI + 8) ); | |
} | |
v34.m128_f32[0] = (float)-*(_DWORD *)(_EDI + 4); | |
*(_OWORD *)&v155->m128_f32[0] = _mm_shuffle_ps(v34, v34, 0); | |
*(_OWORD *)&v155->m128_f32[0] = _mm_mul_ps(COERCE__M128(v155->m128_f32[0]), *(__m128 *)&flt_403880); | |
v37 = _mm_sub_ps(*(__m128 *)v149, *(__m128 *)&flt_403880); | |
*(_OWORD *)v149 = v37; | |
v113 = *(_DWORD *)(_EDI + 28); | |
v118 = *(_DWORD *)(_EDI + 36); | |
v123 = 0; | |
if ( v20 > 0 ) | |
{ | |
v152 = &flt_403850; | |
while ( 1 ) | |
{ | |
v38 = v113; | |
v39 = v113 + 8 * *(_DWORD *)(*(_DWORD *)(v150 + 32) + 4 * v123); | |
*(_OWORD *)&v151->m128_f32[0] = *(_OWORD *)v149; | |
v40 = 0; | |
v114 = 0; | |
if ( v139 > 0 ) | |
{ | |
v153 = (__m128 *)&flt_403880; | |
do | |
{ | |
v41 = v38; | |
v38 += 8 * *(_WORD *)(v118 + 2 * v40); | |
v42 = v38 - 8; | |
if ( v41 <= v38 - 8 ) | |
{ | |
while ( *(_WORD *)(v41 + 4) < v122 ) | |
{ | |
loc_408150(v41, 42); | |
v41 += 8; | |
if ( v41 > v42 ) | |
goto LABEL_33; | |
} | |
if ( v41 > v42 ) | |
goto LABEL_35; | |
do | |
{ | |
if ( *(_WORD *)(v42 + 4) <= v122 ) | |
break; | |
loc_408150(v42, 26); | |
v42 -= 8; | |
} | |
while ( v41 <= v42 ); | |
LABEL_33: | |
if ( v41 == v42 ) | |
loc_408150(v42, 10); | |
} | |
LABEL_35: | |
*(_OWORD *)&v151->m128_f32[0] = _mm_sub_ps( | |
COERCE__M128(v151->m128_f32[0]), | |
COERCE__M128(v153->m128_f32[0])); | |
v40 = v114 + 1; | |
v114 = v40; | |
} | |
while ( v40 < v139 ); | |
} | |
v113 = v39; | |
*(_OWORD *)&v151->m128_f32[0] = _mm_add_ps(*(__m128 *)v149, COERCE__M128(v155->m128_f32[0])); | |
v37 = _mm_add_ps(*(__m128 *)v149, *(__m128 *)v152); | |
*(_OWORD *)v149 = v37; | |
v43 = v139; | |
v44 = *(_DWORD *)(v150 + 4) - 1; | |
if ( v44 > v139 ) | |
break; | |
LABEL_48: | |
if ( (unsigned int)v43 < *(_DWORD *)(v150 + 4) ) | |
{ | |
v153 = (__m128 *)&flt_403880; | |
v37 = _mm_add_ps(COERCE__M128(v151->m128_f32[0]), *(__m128 *)&flt_403880); | |
*(_OWORD *)&v151->m128_f32[0] = v37; | |
v47 = v39 - 8; | |
v48 = v39 - 8 * *(_WORD *)(v118 + 2 * v44); | |
if ( v48 <= (unsigned int)(v39 - 8) ) | |
{ | |
while ( *(_WORD *)(v48 + 4) < v122 ) | |
{ | |
loc_408150(v48, 34); | |
v48 += 8; | |
if ( v48 > (unsigned int)v47 ) | |
goto LABEL_56; | |
} | |
if ( v48 > (unsigned int)v47 ) | |
goto LABEL_58; | |
do | |
{ | |
if ( *(_WORD *)(v47 + 4) <= v122 ) | |
break; | |
loc_408150(v47, 18); | |
v47 -= 8; | |
} | |
while ( v48 <= (unsigned int)v47 ); | |
LABEL_56: | |
if ( v48 == v47 ) | |
loc_408150(v47, 2); | |
} | |
} | |
LABEL_58: | |
++v123; | |
v118 += 2 * *(_DWORD *)(v150 + 4); | |
if ( v123 >= v154 ) | |
goto LABEL_59; | |
} | |
v153 = (__m128 *)&flt_403880; | |
while ( 1 ) | |
{ | |
v37 = _mm_add_ps(COERCE__M128(v151->m128_f32[0]), COERCE__M128(v153->m128_f32[0])); | |
*(_OWORD *)&v151->m128_f32[0] = v37; | |
v45 = v39 - 8; | |
v39 += -8 * *(_WORD *)(v118 + 2 * v44); | |
v46 = v39; | |
if ( v39 <= (unsigned int)v45 ) | |
{ | |
while ( *(_WORD *)(v46 + 4) < v122 ) | |
{ | |
loc_408150(v46, 38); | |
v46 += 8; | |
if ( v46 > (unsigned int)v45 ) | |
goto LABEL_45; | |
} | |
if ( v46 > (unsigned int)v45 ) | |
goto LABEL_47; | |
do | |
{ | |
if ( *(_WORD *)(v45 + 4) <= v122 ) | |
break; | |
loc_408150(v45, 22); | |
v45 -= 8; | |
} | |
while ( v46 <= (unsigned int)v45 ); | |
} | |
LABEL_45: | |
if ( v46 == v45 ) | |
loc_408150(v45, 6); | |
LABEL_47: | |
v43 = v139; | |
--v44; | |
if ( v44 <= v139 ) | |
goto LABEL_48; | |
} | |
} | |
LABEL_59: | |
v49 = v150; | |
v115 = *(_DWORD *)(v150 + 28) + 8 * *(_DWORD *)(v150 + 24); | |
v119 = *(_DWORD *)(v150 + 36) + 2 * *(_DWORD *)(v150 + 4) * (*(_DWORD *)v150 - 1); | |
v37.m128_f32[0] = (float)(*(_DWORD *)v150 - v123); | |
*(_OWORD *)&v151->m128_f32[0] = _mm_shuffle_ps(v37, v37, 0); | |
v50 = &flt_403850; | |
v152 = &flt_403850; | |
*(_OWORD *)&v151->m128_f32[0] = _mm_mul_ps(COERCE__M128(v151->m128_f32[0]), *(__m128 *)&flt_403850); | |
*(_OWORD *)v149 = _mm_add_ps(*(__m128 *)v149, COERCE__M128(v151->m128_f32[0])); | |
v51 = v154; | |
result = *(_DWORD *)v49 - 1; | |
v124 = result; | |
if ( result > v154 ) | |
{ | |
v152 = &flt_403850; | |
while ( 1 ) | |
{ | |
v52 = v115 - 8 * *(_DWORD *)(*(_DWORD *)(v49 + 32) + 4 * v124); | |
*(_OWORD *)v149 = _mm_sub_ps(*(__m128 *)v149, *(__m128 *)v152); | |
*(_OWORD *)&v151->m128_f32[0] = _mm_add_ps(*(__m128 *)v149, COERCE__M128(v155->m128_f32[0])); | |
v53 = v139; | |
v54 = *(_DWORD *)(v49 + 4) - 1; | |
if ( v54 > v139 ) | |
{ | |
v153 = (__m128 *)&flt_403880; | |
do | |
{ | |
*(_OWORD *)&v151->m128_f32[0] = _mm_add_ps( | |
COERCE__M128(v151->m128_f32[0]), | |
COERCE__M128(v153->m128_f32[0])); | |
v55 = v115 + -8 * *(_WORD *)(v119 + 2 * v54); | |
v56 = v115 - 8; | |
v115 = v55; | |
if ( v55 <= (unsigned int)v56 ) | |
{ | |
while ( *(_WORD *)(v55 + 4) < v122 ) | |
{ | |
loc_408150(v55, 37); | |
v55 += 8; | |
if ( v55 > (unsigned int)v56 ) | |
goto LABEL_70; | |
} | |
if ( v55 > (unsigned int)v56 ) | |
goto LABEL_72; | |
do | |
{ | |
if ( *(_WORD *)(v56 + 4) <= v122 ) | |
break; | |
loc_408150(v56, 21); | |
v56 -= 8; | |
} | |
while ( v55 <= (unsigned int)v56 ); | |
LABEL_70: | |
if ( v55 == v56 ) | |
loc_408150(v56, 5); | |
} | |
LABEL_72: | |
v53 = v139; | |
--v54; | |
} | |
while ( v54 > v139 ); | |
v49 = v150; | |
} | |
v115 = v52; | |
*(_OWORD *)&v151->m128_f32[0] = *(_OWORD *)v149; | |
v57 = 0; | |
if ( v53 > 0 ) | |
{ | |
v153 = (__m128 *)&flt_403880; | |
do | |
{ | |
v58 = v52; | |
v52 += 8 * *(_WORD *)(v119 + 2 * v57); | |
v59 = v52 - 8; | |
if ( v58 <= v52 - 8 ) | |
{ | |
while ( *(_WORD *)(v58 + 4) < v122 ) | |
{ | |
loc_408150(v58, 41); | |
v58 += 8; | |
if ( v58 > v59 ) | |
goto LABEL_83; | |
} | |
if ( v58 > v59 ) | |
goto LABEL_85; | |
do | |
{ | |
if ( *(_WORD *)(v59 + 4) <= v122 ) | |
break; | |
loc_408150(v59, 25); | |
v59 -= 8; | |
} | |
while ( v58 <= v59 ); | |
LABEL_83: | |
if ( v58 == v59 ) | |
loc_408150(v59, 9); | |
} | |
LABEL_85: | |
*(_OWORD *)&v151->m128_f32[0] = _mm_sub_ps( | |
COERCE__M128(v151->m128_f32[0]), | |
COERCE__M128(v153->m128_f32[0])); | |
v53 = v139; | |
++v57; | |
} | |
while ( v57 < v139 ); | |
v49 = v150; | |
} | |
if ( (unsigned int)v53 >= *(_DWORD *)(v49 + 4) ) | |
goto LABEL_97; | |
v60 = v52 + 8 * *(_WORD *)(v119 + 2 * v57) - 8; | |
v61 = v52; | |
if ( v52 <= (unsigned int)v60 ) | |
{ | |
while ( *(_WORD *)(v61 + 4) < v122 ) | |
{ | |
loc_408150(v61, 33); | |
v61 += 8; | |
if ( v61 > (unsigned int)v60 ) | |
goto LABEL_95; | |
} | |
if ( v61 > (unsigned int)v60 ) | |
goto LABEL_97; | |
do | |
{ | |
if ( *(_WORD *)(v60 + 4) <= v122 ) | |
break; | |
loc_408150(v60, 17); | |
v60 -= 8; | |
} | |
while ( v61 <= (unsigned int)v60 ); | |
} | |
LABEL_95: | |
if ( v61 == v60 ) | |
loc_408150(v60, 1); | |
LABEL_97: | |
v49 = v150; | |
result = v124 - 1; | |
v119 += -2 * *(_DWORD *)(v150 + 4); | |
v51 = v154; | |
v124 = result; | |
if ( result <= v154 ) | |
{ | |
v50 = &flt_403850; | |
break; | |
} | |
} | |
} | |
if ( (unsigned int)v51 >= *(_DWORD *)v49 ) | |
goto LABEL_244; | |
v62 = v115 - 8 * *(_DWORD *)(*(_DWORD *)(v49 + 32) + 4 * result); | |
v152 = v50; | |
*(_OWORD *)v149 = _mm_sub_ps(*(__m128 *)v149, *(__m128 *)v50); | |
*(_OWORD *)&v151->m128_f32[0] = _mm_add_ps(*(__m128 *)v149, COERCE__M128(v155->m128_f32[0])); | |
v63 = v139; | |
v64 = *(_DWORD *)(v49 + 4) - 1; | |
if ( v64 > v139 ) | |
{ | |
v152 = &flt_403880; | |
do | |
{ | |
*(_OWORD *)&v151->m128_f32[0] = _mm_add_ps(COERCE__M128(v151->m128_f32[0]), *(__m128 *)v152); | |
v65 = v115 + -8 * *(_WORD *)(v119 + 2 * v64); | |
v66 = v115 - 8; | |
v115 = v65; | |
if ( v65 <= (unsigned int)v66 ) | |
{ | |
while ( *(_WORD *)(v65 + 4) < v122 ) | |
{ | |
loc_408150(v65, 36); | |
v65 += 8; | |
if ( v65 > (unsigned int)v66 ) | |
goto LABEL_109; | |
} | |
if ( v65 > (unsigned int)v66 ) | |
goto LABEL_111; | |
do | |
{ | |
if ( *(_WORD *)(v66 + 4) <= v122 ) | |
break; | |
loc_408150(v66, 20); | |
v66 -= 8; | |
} | |
while ( v65 <= (unsigned int)v66 ); | |
LABEL_109: | |
if ( v65 == v66 ) | |
loc_408150(v66, 4); | |
} | |
LABEL_111: | |
v63 = v139; | |
--v64; | |
} | |
while ( v64 > v139 ); | |
v49 = v150; | |
} | |
result = (int)v151; | |
*(_OWORD *)&v151->m128_f32[0] = *(_OWORD *)v149; | |
v67 = 0; | |
if ( v63 > 0 ) | |
{ | |
v152 = &flt_403880; | |
do | |
{ | |
v68 = v62; | |
v62 += 8 * *(_WORD *)(v119 + 2 * v67); | |
v69 = v62 - 8; | |
if ( v68 <= v62 - 8 ) | |
{ | |
while ( *(_WORD *)(v68 + 4) < v122 ) | |
{ | |
loc_408150(v68, 40); | |
v68 += 8; | |
if ( v68 > v69 ) | |
goto LABEL_122; | |
} | |
if ( v68 > v69 ) | |
goto LABEL_124; | |
do | |
{ | |
if ( *(_WORD *)(v69 + 4) <= v122 ) | |
break; | |
loc_408150(v69, 24); | |
v69 -= 8; | |
} | |
while ( v68 <= v69 ); | |
LABEL_122: | |
if ( v68 == v69 ) | |
loc_408150(v69, 8); | |
} | |
LABEL_124: | |
result = (int)v151; | |
*(_OWORD *)&v151->m128_f32[0] = _mm_sub_ps(COERCE__M128(v151->m128_f32[0]), *(__m128 *)v152); | |
v63 = v139; | |
++v67; | |
} | |
while ( v67 < v139 ); | |
v49 = v150; | |
} | |
if ( (unsigned int)v63 >= *(_DWORD *)(v49 + 4) ) | |
goto LABEL_244; | |
result = v119; | |
v70 = v62 + 8 * *(_WORD *)(v119 + 2 * v67) - 8; | |
v71 = v62; | |
if ( v62 <= (unsigned int)v70 ) | |
{ | |
while ( *(_WORD *)(v71 + 4) < v122 ) | |
{ | |
result = loc_408150(v71, 32); | |
v71 += 8; | |
if ( v71 > (unsigned int)v70 ) | |
goto LABEL_134; | |
} | |
if ( v71 > (unsigned int)v70 ) | |
goto LABEL_244; | |
do | |
{ | |
result = *(_WORD *)(v70 + 4); | |
if ( result <= v122 ) | |
break; | |
result = loc_408150(v70, 16); | |
v70 -= 8; | |
} | |
while ( v71 <= (unsigned int)v70 ); | |
} | |
LABEL_134: | |
if ( v71 == v70 ) | |
result = loc_408150(v70, 0); | |
LABEL_244: | |
_m_femms(); | |
return result; | |
} | |
sub_41A2E0((int)dword_403870, (int)&flt_403850, (int)&flt_403860); | |
sub_41A2E0((int)dword_403890, (int)&flt_403850, (int)&flt_403880); | |
sub_41A2E0((int)dword_4038A0, (int)&flt_403860, (int)&flt_403880); | |
sub_41A2E0((int)dword_4038B0, (int)dword_403870, (int)&flt_403880); | |
if ( *(_DWORD *)(_EDI + 8) > 1 ) | |
{ | |
v72 = (int)dword_4038D0; | |
do | |
{ | |
sub_41A2E0(v72, v72 - 16, (int)&flt_403860); | |
v72 = v74 + 16; | |
} | |
while ( v73 + 1 < *(_DWORD *)(_EDI + 8) ); | |
} | |
sub_41A310((int)dword_4078E0, -*(_DWORD *)(_EDI + 4)); | |
sub_41A2B0((int)dword_4078E0, (int)dword_4078E0, (int)&flt_403880); | |
sub_41A280((int)&flt_4078D0, (int)&flt_4078D0, (int)&flt_403880); | |
v116 = *(_DWORD *)(_EDI + 28); | |
v120 = *(_DWORD *)(_EDI + 36); | |
v125 = 0; | |
if ( v20 > 0 ) | |
{ | |
while ( 1 ) | |
{ | |
v75 = v116; | |
v76 = v116 + 8 * *(_DWORD *)(*(_DWORD *)(v150 + 32) + 4 * v125); | |
sub_41A330((int)&xmmword_4078C0, (int)&flt_4078D0); | |
v77 = 0; | |
if ( v139 > 0 ) | |
{ | |
while ( 1 ) | |
{ | |
v78 = v75 + 8 * *(_WORD *)(v120 + 2 * v77); | |
v117 = v78; | |
v79 = v78 - 8; | |
if ( v75 <= v79 ) | |
{ | |
while ( *(_WORD *)(v75 + 4) < v122 ) | |
{ | |
loc_408310(v75, 42); | |
v75 += 8; | |
if ( v75 > v79 ) | |
goto LABEL_150; | |
} | |
if ( v75 > v79 ) | |
goto LABEL_152; | |
do | |
{ | |
if ( *(_WORD *)(v79 + 4) <= v122 ) | |
break; | |
loc_408310(v79, 26); | |
v79 -= 8; | |
} | |
while ( v75 <= v79 ); | |
LABEL_150: | |
if ( v75 == v79 ) | |
loc_408310(v79, 10); | |
} | |
LABEL_152: | |
sub_41A280((int)&xmmword_4078C0, (int)&xmmword_4078C0, (int)&flt_403880); | |
++v77; | |
if ( v77 >= v139 ) | |
break; | |
v75 = v117; | |
} | |
} | |
v116 = v76; | |
sub_41A2E0((int)&xmmword_4078C0, (int)&flt_4078D0, (int)dword_4078E0); | |
sub_41A2E0((int)&flt_4078D0, (int)&flt_4078D0, (int)&flt_403850); | |
v80 = v139; | |
v81 = *(_DWORD *)(v150 + 4) - 1; | |
if ( v81 > v139 ) | |
break; | |
LABEL_164: | |
if ( (unsigned int)v80 < *(_DWORD *)(v150 + 4) ) | |
{ | |
sub_41A2E0((int)&xmmword_4078C0, (int)&xmmword_4078C0, (int)&flt_403880); | |
v84 = v76 - 8; | |
v85 = v76 - 8 * *(_WORD *)(v120 + 2 * v81); | |
if ( v85 <= (unsigned int)(v76 - 8) ) | |
{ | |
while ( *(_WORD *)(v85 + 4) < v122 ) | |
{ | |
loc_408310(v85, 34); | |
v85 += 8; | |
if ( v85 > (unsigned int)v84 ) | |
goto LABEL_172; | |
} | |
if ( v85 > (unsigned int)v84 ) | |
goto LABEL_174; | |
do | |
{ | |
if ( *(_WORD *)(v84 + 4) <= v122 ) | |
break; | |
loc_408310(v84, 18); | |
v84 -= 8; | |
} | |
while ( v85 <= (unsigned int)v84 ); | |
LABEL_172: | |
if ( v85 == v84 ) | |
loc_408310(v84, 2); | |
} | |
} | |
LABEL_174: | |
++v125; | |
v120 += 2 * *(_DWORD *)(v150 + 4); | |
if ( v125 >= v154 ) | |
goto LABEL_175; | |
} | |
while ( 1 ) | |
{ | |
sub_41A2E0((int)&xmmword_4078C0, (int)&xmmword_4078C0, (int)&flt_403880); | |
v82 = v76 - 8; | |
v76 += -8 * *(_WORD *)(v120 + 2 * v81); | |
v83 = v76; | |
if ( v76 <= (unsigned int)v82 ) | |
{ | |
while ( *(_WORD *)(v83 + 4) < v122 ) | |
{ | |
loc_408310(v83, 38); | |
v83 += 8; | |
if ( v83 > (unsigned int)v82 ) | |
goto LABEL_161; | |
} | |
if ( v83 > (unsigned int)v82 ) | |
goto LABEL_163; | |
do | |
{ | |
if ( *(_WORD *)(v82 + 4) <= v122 ) | |
break; | |
loc_408310(v82, 22); | |
v82 -= 8; | |
} | |
while ( v83 <= (unsigned int)v82 ); | |
} | |
LABEL_161: | |
if ( v83 == v82 ) | |
loc_408310(v82, 6); | |
LABEL_163: | |
v80 = v139; | |
--v81; | |
if ( v81 <= v139 ) | |
goto LABEL_164; | |
} | |
} | |
LABEL_175: | |
v86 = *(_DWORD *)(v150 + 28) + 8 * *(_DWORD *)(v150 + 24); | |
v121 = *(_DWORD *)(v150 + 36) + 2 * *(_DWORD *)(v150 + 4) * (*(_DWORD *)v150 - 1); | |
sub_41A310((int)&xmmword_4078C0, *(_DWORD *)v150 - v125); | |
sub_41A2B0((int)&xmmword_4078C0, (int)&xmmword_4078C0, (int)&flt_403850); | |
sub_41A2E0((int)&flt_4078D0, (int)&flt_4078D0, (int)&xmmword_4078C0); | |
v88 = v154; | |
result = *(_DWORD *)v87 - 1; | |
v126 = result; | |
if ( result > v154 ) | |
{ | |
while ( 1 ) | |
{ | |
v149 = v86 - 8 * *(_DWORD *)(*(_DWORD *)(v87 + 32) + 4 * v126); | |
sub_41A280((int)&flt_4078D0, (int)&flt_4078D0, (int)&flt_403850); | |
sub_41A2E0((int)&xmmword_4078C0, (int)&flt_4078D0, (int)dword_4078E0); | |
v90 = *(_DWORD *)(v89 + 4) - 1; | |
if ( v90 > v139 ) | |
break; | |
LABEL_187: | |
v86 = v149; | |
sub_41A330((int)&xmmword_4078C0, (int)&flt_4078D0); | |
v95 = 0; | |
if ( v93 > 0 ) | |
{ | |
do | |
{ | |
v96 = v149; | |
v97 = v149 + 8 * *(_WORD *)(v121 + 2 * v95); | |
v149 = v97; | |
v98 = v97 - 8; | |
if ( v96 <= (unsigned int)v98 ) | |
{ | |
while ( *(_WORD *)(v96 + 4) < v122 ) | |
{ | |
loc_408310(v96, 41); | |
v96 += 8; | |
if ( v96 > (unsigned int)v98 ) | |
goto LABEL_195; | |
} | |
if ( v96 > (unsigned int)v98 ) | |
goto LABEL_197; | |
do | |
{ | |
if ( *(_WORD *)(v98 + 4) <= v122 ) | |
break; | |
loc_408310(v98, 25); | |
v98 -= 8; | |
} | |
while ( v96 <= (unsigned int)v98 ); | |
LABEL_195: | |
if ( v96 == v98 ) | |
loc_408310(v98, 9); | |
} | |
LABEL_197: | |
sub_41A280((int)&xmmword_4078C0, (int)&xmmword_4078C0, (int)&flt_403880); | |
v93 = v139; | |
++v95; | |
} | |
while ( v95 < v139 ); | |
v94 = v150; | |
} | |
if ( (unsigned int)v93 < *(_DWORD *)(v94 + 4) ) | |
{ | |
v99 = v149; | |
v100 = v149 + 8 * *(_WORD *)(v121 + 2 * v95) - 8; | |
if ( v149 <= (unsigned int)v100 ) | |
{ | |
while ( *(_WORD *)(v99 + 4) < v122 ) | |
{ | |
loc_408310(v99, 33); | |
v99 += 8; | |
if ( v99 > (unsigned int)v100 ) | |
goto LABEL_207; | |
} | |
if ( v99 > (unsigned int)v100 ) | |
goto LABEL_209; | |
do | |
{ | |
if ( *(_WORD *)(v100 + 4) <= v122 ) | |
break; | |
loc_408310(v100, 17); | |
v100 -= 8; | |
} | |
while ( v99 <= (unsigned int)v100 ); | |
LABEL_207: | |
if ( v99 == v100 ) | |
loc_408310(v100, 1); | |
} | |
} | |
LABEL_209: | |
v87 = v150; | |
result = v126 - 1; | |
v121 += -2 * *(_DWORD *)(v150 + 4); | |
v88 = v154; | |
v126 = result; | |
if ( result <= v154 ) | |
goto LABEL_210; | |
} | |
while ( 1 ) | |
{ | |
sub_41A2E0((int)&xmmword_4078C0, (int)&xmmword_4078C0, (int)&flt_403880); | |
v91 = v86 - 8; | |
v86 += -8 * *(_WORD *)(v121 + 2 * v90); | |
v92 = v86; | |
if ( v86 <= (unsigned int)v91 ) | |
{ | |
while ( *(_WORD *)(v92 + 4) < v122 ) | |
{ | |
loc_408310(v92, 37); | |
v92 += 8; | |
if ( v92 > (unsigned int)v91 ) | |
goto LABEL_184; | |
} | |
if ( v92 > (unsigned int)v91 ) | |
goto LABEL_186; | |
do | |
{ | |
if ( *(_WORD *)(v91 + 4) <= v122 ) | |
break; | |
loc_408310(v91, 21); | |
v91 -= 8; | |
} | |
while ( v92 <= (unsigned int)v91 ); | |
} | |
LABEL_184: | |
if ( v92 == v91 ) | |
loc_408310(v91, 5); | |
LABEL_186: | |
--v90; | |
if ( v90 <= v139 ) | |
goto LABEL_187; | |
} | |
} | |
LABEL_210: | |
if ( (unsigned int)v88 >= *(_DWORD *)v87 ) | |
goto LABEL_244; | |
v149 = v86 - 8 * *(_DWORD *)(*(_DWORD *)(v87 + 32) + 4 * result); | |
sub_41A280((int)&flt_4078D0, (int)&flt_4078D0, (int)&flt_403850); | |
sub_41A2E0((int)&xmmword_4078C0, (int)&flt_4078D0, (int)dword_4078E0); | |
v102 = *(_DWORD *)(v101 + 4) - 1; | |
if ( v102 <= v139 ) | |
{ | |
LABEL_222: | |
result = sub_41A330((int)&xmmword_4078C0, (int)&flt_4078D0); | |
v107 = 0; | |
if ( v105 > 0 ) | |
{ | |
do | |
{ | |
v108 = v149; | |
v109 = v149 + 8 * *(_WORD *)(v121 + 2 * v107); | |
v149 = v109; | |
v110 = v109 - 8; | |
if ( v108 <= (unsigned int)v110 ) | |
{ | |
while ( *(_WORD *)(v108 + 4) < v122 ) | |
{ | |
loc_408310(v108, 40); | |
v108 += 8; | |
if ( v108 > (unsigned int)v110 ) | |
goto LABEL_230; | |
} | |
if ( v108 > (unsigned int)v110 ) | |
goto LABEL_232; | |
do | |
{ | |
if ( *(_WORD *)(v110 + 4) <= v122 ) | |
break; | |
loc_408310(v110, 24); | |
v110 -= 8; | |
} | |
while ( v108 <= (unsigned int)v110 ); | |
LABEL_230: | |
if ( v108 == v110 ) | |
loc_408310(v110, 8); | |
} | |
LABEL_232: | |
result = sub_41A280((int)&xmmword_4078C0, (int)&xmmword_4078C0, (int)&flt_403880); | |
v105 = v139; | |
++v107; | |
} | |
while ( v107 < v139 ); | |
v106 = v150; | |
} | |
if ( (unsigned int)v105 < *(_DWORD *)(v106 + 4) ) | |
{ | |
result = *(_WORD *)(v121 + 2 * v107); | |
v111 = v149; | |
v112 = v149 + 8 * result - 8; | |
if ( v149 <= (unsigned int)v112 ) | |
{ | |
while ( *(_WORD *)(v111 + 4) < v122 ) | |
{ | |
result = loc_408310(v111, 32); | |
v111 += 8; | |
if ( v111 > (unsigned int)v112 ) | |
goto LABEL_242; | |
} | |
if ( v111 > (unsigned int)v112 ) | |
goto LABEL_244; | |
do | |
{ | |
if ( *(_WORD *)(v112 + 4) <= v122 ) | |
break; | |
result = loc_408310(v112, 16); | |
v112 -= 8; | |
} | |
while ( v111 <= (unsigned int)v112 ); | |
LABEL_242: | |
if ( v111 == v112 ) | |
result = loc_408310(v112, 0); | |
} | |
} | |
goto LABEL_244; | |
} | |
while ( 1 ) | |
{ | |
sub_41A2E0((int)&xmmword_4078C0, (int)&xmmword_4078C0, (int)&flt_403880); | |
v103 = v86 - 8; | |
v86 += -8 * *(_WORD *)(v121 + 2 * v102); | |
v104 = v86; | |
if ( v86 <= (unsigned int)v103 ) | |
{ | |
while ( *(_WORD *)(v104 + 4) < v122 ) | |
{ | |
loc_408310(v104, 36); | |
v104 += 8; | |
if ( v104 > (unsigned int)v103 ) | |
goto LABEL_219; | |
} | |
if ( v104 > (unsigned int)v103 ) | |
goto LABEL_221; | |
do | |
{ | |
if ( *(_WORD *)(v103 + 4) <= v122 ) | |
break; | |
loc_408310(v103, 20); | |
v103 -= 8; | |
} | |
while ( v104 <= (unsigned int)v103 ); | |
} | |
LABEL_219: | |
if ( v104 == v103 ) | |
loc_408310(v103, 4); | |
LABEL_221: | |
--v102; | |
if ( v102 <= v139 ) | |
goto LABEL_222; | |
} | |
} | |
__asm | |
{ | |
fstp st(1) | |
fstp st(1) | |
fstp st | |
} | |
} | |
return result; | |
} | |
// 41BE4D: inconsistent fpu stack | |
// 403850: using guessed type float flt_403850; | |
// 403858: using guessed type int dword_403858; | |
// 40385C: using guessed type int dword_40385C; | |
// 403860: using guessed type float flt_403860; | |
// 403868: using guessed type int dword_403868; | |
// 40386C: using guessed type int dword_40386C; | |
// 403870: using guessed type int dword_403870[4]; | |
// 403880: using guessed type float flt_403880; | |
// 403888: using guessed type int dword_403888; | |
// 40388C: using guessed type int dword_40388C; | |
// 403890: using guessed type int dword_403890[4]; | |
// 4038A0: using guessed type int dword_4038A0[4]; | |
// 4038B0: using guessed type int dword_4038B0[4]; | |
// 4038D0: using guessed type int dword_4038D0[4092]; | |
// 4078C0: using guessed type __int128 xmmword_4078C0; | |
// 4078D0: using guessed type float flt_4078D0; | |
// 4078D8: using guessed type int dword_4078D8; | |
// 4078DC: using guessed type int dword_4078DC; | |
// 4078E0: using guessed type int dword_4078E0[4]; | |
// 4078F0: using guessed type __int64 qword_4078F0; | |
// 408108: using guessed type __int16 word_408108; | |
// 40810A: using guessed type int dword_40810A; | |
// 40810E: using guessed type __int16 word_40810E; | |
// 430AB0: using guessed type __int32 __usercall _ftol2_sse<eax>(double<st0>); | |
// 45F13C: using guessed type int dword_45F13C; | |
// 4605F4: using guessed type __int64 qword_4605F4; | |
// 46FFDC: using guessed type int dword_46FFDC; | |
// 4716E4: using guessed type int dword_4716E4; | |
// 471F28: using guessed type int dword_471F28; | |
//----- (0041D440) -------------------------------------------------------- | |
void __cdecl sub_41D440(float a1, float a2, signed int a3, float a4, signed int a5) | |
{ | |
double v5; // st6@1 | |
double v6; // st7@1 | |
double v7; // st5@1 | |
double v8; // st4@2 | |
int v9; // eax@4 | |
int v10; // eax@9 | |
signed int v11; // eax@12 | |
int v12; // ecx@14 | |
int v13; // eax@14 | |
int v14; // edi@14 | |
float v15; // esi@15 | |
int v16; // edx@15 | |
int v17; // ebx@15 | |
int v18; // eax@17 | |
int v19; // [sp+0h] [bp-2Ch]@12 | |
int v20; // [sp+4h] [bp-28h]@2 | |
int v21; // [sp+8h] [bp-24h]@9 | |
int v22; // [sp+Ch] [bp-20h]@4 | |
float v23; // [sp+10h] [bp-1Ch]@2 | |
float v24; // [sp+14h] [bp-18h]@2 | |
float v25; // [sp+18h] [bp-14h]@2 | |
float v26; // [sp+1Ch] [bp-10h]@1 | |
int *v27; // [sp+20h] [bp-Ch]@2 | |
float v28; // [sp+24h] [bp-8h]@2 | |
int v29; // [sp+28h] [bp-4h]@14 | |
float v30; // [sp+30h] [bp+4h]@1 | |
float v31; // [sp+30h] [bp+4h]@12 | |
float v32; // [sp+34h] [bp+8h]@1 | |
v30 = a1 - flt_4F1F40; | |
v32 = a2 - flt_4F1F44; | |
*(float *)&a3 = *(float *)&a3 - flt_4F1F48; | |
v5 = v30; | |
v6 = v32; | |
v7 = *(float *)&a3; | |
v26 = flt_4F1F58 * *(float *)&a3 + *(float *)&dword_4F1F54 * v32 + *(float *)&dword_4F1F50 * v30; | |
if ( v26 >= 1.0 ) | |
{ | |
LODWORD(v28) = &v20; | |
v23 = 1.0 / v26; | |
*(float *)&a3 = (double)dword_45F124; | |
v8 = *(float *)&a3; | |
*(float *)&a3 = (flt_5F1F90 * v5 + flt_5F1F94 * v6 + flt_5F1F98 * v7) * *(float *)&a3; | |
v24 = *(float *)&a3 * v23 + (double)SHIDWORD(qword_4605F4); | |
*(float *)&a3 = (v7 * flt_702778 + v6 * flt_702774 + v5 * flt_702770) * v8; | |
v25 = *(float *)&a3 * v23 + (double)dword_45F13C; | |
v23 = v8 * a4 * v23; | |
*(float *)&v27 = v24 - v23; | |
v20 = (signed int)*(float *)&v27; | |
if ( v20 < 0 ) | |
v20 = 0; | |
v27 = &v22; | |
v28 = v24 + v23; | |
v22 = (signed int)v28; | |
v9 = (signed int)v28; | |
if ( v22 >= dword_4716E4 ) | |
{ | |
v9 = dword_4716E4 - 1; | |
v22 = dword_4716E4 - 1; | |
} | |
if ( v20 < v9 ) | |
{ | |
v27 = &a3; | |
v28 = v25 - v23; | |
a3 = (signed int)v28; | |
if ( a3 < 0 ) | |
*(float *)&a3 = 0.0; | |
v27 = &v21; | |
v28 = v25 + v23; | |
v21 = (signed int)v28; | |
v10 = (signed int)v28; | |
if ( v21 >= dword_471F28 ) | |
{ | |
v10 = dword_471F28 - 1; | |
v21 = dword_471F28 - 1; | |
} | |
if ( a3 < v10 ) | |
{ | |
LODWORD(v28) = &v19; | |
v31 = sqrt(v30 * v30 + v32 * v32); | |
v19 = (signed int)v31; | |
v11 = (signed int)v31; | |
if ( v19 > 2047 ) | |
v11 = 2047; | |
v19 = LOWORD(qword_4638D0[v11]); | |
LODWORD(v28) = v19; | |
v29 = (unsigned __int64)v19 >> 32; | |
v12 = HIDWORD(qword_4630A8[0]) + dword_273A800[a3]; | |
v13 = HIDWORD(qword_4630A8[0]) + dword_273A800[v21]; | |
v14 = ((((unsigned __int64)(unsigned __int8)((unsigned __int64)qword_43D050 >> 16) - ((a5 >> 8) & 0xFF)) * v19 >> 7) & 0xFFFFFF00) | |
+ 2 * (v19 * (BYTE4(qword_43D050) - ((a5 >> 16) & 0xFF)) & 0xFFFF8000) | |
+ a5 | |
+ (((unsigned __int8)qword_43D050 - (unsigned __int64)(unsigned __int8)a5) * v19 >> 15); | |
v19 = v12; | |
v21 = v13; | |
if ( v12 < v13 ) | |
{ | |
v15 = v26; | |
v16 = v20; | |
v17 = v22; | |
do | |
{ | |
a3 = v16; | |
if ( v16 <= v17 ) | |
{ | |
do | |
{ | |
v18 = dword_273B810 + 4 * v16; | |
if ( SLODWORD(v15) < *(_DWORD *)(v18 + v12) ) | |
{ | |
*(_DWORD *)(v18 + v12) = LODWORD(v15); | |
*(_DWORD *)(v19 + 4 * a3) = v14; | |
v17 = v22; | |
v16 = a3; | |
v12 = v19; | |
} | |
++v16; | |
a3 = v16; | |
} | |
while ( v16 <= v17 ); | |
v16 = v20; | |
v13 = v21; | |
} | |
v12 += dword_4590C8; | |
v19 = v12; | |
} | |
while ( v12 < v13 ); | |
} | |
} | |
} | |
} | |
} | |
// 43D050: using guessed type __int64 qword_43D050; | |
// 4590C8: using guessed type int dword_4590C8; | |
// 45F124: using guessed type int dword_45F124; | |
// 45F13C: using guessed type int dword_45F13C; | |
// 4605F4: using guessed type __int64 qword_4605F4; | |
// 4630A8: using guessed type __int64 qword_4630A8[]; | |
// 4638D0: using guessed type __int64 qword_4638D0[]; | |
// 4716E4: using guessed type int dword_4716E4; | |
// 471F28: using guessed type int dword_471F28; | |
// 4F1F40: using guessed type float flt_4F1F40; | |
// 4F1F44: using guessed type float flt_4F1F44; | |
// 4F1F48: using guessed type float flt_4F1F48; | |
// 4F1F50: using guessed type int dword_4F1F50; | |
// 4F1F54: using guessed type int dword_4F1F54; | |
// 4F1F58: using guessed type float flt_4F1F58; | |
// 5F1F90: using guessed type float flt_5F1F90; | |
// 5F1F94: using guessed type float flt_5F1F94; | |
// 5F1F98: using guessed type float flt_5F1F98; | |
// 702770: using guessed type float flt_702770; | |
// 702774: using guessed type float flt_702774; | |
// 702778: using guessed type float flt_702778; | |
// 273A800: using guessed type int dword_273A800[]; | |
// 273B810: using guessed type int dword_273B810; | |
//----- (0041D7C0) -------------------------------------------------------- | |
int __cdecl sub_41D7C0(float a1, float a2, float a3, int a4, int a5, int a6, int a7) | |
{ | |
double v7; // st6@1 | |
double v8; // st7@1 | |
double v9; // st5@1 | |
int result; // eax@2 | |
double v11; // st4@3 | |
double v12; // st3@3 | |
double v13; // st6@3 | |
float v14; // ST00_4@3 | |
float v15; // [sp+8h] [bp+4h]@1 | |
float v16; // [sp+8h] [bp+4h]@1 | |
float v17; // [sp+8h] [bp+4h]@3 | |
float v18; // [sp+8h] [bp+4h]@3 | |
float v19; // [sp+8h] [bp+4h]@3 | |
float v20; // [sp+8h] [bp+4h]@3 | |
float v21; // [sp+Ch] [bp+8h]@1 | |
float v22; // [sp+Ch] [bp+8h]@3 | |
float v23; // [sp+Ch] [bp+8h]@3 | |
float v24; // [sp+Ch] [bp+8h]@3 | |
float v25; // [sp+Ch] [bp+8h]@3 | |
float v26; // [sp+Ch] [bp+8h]@3 | |
float v27; // [sp+10h] [bp+Ch]@1 | |
float v28; // [sp+10h] [bp+Ch]@3 | |
v15 = a1 - flt_4F1F40; | |
v21 = a2 - flt_4F1F44; | |
v27 = a3 - flt_4F1F48; | |
v7 = v15; | |
v8 = v21; | |
v9 = v27; | |
v16 = flt_4F1F58 * v27 + *(float *)&dword_4F1F54 * v21 + *(float *)&dword_4F1F50 * v15; | |
if ( v16 >= 1.0 ) | |
{ | |
v17 = 1.0 / v16; | |
v22 = (double)dword_45F124; | |
v11 = v22; | |
v23 = (flt_5F1F90 * v7 + flt_5F1F94 * v8 + flt_5F1F98 * v9) * v22; | |
v24 = v23 * v17 + (double)SHIDWORD(qword_4605F4); | |
v12 = v7 * flt_702770; | |
v13 = v17; | |
v18 = (v9 * flt_702778 + v8 * flt_702774 + v12) * v11; | |
v28 = v18 * v13 + (double)dword_45F13C; | |
v19 = v13 * v11 * 1.5; | |
v14 = v24 - v19; | |
*(_DWORD *)a4 = (signed int)v14; | |
v25 = v24 + v19; | |
*(_DWORD *)a6 = (signed int)v25; | |
v26 = v28 - v19; | |
*(_DWORD *)a5 = (signed int)v26; | |
v20 = v28 + v19; | |
result = a7; | |
*(_DWORD *)a7 = (signed int)v20; | |
} | |
else | |
{ | |
*(_DWORD *)a7 = -1; | |
result = a4; | |
*(_DWORD *)a5 = -1; | |
*(_DWORD *)a6 = -1; | |
*(_DWORD *)a4 = -1; | |
} | |
return result; | |
} | |
// 45F124: using guessed type int dword_45F124; | |
// 45F13C: using guessed type int dword_45F13C; | |
// 4605F4: using guessed type __int64 qword_4605F4; | |
// 4F1F40: using guessed type float flt_4F1F40; | |
// 4F1F44: using guessed type float flt_4F1F44; | |
// 4F1F48: using guessed type float flt_4F1F48; | |
// 4F1F50: using guessed type int dword_4F1F50; | |
// 4F1F54: using guessed type int dword_4F1F54; | |
// 4F1F58: using guessed type float flt_4F1F58; | |
// 5F1F90: using guessed type float flt_5F1F90; | |
// 5F1F94: using guessed type float flt_5F1F94; | |
// 5F1F98: using guessed type float flt_5F1F98; | |
// 702770: using guessed type float flt_702770; | |
// 702774: using guessed type float flt_702774; | |
// 702778: using guessed type float flt_702778; | |
//----- (0041D960) -------------------------------------------------------- | |
unsigned int __usercall sub_41D960<eax>(int a1<eax>, int a2<ecx>, int a3, int a4, int a5, int a6, int a7, int a8, signed int a9, signed int a10, unsigned int a11) | |
{ | |
int v11; // edi@1 | |
int v12; // ecx@1 | |
int v13; // eax@1 | |
int v14; // edx@1 | |
int v15; // esi@1 | |
int v16; // edx@1 | |
signed int v17; // eax@1 | |
int v18; // eax@3 | |
int v19; // ebx@3 | |
int v20; // ebx@3 | |
int v21; // ecx@5 | |
int v22; // edi@5 | |
unsigned int result; // eax@5 | |
signed int v24; // ecx@6 | |
unsigned int v25; // ecx@8 | |
int v26; // edx@8 | |
int v27; // edi@8 | |
bool v28; // zf@9 | |
int v29; // edx@9 | |
__m64 v30; // mm0@9 | |
__m64 v31; // mm5@15 | |
__m64 v32; // mm5@15 | |
__m64 v33; // mm6@15 | |
signed int v34; // ecx@15 | |
int v35; // esi@18 | |
int v36; // edi@18 | |
signed int v37; // ebx@18 | |
int v38; // ecx@18 | |
__m64 v39; // mm1@19 | |
unsigned int *v40; // eax@22 | |
__m64 v41; // mm0@22 | |
__m64 v42; // mm1@22 | |
__m64 v43; // mm0@22 | |
int v44; // [sp-Ch] [bp-30h]@7 | |
int v45; // [sp+Ch] [bp-18h]@6 | |
int v46; // [sp+Ch] [bp-18h]@16 | |
int v47; // [sp+10h] [bp-14h]@5 | |
int v48; // [sp+10h] [bp-14h]@7 | |
int i; // [sp+10h] [bp-14h]@18 | |
int v50; // [sp+14h] [bp-10h]@5 | |
int v51; // [sp+18h] [bp-Ch]@1 | |
int v52; // [sp+1Ch] [bp-8h]@5 | |
int v53; // [sp+20h] [bp-4h]@3 | |
int v54; // [sp+34h] [bp+10h]@1 | |
int v55; // [sp+40h] [bp+1Ch]@19 | |
int v56; // [sp+44h] [bp+20h]@6 | |
unsigned int v57; // [sp+44h] [bp+20h]@15 | |
int j; // [sp+48h] [bp+24h]@6 | |
int v59; // [sp+48h] [bp+24h]@15 | |
int v60; // [sp+4Ch] [bp+28h]@18 | |
v11 = a1 - ((unsigned __int64)(a9 * (signed __int64)a6) >> 16); | |
v12 = a10 * a2; | |
v13 = (v11 + 65535) >> 16; | |
v14 = v13 < 0; | |
LOBYTE(v14) = v13 <= 0; | |
v15 = a8 - ((unsigned __int64)(a10 * (signed __int64)a7) >> 16); | |
v16 = v13 & (v14 - 1); | |
v17 = v11 + a9 * a5 + 65535; | |
v54 = v16; | |
v51 = v17 >> 16; | |
if ( v17 >> 16 >= dword_4716E4 ) | |
v51 = dword_4716E4; | |
v18 = (v15 + 65535) >> 16; | |
v19 = v18 < 0; | |
LOBYTE(v19) = v18 <= 0; | |
v20 = v18 & (v19 - 1); | |
v53 = (v12 + v15 + 65535) >> 16; | |
if ( v53 >= dword_471F28 ) | |
v53 = dword_471F28; | |
v21 = 4294967296i64 / a9; | |
v52 = 4294967296i64 / a9; | |
v47 = (unsigned __int64)(v52 * (signed __int64)-v11) >> 16; | |
v22 = 4294967296i64 / a10; | |
v50 = 4294967296i64 / a10; | |
result = (unsigned __int64)(4294967296i64 / a10 * -v15) >> 16; | |
if ( a11 ) | |
{ | |
v31 = _m_punpcklbw(_mm_cvtsi32_si64(a11), 0i64); | |
v32 = _m_psllw( | |
_m_paddw(_m_psubw(v31, _m_pcmpeqw(v31, (__m64)qword_43D0A0)), _m_pcmpeqw(v31, (__m64)qword_43D0A8)), | |
4u); | |
v33 = (__m64)qword_43D0B0; | |
v34 = result + v20 * v22; | |
v57 = v20; | |
v59 = result + v20 * v22; | |
if ( v20 < v53 ) | |
{ | |
v46 = v47 + v16 * v52; | |
while ( 1 ) | |
{ | |
v35 = v16; | |
v36 = HIDWORD(qword_4630A8[0]) + dword_273A800[v57]; | |
v37 = v46; | |
v38 = a3 + a4 * (v34 >> 16); | |
v60 = HIDWORD(qword_4630A8[0]) + dword_273A800[v57]; | |
for ( i = v16; v35 < v51; i = v35 ) | |
{ | |
v39 = _m_pmulhw( | |
_m_psllw(_m_punpcklbw(_mm_cvtsi32_si64(*(_DWORD *)(((v37 >> 14) & 0xFFFFFFFC) + v38)), 0i64), 4u), | |
v32); | |
v55 = _mm_cvtsi64_si32(_m_packuswb(v39, v39)); | |
if ( (_UNKNOWN *)((char *)&unk_1000000 + v55) >= &unk_2000000 ) | |
{ | |
v40 = (unsigned int *)(v60 + 4 * i); | |
v41 = _m_punpcklbw(_m_pand(_mm_cvtsi32_si64(*v40), v33), 0i64); | |
v42 = _m_psllw(_m_psubw(v39, v41), 4u); | |
v43 = _m_paddw(v41, _m_pmulhw(v42, _m_pshufw(v42, -1))); | |
*v40 = _mm_cvtsi64_si32(_m_packuswb(v43, v43)); | |
} | |
else | |
{ | |
if ( v55 < 0 ) | |
*(_DWORD *)(v36 + 4 * v35) = v55; | |
} | |
v37 += v52; | |
++v35; | |
} | |
v59 += v50; | |
result = v57 + 1; | |
v57 = result; | |
if ( (signed int)result >= v53 ) | |
break; | |
v34 = v59; | |
} | |
} | |
_m_femms(); | |
} | |
else | |
{ | |
v56 = v20; | |
v45 = v47 + v16 * v21; | |
v24 = result + v20 * v22; | |
for ( j = result + v20 * v22; v20 < v53; j += v50 ) | |
{ | |
result = HIDWORD(qword_4630A8[0]) + dword_273A800[v20]; | |
v48 = a3 + a4 * (v24 >> 16); | |
v44 = v22; | |
if ( v54 < v51 ) | |
{ | |
v25 = v45; | |
v26 = v54 - v51; | |
v27 = HIDWORD(qword_4630A8[0]) + dword_273A800[v20] + 4 * v51; | |
while ( 1 ) | |
{ | |
result = v25 + v52; | |
v28 = v26 == -1; | |
v29 = v26 + 1; | |
v30 = _mm_cvtsi32_si64(*(_DWORD *)(v48 + 4 * (v25 >> 16))); | |
v25 += v52 + v52; | |
if ( v28 ) | |
break; | |
result >>= 16; | |
_mm_stream_pi((__m64 *)(v27 + 4 * v29 - 4), _m_punpckldq(v30, *(__m64 *)(v48 + 4 * result))); | |
v26 = v29 + 1; | |
if ( !v26 ) | |
goto LABEL_13; | |
} | |
*(_DWORD *)(v27 + 4 * v29 - 4) = _mm_cvtsi64_si32(v30); | |
} | |
LABEL_13: | |
v22 = v44; | |
v24 = v50 + j; | |
v20 = v56 + 1; | |
v56 = v20; | |
} | |
_m_femms(); | |
} | |
return result; | |
} | |
// 43D0A0: using guessed type __int64 qword_43D0A0; | |
// 43D0A8: using guessed type __int64 qword_43D0A8; | |
// 43D0B0: using guessed type __int64 qword_43D0B0; | |
// 4630A8: using guessed type __int64 qword_4630A8[]; | |
// 4716E4: using guessed type int dword_4716E4; | |
// 471F28: using guessed type int dword_471F28; | |
// 273A800: using guessed type int dword_273A800[]; | |
//----- (0041DC20) -------------------------------------------------------- | |
__int16 __cdecl sub_41DC20() | |
{ | |
__int16 result; // ax@1 | |
float v10; // [sp+4h] [bp-40h]@1 | |
float v11; // [sp+8h] [bp-3Ch]@1 | |
float *v12; // [sp+Ch] [bp-38h]@1 | |
__asm | |
{ | |
fld flt_273C9E0 | |
fstp [esp+44h+var_34] | |
} | |
v12 = &v10; | |
__asm | |
{ | |
fld [esp+44h+var_34] | |
fsincos | |
} | |
_EAX = &v10; | |
__asm { fstp dword ptr [eax] } | |
_EAX = &v11; | |
__asm | |
{ | |
fstp dword ptr [eax] | |
fld dword ptr [esi+4] | |
fld dword ptr [esi] | |
fld dword ptr [esi+8] | |
fld st(1) | |
fmulp st(2), st | |
fld st(2) | |
fmulp st(3), st | |
fxch st(1) | |
faddp st(2), st | |
fmul st, st | |
faddp st(1), st | |
fstp [esp+44h+var_44] | |
fld [esp+44h+var_44] | |
fld st | |
fldz | |
fucompp | |
fnstsw ax | |
} | |
if ( __SETP__(HIBYTE(result) & 0x44, 0) ) | |
{ | |
__asm | |
{ | |
fstp [esp+44h+var_38] | |
fld [esp+44h+var_38] | |
fld1 | |
fld st | |
fdivrp st(2), st | |
fxch st(1) | |
fstp [esp+44h+var_44] | |
fld dword ptr [esi] | |
fld [esp+44h+var_44] | |
fld st | |
fmulp st(2), st | |
fxch st(1) | |
fstp [esp+44h+var_30] | |
fld st | |
fmul dword ptr [esi+4] | |
fstp [esp+44h+var_2C] | |
fmul dword ptr [esi+8] | |
fstp [esp+44h+var_28] | |
fld [esp+44h+var_40] | |
fld st | |
fsubp st(2), st | |
fxch st(1) | |
fstp [esp+44h+var_44] | |
fld [esp+44h+var_30] | |
fld st | |
fld [esp+44h+var_44] | |
fld st | |
fmulp st(2), st | |
fxch st(1) | |
fstp [esp+44h+var_24] | |
fld st(1) | |
fld [esp+44h+var_3C] | |
fld st | |
fmulp st(2), st | |
fxch st(1) | |
fstp [esp+44h+var_8] | |
fld [esp+44h+var_24] | |
fld st | |
fld [esp+44h+var_2C] | |
fld st | |
fmulp st(2), st | |
fxch st(1) | |
fstp [esp+44h+var_44] | |
fld st | |
fmul st, st(4) | |
fstp [esp+44h+var_14] | |
fld st | |
fmul st, st(3) | |
fstp [esp+44h+var_1C] | |
fld [esp+44h+var_28] | |
fld st | |
fmulp st(3), st | |
fxch st(2) | |
fstp [esp+44h+var_3C] | |
fld st(1) | |
fmulp st(4), st | |
fxch st(3) | |
fstp [esp+44h+var_4] | |
fld st | |
fmulp st(2), st | |
fxch st(1) | |
fstp [esp+44h+var_18] | |
fld [esp+44h+var_14] | |
fld st | |
fmul st, st(2) | |
fstp [esp+44h+var_40] | |
fld [esp+44h+var_24] | |
fmulp st(4), st | |
fld st(4) | |
faddp st(4), st | |
fxch st(3) | |
fstp [esp+44h+var_24] | |
fld [esp+44h+var_40] | |
fld st | |
fld [esp+44h+var_8] | |
fld st | |
fsubp st(2), st | |
fxch st(1) | |
fstp [esp+44h+var_10] | |
faddp st(1), st | |
fstp [esp+44h+var_8] | |
fxch st(2) | |
fmulp st(1), st | |
fadd st, st(2) | |
fstp [esp+44h+var_14] | |
fld [esp+44h+var_3C] | |
fld st | |
fld [esp+44h+var_1C] | |
fld st | |
fsubp st(2), st | |
fxch st(1) | |
fstp [esp+44h+var_C] | |
faddp st(1), st | |
fstp [esp+44h+var_1C] | |
fmul [esp+44h+var_4] | |
faddp st(1), st | |
fstp [esp+44h+var_4] | |
fld [esp+44h+var_44] | |
fld st | |
fld [esp+44h+var_18] | |
fld st | |
fsubp st(2), st | |
fxch st(1) | |
fstp [esp+44h+var_20] | |
faddp st(1), st | |
fstp [esp+44h+var_18] | |
fld dword ptr [edi] | |
fstp [esp+44h+var_40] | |
fld dword ptr [edi+4] | |
fstp [esp+44h+var_3C] | |
fld dword ptr [edi+8] | |
fstp [esp+44h+var_44] | |
fld [esp+44h+var_20] | |
fld [esp+44h+var_3C] | |
fld st | |
fmulp st(2), st | |
fld [esp+44h+var_40] | |
fld st | |
fmul [esp+44h+var_24] | |
faddp st(3), st | |
fld [esp+44h+var_1C] | |
fld [esp+44h+var_44] | |
fld st | |
fmulp st(2), st | |
fxch st(4) | |
faddp st(1), st | |
fstp dword ptr [edi] | |
fld st | |
fmul [esp+44h+var_18] | |
fld st(2) | |
fmul [esp+44h+var_14] | |
faddp st(1), st | |
fld [esp+44h+var_10] | |
fmul st, st(4) | |
faddp st(1), st | |
fstp dword ptr [edi+4] | |
fmul [esp+44h+var_C] | |
fld [esp+44h+var_8] | |
fmulp st(2), st | |
faddp st(1), st | |
fld [esp+44h+var_4] | |
fmulp st(2), st | |
faddp st(1), st | |
fstp dword ptr [edi+8] | |
} | |
} | |
else | |
{ | |
__asm { fstp st } | |
} | |
return result; | |
} | |
// 41DC23: inconsistent fpu stack | |
//----- (0041DE20) -------------------------------------------------------- | |
float *__cdecl sub_41DE20(float a4, float a5, float a6) | |
{ | |
float *result; // eax@1 | |
float v12; // [sp+0h] [bp-20h]@1 | |
float v13; // [sp+4h] [bp-1Ch]@1 | |
float v14; // [sp+8h] [bp-18h]@1 | |
float *v15; // [sp+Ch] [bp-14h]@1 | |
float *v17; // [sp+14h] [bp-Ch]@1 | |
__asm { fld [esp+20h+arg_0] } | |
v15 = &v13; | |
__asm | |
{ | |
fstp [esp+20h+var_C] | |
fld [esp+20h+var_C] | |
fsincos | |
} | |
_EAX = &a4; | |
__asm { fstp dword ptr [eax] } | |
_EAX = v15; | |
__asm | |
{ | |
fstp dword ptr [eax] | |
fld [esp+20h+arg_4] | |
fstp [esp+20h+var_14] | |
} | |
v17 = &v14; | |
__asm | |
{ | |
fld [esp+20h+var_14] | |
fsincos | |
} | |
_EAX = &a5; | |
__asm { fstp dword ptr [eax] } | |
_EAX = v17; | |
__asm | |
{ | |
fstp dword ptr [eax] | |
fld [esp+20h+arg_8] | |
fstp [esp+20h+var_14] | |
} | |
v17 = &v12; | |
__asm | |
{ | |
fld [esp+20h+var_14] | |
fsincos | |
} | |
_EAX = &a6; | |
__asm { fstp dword ptr [eax] } | |
result = v17; | |
__asm | |
{ | |
fstp dword ptr [eax] | |
fld [esp+20h+arg_0] | |
fld st | |
fld [esp+20h+arg_8] | |
fld st | |
fmulp st(2), st | |
fxch st(1) | |
fstp [esp+20h+arg_8] | |
fld [esp+20h+var_20] | |
fld st | |
fld [esp+20h+var_1C] | |
fld st | |
fmulp st(2), st | |
fxch st(1) | |
fstp [esp+20h+arg_0] | |
fld [esp+20h+arg_0] | |
fld st | |
fld [esp+20h+var_18] | |
fld st | |
fmulp st(2), st | |
fld [esp+20h+arg_8] | |
faddp st(2), st | |
fxch st(1) | |
fstp [esp+20h+var_10] | |
fld [esp+20h+arg_8] | |
fchs | |
fmul st, st(1) | |
fsubrp st(2), st | |
fxch st(1) | |
fstp [esp+20h+var_14] | |
fld st(2) | |
fmul st, st(5) | |
fstp [esp+20h+arg_8] | |
fld st(1) | |
fmul st, st(4) | |
fstp [esp+20h+arg_0] | |
fld [esp+20h+arg_0] | |
fld [esp+20h+arg_8] | |
fmul st, st(2) | |
fsubp st(1), st | |
fstp [esp+20h+var_20] | |
fld [esp+20h+arg_0] | |
fmul st, st(1) | |
fsub [esp+20h+arg_8] | |
fstp [esp+20h+var_18] | |
fld [esp+20h+arg_4] | |
fld st | |
fmulp st(4), st | |
fxch st(3) | |
fstp [esp+20h+var_8] | |
fxch st(1) | |
fchs | |
fmul st, st(2) | |
fstp [esp+20h+var_C] | |
fld st(1) | |
fmulp st(4), st | |
fxch st(3) | |
fstp [esp+20h+var_1C] | |
fmulp st(1), st | |
fstp [esp+20h+var_4] | |
fld dword ptr [esi] | |
fstp [esp+20h+arg_0] | |
fld dword ptr [edx] | |
fstp [esp+20h+arg_4] | |
fld dword ptr [ecx] | |
fstp [esp+20h+arg_8] | |
fld [esp+20h+var_C] | |
fld st | |
fld [esp+20h+arg_4] | |
fld st | |
fmulp st(2), st | |
fld [esp+20h+var_10] | |
fld st | |
fld [esp+20h+arg_0] | |
fld st | |
fmulp st(2), st | |
fxch st(4) | |
faddp st(1), st | |
fld [esp+20h+var_18] | |
fmul [esp+20h+arg_8] | |
faddp st(1), st | |
fstp dword ptr [esi] | |
fld [esp+20h+var_1C] | |
fmul st, st(2) | |
fld [esp+20h+var_20] | |
fmul st, st(4) | |
faddp st(1), st | |
fld [esp+20h+var_14] | |
fmul [esp+20h+arg_8] | |
faddp st(1), st | |
fstp dword ptr [edx] | |
fld [esp+20h+var_8] | |
fld st | |
fmulp st(4), st | |
fld st(5) | |
fmulp st(3), st | |
fxch st(3) | |
faddp st(2), st | |
fld [esp+20h+var_4] | |
fld st | |
fmul [esp+20h+arg_8] | |
faddp st(3), st | |
fxch st(2) | |
fstp dword ptr [ecx] | |
fld dword ptr [esi+4] | |
fstp [esp+20h+arg_0] | |
fld dword ptr [edx+4] | |
fstp [esp+20h+arg_4] | |
fld dword ptr [ecx+4] | |
fstp [esp+20h+arg_8] | |
fld st(3) | |
fmul [esp+20h+arg_4] | |
fld st(1) | |
fmul [esp+20h+arg_0] | |
faddp st(1), st | |
fld [esp+20h+var_18] | |
fmul [esp+20h+arg_8] | |
faddp st(1), st | |
fstp dword ptr [esi+4] | |
fld [esp+20h+var_1C] | |
fmul [esp+20h+arg_4] | |
fld [esp+20h+var_20] | |
fmul [esp+20h+arg_0] | |
faddp st(1), st | |
fld [esp+20h+var_14] | |
fmul [esp+20h+arg_8] | |
faddp st(1), st | |
fstp dword ptr [edx+4] | |
fld st(2) | |
fmul [esp+20h+arg_0] | |
fld st(5) | |
fmul [esp+20h+arg_4] | |
faddp st(1), st | |
fld st(2) | |
fmul [esp+20h+arg_8] | |
faddp st(1), st | |
fstp dword ptr [ecx+4] | |
fld dword ptr [esi+8] | |
fstp [esp+20h+arg_0] | |
fld dword ptr [edx+8] | |
fstp [esp+20h+arg_4] | |
fld dword ptr [ecx+8] | |
fstp [esp+20h+arg_8] | |
fld [esp+20h+arg_4] | |
fld st | |
fmulp st(5), st | |
fld [esp+20h+arg_0] | |
fld st | |
fmulp st(3), st | |
fxch st(5) | |
faddp st(2), st | |
fld [esp+20h+var_18] | |
fmul [esp+20h+arg_8] | |
faddp st(2), st | |
fxch st(1) | |
fstp dword ptr [esi+8] | |
fld [esp+20h+var_1C] | |
fmul st, st(1) | |
fld [esp+20h+var_20] | |
fmul st, st(5) | |
faddp st(1), st | |
fld [esp+20h+var_14] | |
fmul [esp+20h+arg_8] | |
faddp st(1), st | |
fstp dword ptr [edx+8] | |
fxch st(2) | |
fmulp st(3), st | |
fxch st(3) | |
fmulp st(1), st | |
faddp st(1), st | |
fld [esp+20h+arg_8] | |
fmulp st(2), st | |
faddp st(1), st | |
fstp dword ptr [ecx+8] | |
} | |
return result; | |
} | |
// 41DE23: inconsistent fpu stack | |
//----- (0041E090) -------------------------------------------------------- | |
#error "41E51C: call analysis failed (funcsize=284)" | |
//----- (0041E530) -------------------------------------------------------- | |
void __cdecl sub_41E530() | |
{ | |
signed int v0; // esi@1 | |
int v1; // edi@2 | |
float v2; // ST0C_4@2 | |
float v3; // ST14_4@2 | |
float v4; // ST14_4@2 | |
float v5; // ST20_4@2 | |
float v6; // ST14_4@2 | |
double v7; // st7@3 | |
int v8; // esi@3 | |
signed int v9; // eax@3 | |
int v10; // ecx@4 | |
int v11; // edx@4 | |
int v12; // ecx@4 | |
int v13; // edx@4 | |
signed int v14; // eax@5 | |
double v15; // st5@5 | |
double v16; // st4@5 | |
float v17; // ST10_4@6 | |
float v18; // ST20_4@6 | |
float v19; // ST0C_4@6 | |
float v20; // ST10_4@6 | |
float v21; // ST20_4@6 | |
float v22; // ST0C_4@6 | |
float v23; // ST10_4@6 | |
float v24; // ST20_4@6 | |
float v25; // ST0C_4@6 | |
float v26; // ST10_4@6 | |
float v27; // ST20_4@6 | |
float v28; // ST0C_4@6 | |
float v29; // ST10_4@6 | |
float v30; // ST20_4@6 | |
float v31; // ST0C_4@6 | |
float v32; // ST10_4@6 | |
float v33; // ST20_4@6 | |
float v34; // ST0C_4@6 | |
float v35; // ST10_4@6 | |
float v36; // ST20_4@6 | |
float v37; // ST0C_4@6 | |
float v38; // ST10_4@6 | |
float v39; // ST20_4@6 | |
float v40; // ST0C_4@6 | |
float v41; // ST10_4@6 | |
float v42; // ST20_4@6 | |
float v43; // ST0C_4@6 | |
float v44; // ST20_4@10 | |
float v45; // [sp+Ch] [bp-18h]@9 | |
signed int v46; // [sp+10h] [bp-14h]@1 | |
flt_462FE0 = 0.0078431377; | |
LODWORD(qword_4630A8[0]) = 255; | |
flt_462FE4 = -0.99607843; | |
v46 = 254; | |
v0 = (signed int)&unk_273C54C; | |
do | |
{ | |
v1 = v0 - 4; | |
v2 = (double)v46; | |
v3 = v2 * flt_462FE0 + flt_462FE4; | |
*(float *)(v0 + 4) = v3; | |
v4 = sqrt(1.0 - v3 * v3); | |
v5 = v4; | |
v6 = v2 * 2.39996337890625; | |
*(float *)(v0 - 4) = cos(v6); | |
*(float *)v0 = sin(v6); | |
--v46; | |
v0 -= 12; | |
*(float *)v1 = *(float *)v1 * v5; | |
*(float *)(v0 + 12) = v5 * *(float *)(v0 + 12); | |
} | |
while ( v0 >= (signed int)&unk_273B964 ); | |
v7 = 0.0; | |
v8 = 0; | |
flt_273C55C = 0.0; | |
dword_462FE8 = 0; | |
flt_273C558 = 0.0; | |
dword_462FEC = 1; | |
flt_273C554 = 0.0; | |
v9 = (signed int)&dword_462FEC; | |
do | |
{ | |
v10 = *(_DWORD *)v9 + *(_DWORD *)(v9 - 4); | |
v11 = v10 + *(_DWORD *)v9; | |
*(_DWORD *)(v9 + 4) = v10; | |
v12 = v11 + v10; | |
*(_DWORD *)(v9 + 8) = v11; | |
v13 = v12 + v11; | |
*(_DWORD *)(v9 + 16) = v13; | |
*(_DWORD *)(v9 + 12) = v12; | |
*(_DWORD *)(v9 + 20) = v12 + v13; | |
v9 += 20; | |
} | |
while ( v9 < (signed int)&unk_4630A0 ); | |
v14 = (signed int)&dword_462FE8; | |
v15 = (float)0.15915494; | |
v16 = (float)-127.5; | |
do | |
{ | |
v17 = -v15; | |
v18 = (double)*(signed int *)(v14 + 8); | |
*(float *)(v14 - 448) = v18 * v17; | |
v19 = -v16; | |
*(float *)(v14 - 268) = (v18 * 0.3819660246372223 - (double)*(signed int *)v14) * v19; | |
v20 = -v17; | |
v21 = (double)*(signed int *)(v14 + 12); | |
*(float *)(v14 - 444) = v21 * v20; | |
v22 = -v19; | |
*(float *)(v14 - 264) = (v21 * 0.3819660246372223 - (double)*(signed int *)(v14 + 4)) * v22; | |
v23 = -v20; | |
v24 = (double)*(signed int *)(v14 + 16); | |
*(float *)(v14 - 440) = v24 * v23; | |
v25 = -v22; | |
*(float *)(v14 - 260) = (v24 * 0.3819660246372223 - (double)*(signed int *)(v14 + 8)) * v25; | |
v26 = -v23; | |
v27 = (double)*(signed int *)(v14 + 20); | |
*(float *)(v14 - 436) = v27 * v26; | |
v28 = -v25; | |
*(float *)(v14 - 256) = (v27 * 0.3819660246372223 - (double)*(signed int *)(v14 + 12)) * v28; | |
v29 = -v26; | |
v30 = (double)*(signed int *)(v14 + 24); | |
*(float *)(v14 - 432) = v30 * v29; | |
v31 = -v28; | |
*(float *)(v14 - 252) = (v30 * 0.3819660246372223 - (double)*(signed int *)(v14 + 16)) * v31; | |
v32 = -v29; | |
v33 = (double)*(signed int *)(v14 + 28); | |
*(float *)(v14 - 428) = v33 * v32; | |
v34 = -v31; | |
*(float *)(v14 - 248) = (v33 * 0.3819660246372223 - (double)*(signed int *)(v14 + 20)) * v34; | |
v35 = -v32; | |
v36 = (double)*(signed int *)(v14 + 32); | |
*(float *)(v14 - 424) = v36 * v35; | |
v37 = -v34; | |
*(float *)(v14 - 244) = (v36 * 0.3819660246372223 - (double)*(signed int *)(v14 + 24)) * v37; | |
v38 = -v35; | |
v39 = (double)*(signed int *)(v14 + 36); | |
v14 += 36; | |
*(float *)(v14 - 456) = v39 * v38; | |
v40 = -v37; | |
*(float *)(v14 - 276) = (v39 * 0.3819660246372223 - (double)*(signed int *)(v14 - 8)) * v40; | |
v41 = -v38; | |
v42 = (double)*(signed int *)(v14 + 4); | |
*(float *)(v14 - 452) = v42 * v41; | |
v15 = v41; | |
v43 = -v40; | |
v16 = v43; | |
*(float *)(v14 - 272) = (v42 * 0.3819660246372223 - (double)*(signed int *)(v14 - 4)) * v43; | |
} | |
while ( v14 < (signed int)&unk_46309C ); | |
dword_4630A4 = 0; | |
while ( 1 ) | |
{ | |
v45 = 1.0 - (double)dword_463000[2 * v8] * 0.001248273998498917; | |
if ( v45 < v7 ) | |
break; | |
v44 = sqrt(v45); | |
flt_462F94[v8] = v44; | |
v8 = dword_4630A4 + 1; | |
dword_4630A4 = v8; | |
if ( v8 >= 20 ) | |
break; | |
v7 = 0.0; | |
} | |
} | |
// 462F94: using guessed type float flt_462F94[]; | |
// 462FE0: using guessed type float flt_462FE0; | |
// 462FE4: using guessed type float flt_462FE4; | |
// 462FE8: using guessed type int dword_462FE8; | |
// 462FEC: using guessed type int dword_462FEC; | |
// 463000: using guessed type int dword_463000[]; | |
// 4630A4: using guessed type int dword_4630A4; | |
// 4630A8: using guessed type __int64 qword_4630A8[]; | |
// 273C554: using guessed type float flt_273C554; | |
// 273C558: using guessed type float flt_273C558; | |
// 273C55C: using guessed type float flt_273C55C; | |
//----- (0041E940) -------------------------------------------------------- | |
int __cdecl sub_41E940(float a1, float a2, float a3, float a4, int a5, int a6) | |
{ | |
int v6; // ecx@1 | |
double v7; // st7@1 | |
float v8; // ST18_4@2 | |
float v9; // ST18_4@4 | |
float v10; // ST08_4@15 | |
float v12; // [sp+14h] [bp-8h]@1 | |
float v13; // [sp+20h] [bp+4h]@15 | |
float v14; // [sp+30h] [bp+14h]@7 | |
float v15; // [sp+30h] [bp+14h]@9 | |
float v16; // [sp+30h] [bp+14h]@15 | |
float v17; // [sp+30h] [bp+14h]@15 | |
float v18; // [sp+34h] [bp+18h]@15 | |
v6 = a5; | |
v7 = a1; | |
v12 = (a3 - a1) * flt_4605C8; | |
if ( flt_4590D0 <= (double)a1 ) | |
{ | |
if ( flt_4678E8 >= v7 ) | |
{ | |
*(_DWORD *)a5 = (signed int)a2; | |
} | |
else | |
{ | |
v9 = a2 + (flt_4678E8 - v7) / v12; | |
*(_DWORD *)a5 = (signed int)v9; | |
} | |
} | |
else | |
{ | |
v8 = a2 + (flt_4590D0 - v7) / v12; | |
*(_DWORD *)a5 = (signed int)v8; | |
} | |
if ( flt_4590D0 <= (double)a3 ) | |
{ | |
if ( flt_4678E8 >= (double)a3 ) | |
{ | |
*(_DWORD *)a6 = (signed int)a4; | |
} | |
else | |
{ | |
v15 = (flt_4678E8 - a1) / v12 + a2; | |
*(_DWORD *)a6 = (signed int)v15; | |
} | |
} | |
else | |
{ | |
v14 = (flt_4590D0 - a1) / v12 + a2; | |
*(_DWORD *)a6 = (signed int)v14; | |
} | |
if ( *(_DWORD *)v6 < dword_4678E4 ) | |
*(_DWORD *)v6 = dword_4678E4; | |
if ( *(_DWORD *)v6 > dword_4638CC ) | |
*(_DWORD *)v6 = dword_4638CC; | |
v18 = (double)*(signed int *)a6; | |
v13 = (double)*(signed int *)v6; | |
v16 = (v18 - a4) * v12 + a3; | |
v10 = v16; | |
v17 = a3 + (v13 - a4) * v12; | |
return sub_41E090(v17, v13, v10, v18); | |
} | |
// 4590D0: using guessed type float flt_4590D0; | |
// 4605C8: using guessed type float flt_4605C8; | |
// 4638CC: using guessed type int dword_4638CC; | |
// 4678E4: using guessed type int dword_4678E4; | |
// 4678E8: using guessed type float flt_4678E8; | |
//----- (0041EAD0) -------------------------------------------------------- | |
int __cdecl sub_41EAD0(float a1, float a2, float a3, float a4, int a5, int a6) | |
{ | |
int v6; // ecx@1 | |
double v7; // st7@1 | |
float v8; // ST18_4@2 | |
float v9; // ST18_4@4 | |
float v10; // ST0C_4@15 | |
float v12; // [sp+14h] [bp-8h]@1 | |
float v13; // [sp+24h] [bp+8h]@15 | |
float v14; // [sp+30h] [bp+14h]@7 | |
float v15; // [sp+30h] [bp+14h]@9 | |
float v16; // [sp+30h] [bp+14h]@15 | |
float v17; // [sp+30h] [bp+14h]@15 | |
float v18; // [sp+34h] [bp+18h]@15 | |
v6 = a5; | |
v7 = a2; | |
v12 = (a4 - a2) * flt_4605C8; | |
if ( flt_45F140 <= (double)a2 ) | |
{ | |
if ( flt_45F118 >= v7 ) | |
{ | |
*(_DWORD *)a5 = (signed int)a1; | |
} | |
else | |
{ | |
v9 = a1 + (flt_45F118 - v7) / v12; | |
*(_DWORD *)a5 = (signed int)v9; | |
} | |
} | |
else | |
{ | |
v8 = a1 + (flt_45F140 - v7) / v12; | |
*(_DWORD *)a5 = (signed int)v8; | |
} | |
if ( flt_45F140 <= (double)a4 ) | |
{ | |
if ( flt_45F118 >= (double)a4 ) | |
{ | |
*(_DWORD *)a6 = (signed int)a3; | |
} | |
else | |
{ | |
v15 = (flt_45F118 - a2) / v12 + a1; | |
*(_DWORD *)a6 = (signed int)v15; | |
} | |
} | |
else | |
{ | |
v14 = (flt_45F140 - a2) / v12 + a1; | |
*(_DWORD *)a6 = (signed int)v14; | |
} | |
if ( *(_DWORD *)v6 < dword_45F110 ) | |
*(_DWORD *)v6 = dword_45F110; | |
if ( *(_DWORD *)v6 > dword_45F128 ) | |
*(_DWORD *)v6 = dword_45F128; | |
v18 = (double)*(signed int *)a6; | |
v13 = (double)*(signed int *)v6; | |
v16 = (v18 - a3) * v12 + a4; | |
v10 = v16; | |
v17 = a4 + v12 * (v13 - a3); | |
return sub_41E090(v13, v17, v18, v10); | |
} | |
// 45F110: using guessed type int dword_45F110; | |
// 45F118: using guessed type float flt_45F118; | |
// 45F128: using guessed type int dword_45F128; | |
// 45F140: using guessed type float flt_45F140; | |
// 4605C8: using guessed type float flt_4605C8; | |
//----- (0041EC70) -------------------------------------------------------- | |
signed int __cdecl sub_41EC70() | |
{ | |
signed int result; // eax@2 | |
signed int v1; // eax@8 | |
double v2; // st6@9 | |
char *v3; // edi@10 | |
signed int v4; // esi@10 | |
double v5; // st6@11 | |
signed int v6; // eax@11 | |
double v7; // st6@11 | |
unsigned int v8; // eax@12 | |
signed int v9; // ecx@12 | |
__m64 v10; // mm0@13 | |
unsigned __int8 v11; // of@13 | |
__int64 v12; // mm0@16 | |
signed int v13; // [sp+Ch] [bp-4h]@8 | |
sub_401000(); | |
if ( (_UNKNOWN *)((unsigned int)&unk_C08011 & dword_46FFDC) == &unk_C08011 | |
&& ((unsigned int)&unk_2000000 & dword_46FFDC || (dword_46FFDC & 0xC0000000) == -1073741824) ) | |
{ | |
if ( (unsigned int)&unk_2000000 & dword_46FFDC ) | |
{ | |
dword_273B954 = (int (__cdecl *)(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD))sub_41B5D0; | |
dword_273B820 = (int (__cdecl *)(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD))sub_41B070; | |
} | |
else | |
{ | |
dword_273B954 = (int (__cdecl *)(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD))sub_41B4E0; | |
dword_273B820 = (int (__cdecl *)(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD))sub_41AF60; | |
} | |
v1 = 1; | |
v13 = 1; | |
do | |
{ | |
v2 = (double)v13; | |
++v1; | |
v13 = v1; | |
*((float *)&qword_45F144 + v1) = 1048576.0 / v2; | |
} | |
while ( v1 < 1312 ); | |
sub_41E530(); | |
v3 = (char *)qword_4630B0 + 2; | |
v4 = (signed int)&unk_273B964; | |
do | |
{ | |
v5 = *(float *)v4 * 4096.0; | |
*((_WORD *)v3 - 1) = (signed int)(*(float *)(v4 - 4) * 4096.0); | |
v6 = (signed int)v5; | |
v7 = *(float *)(v4 + 4) * 4096.0; | |
*(_WORD *)v3 = v6; | |
*((_WORD *)v3 + 1) = (signed int)v7; | |
*((_WORD *)v3 + 2) = 4096; | |
v4 += 12; | |
v3 += 8; | |
} | |
while ( v4 < (signed int)((char *)&qword_273C560 + 4) ); | |
dword_403044 = 134217728; | |
dword_701FC0 = 0; | |
v8 = 0; | |
v9 = -2048; | |
while ( 1 ) | |
{ | |
v10 = _mm_cvtsi32_si64(v8); | |
v11 = __OFADD__(&unk_FFFFFF, v8); | |
v8 += (unsigned int)&unk_FFFFFF; | |
if ( v11 ) | |
break; | |
qword_4678D0[v9] = (__int64)_m_pshufw(v10, 85); | |
++v9; | |
if ( v9 >= 0 ) | |
goto LABEL_18; | |
} | |
v12 = qword_43D210; | |
do | |
{ | |
qword_4678D0[v9] = v12; | |
++v9; | |
} | |
while ( v9 < 0 ); | |
LABEL_18: | |
_m_femms(); | |
result = 0; | |
} | |
else | |
{ | |
result = -1; | |
} | |
return result; | |
} | |
// 403044: using guessed type int dword_403044; | |
// 43D210: using guessed type __int64 qword_43D210; | |
// 45F144: using guessed type __int64 qword_45F144; | |
// 4630B0: using guessed type __int64 qword_4630B0[]; | |
// 4678D0: using guessed type __int64 qword_4678D0[]; | |
// 46FFDC: using guessed type int dword_46FFDC; | |
// 701FC0: using guessed type int dword_701FC0; | |
// 273B820: using guessed type int (__cdecl *dword_273B820)(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD); | |
// 273B954: using guessed type int (__cdecl *dword_273B954)(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD); | |
// 273C560: using guessed type __int64 qword_273C560; | |
//----- (0041EDC0) -------------------------------------------------------- | |
__int16 __usercall sub_41EDC0<ax>(double a1<st0>) | |
{ | |
__int32 v2; // eax@3 | |
__int32 v3; // esi@3 | |
__int32 v4; // eax@3 | |
double v5; // ST10_8@3 | |
double v6; // st7@3 | |
__int32 v7; // eax@3 | |
signed int v10; // ecx@3 | |
signed int v11; // eax@3 | |
int v13; // ecx@5 | |
int v14; // ecx@8 | |
int v21; // ST2C_4@22 | |
int v23; // ST2C_4@22 | |
int v24; // ST2C_4@22 | |
int v61; // eax@53 | |
int v62; // esi@54 | |
float v63; // ST0C_4@55 | |
float v64; // ST08_4@55 | |
float v65; // ST04_4@55 | |
float v66; // ST00_4@55 | |
int v67; // eax@55 | |
int v68; // edx@55 | |
int v69; // ecx@55 | |
int v70; // edx@58 | |
int v74; // eax@59 | |
signed int v75; // ecx@59 | |
int v77; // ecx@63 | |
int i; // eax@69 | |
signed int v84; // edx@70 | |
signed int v85; // edx@72 | |
int v86; // eax@72 | |
bool v87; // zf@74 | |
signed __int64 v88; // qtt@77 | |
int v89; // ecx@77 | |
int v90; // esi@77 | |
int v91; // edi@77 | |
int v92; // edx@81 | |
int v93; // eax@81 | |
int v96; // eax@91 | |
int v97; // esi@92 | |
float v98; // ST0C_4@93 | |
float v99; // ST08_4@93 | |
float v100; // ST04_4@93 | |
float v101; // ST00_4@93 | |
int v102; // eax@93 | |
int v103; // edx@93 | |
int v104; // ecx@93 | |
int v105; // edx@96 | |
int v109; // eax@97 | |
signed int v110; // ecx@97 | |
int v112; // ecx@101 | |
int v118; // eax@107 | |
int v119; // ecx@107 | |
signed int v120; // edx@108 | |
signed int v121; // edx@110 | |
int v122; // eax@110 | |
int v123; // eax@112 | |
int v124; // edx@114 | |
int v125; // eax@115 | |
signed __int64 v126; // qtt@118 | |
int v127; // esi@118 | |
int v128; // ecx@118 | |
int v129; // eax@118 | |
int v130; // edx@118 | |
int v131; // edi@122 | |
int v132; // ecx@122 | |
int v133; // eax@122 | |
int v134; // ebx@123 | |
int v135; // edx@130 | |
int v138; // eax@137 | |
int v139; // esi@138 | |
float v140; // ST0C_4@139 | |
float v141; // ST08_4@139 | |
float v142; // ST04_4@139 | |
float v143; // ST00_4@139 | |
int v144; // eax@139 | |
int v145; // edx@139 | |
int v146; // ecx@139 | |
int v147; // edx@142 | |
int v151; // eax@143 | |
signed int v152; // ecx@143 | |
int v154; // ecx@147 | |
int k; // eax@153 | |
signed int v161; // edx@154 | |
signed int v162; // edx@156 | |
int v163; // eax@156 | |
signed __int64 v164; // qtt@164 | |
int v165; // ecx@164 | |
int v166; // esi@164 | |
int v167; // edi@164 | |
int v168; // edx@168 | |
int v169; // eax@168 | |
int v171; // esi@179 | |
float v172; // ST0C_4@180 | |
float v173; // ST08_4@180 | |
float v174; // ST04_4@180 | |
float v175; // ST00_4@180 | |
int v176; // eax@180 | |
int v177; // edx@180 | |
int v178; // ecx@180 | |
int v179; // edx@183 | |
int v183; // eax@184 | |
signed int v184; // ecx@184 | |
int v186; // ecx@188 | |
int v190; // eax@194 | |
signed int v191; // edx@195 | |
signed int v192; // edx@197 | |
int v193; // eax@197 | |
int v194; // edx@201 | |
int v195; // ecx@205 | |
signed __int64 v196; // qtt@206 | |
int v197; // esi@206 | |
int v198; // ecx@206 | |
int v199; // eax@206 | |
int v200; // edx@206 | |
int v201; // edi@210 | |
int v202; // eax@210 | |
int v203; // ecx@210 | |
int v204; // ebx@211 | |
int v206; // [sp+10h] [bp-90h]@131 | |
signed int v207[5]; // [sp+14h] [bp-8Ch]@131 | |
int v208; // [sp+24h] [bp-7Ch]@70 | |
int v209; // [sp+24h] [bp-7Ch]@108 | |
int v210; // [sp+24h] [bp-7Ch]@154 | |
int v211; // [sp+24h] [bp-7Ch]@195 | |
int j; // [sp+6Ch] [bp-34h]@76 | |
int v233; // [sp+6Ch] [bp-34h]@161 | |
int v246; // [sp+7Ch] [bp-24h]@52 | |
int v247; // [sp+80h] [bp-20h]@52 | |
int v248; // [sp+84h] [bp-1Ch]@59 | |
int v249; // [sp+88h] [bp-18h]@69 | |
int v250; // [sp+8Ch] [bp-14h]@52 | |
int v251; // [sp+90h] [bp-10h]@101 | |
int v252; // [sp+94h] [bp-Ch]@63 | |
int v253; // [sp+98h] [bp-8h]@55 | |
int v254; // [sp+9Ch] [bp-4h]@55 | |
__asm | |
{ | |
fldz | |
fcomp flt_4F1F58 | |
} | |
dword_45F12C = -1; | |
__asm { fnstsw ax } | |
if ( HIBYTE(_AX) & 0x41 ) | |
dword_45F12C = 1; | |
__asm { fld flt_4F1F40 } | |
dword_4605E0 = 2048; | |
__asm { fld st } | |
dword_4605E4 = -2048; | |
v2 = _ftol2_sse(a1); | |
v3 = v2; | |
dword_4638B8 = v2; | |
__asm | |
{ | |
fisub dword_4638B8 | |
fstp flt_45F120 | |
fld flt_45F120 | |
fld1 | |
fld st | |
fsubrp st(2), st | |
fxch st(1) | |
fstp flt_45F11C | |
fld flt_4F1F44 | |
fld st | |
} | |
v4 = _ftol2_sse(a1); | |
dword_4638BC = v4; | |
__asm { fisub dword_4638BC } | |
dword_273B958 = (int)&dword_4F1F80[v3 + (v4 << 9)]; | |
__asm | |
{ | |
fstp flt_4605DC | |
fsub flt_4605DC | |
fstp flt_4605D8 | |
fld flt_4F1F48 | |
fstp qword ptr [esp+90h+var_90] | |
} | |
v6 = floor(v5); | |
v7 = _ftol2_sse(v6); | |
__asm | |
{ | |
fld flt_4F1F48 | |
fmul ds:dbl_439550 | |
} | |
dword_4638C0 = v7; | |
__asm { fstp [ebp+var_74] } | |
_EAX = &dword_4678DC; | |
__asm | |
{ | |
fld [ebp+var_74] | |
fistp dword ptr [eax] | |
} | |
v10 = dword_4678DC; | |
v11 = (signed int)&unk_273B840; | |
do | |
{ | |
*(_DWORD *)v11 = (v10 >> 16) & 0xFFFF; | |
v11 += 4; | |
v10 -= 1048576; | |
} | |
while ( v11 < (signed int)&dword_273B950 ); | |
_EAX = *(_DWORD *)dword_273B958; | |
v13 = *(_BYTE *)(*(_DWORD *)dword_273B958 + 1); | |
dword_45F130 = *(_DWORD *)dword_273B958; | |
if ( dword_4638C0 < v13 ) | |
{ | |
dword_45F114 = 0; | |
} | |
else | |
{ | |
do | |
{ | |
if ( !*(_BYTE *)_EAX ) | |
{ | |
dword_45F130 = _EAX; | |
return _EAX; | |
} | |
_EAX += 4 * *(_BYTE *)_EAX; | |
} | |
while ( dword_4638C0 >= *(_BYTE *)(_EAX + 1) ); | |
v14 = *(_BYTE *)(_EAX + 3); | |
dword_45F130 = _EAX; | |
if ( dword_4638C0 < v14 ) | |
return _EAX; | |
dword_45F114 = v14; | |
} | |
__asm | |
{ | |
fld flt_4F1F58 | |
fld st | |
} | |
HIDWORD(qword_45F134) = *(_BYTE *)(_EAX + 1); | |
__asm | |
{ | |
fldz | |
fucompp | |
fnstsw ax | |
fld ds:flt_4395D8 | |
} | |
if ( __SETP__(HIBYTE(_AX) & 0x44, 0) ) | |
{ | |
__asm | |
{ | |
fild dword_45F124 | |
fdivrp st(2), st | |
fxch st(1) | |
fstp [ebp+var_28] | |
} | |
} | |
else | |
{ | |
__asm | |
{ | |
fstp st(1) | |
fst [ebp+var_28] | |
} | |
} | |
__asm | |
{ | |
fld [ebp+var_28] | |
fld ds:dbl_4395D0 | |
fcom st(1) | |
fnstsw ax | |
fld ds:flt_4395C8 | |
} | |
if ( __SETP__(HIBYTE(_AX) & 5, 0) ) | |
{ | |
__asm | |
{ | |
fst [ebp+var_74] | |
fxch st(2) | |
} | |
} | |
else | |
{ | |
__asm | |
{ | |
fxch st(2) | |
fst [ebp+var_74] | |
} | |
} | |
__asm | |
{ | |
fld [ebp+var_74] | |
fcomp ds:dbl_4395C0 | |
fnstsw ax | |
} | |
if ( __SETP__(HIBYTE(_AX) & 5, 0) ) | |
{ | |
__asm | |
{ | |
fstp st | |
fstp st | |
fstp st | |
fstp [ebp+var_28] | |
fld [ebp+var_28] | |
} | |
} | |
else | |
{ | |
__asm | |
{ | |
fstp st(3) | |
fcomp st(2) | |
fnstsw ax | |
} | |
if ( __SETP__(HIBYTE(_AX) & 5, 0) ) | |
{ | |
__asm | |
{ | |
fstp st(1) | |
fstp [ebp+var_28] | |
fld [ebp+var_28] | |
} | |
} | |
else | |
{ | |
__asm { fstp st } | |
} | |
} | |
__asm | |
{ | |
fld flt_5F1F98 | |
fmul st, st(1) | |
fiadd dword ptr qword_4605F4+4 | |
} | |
v21 = -dword_6F5FA4; | |
__asm | |
{ | |
fstp [ebp+var_30] | |
fmul flt_702778 | |
fiadd dword_45F13C | |
fstp [ebp+var_2C] | |
fild [ebp+var_74] | |
fstp [ebp+var_74] | |
fld [ebp+var_74] | |
} | |
v23 = dword_4716E4 + dword_6F5FA4 - 1; | |
__asm | |
{ | |
fst flt_4590D0 | |
fild [ebp+var_74] | |
} | |
v24 = dword_471F28 + dword_6F5FA4 - 1; | |
__asm | |
{ | |
fstp flt_4678E8 | |
fstp flt_45F140 | |
fild [ebp+var_74] | |
fstp flt_45F118 | |
fld flt_4590D0 | |
fstp [ebp+var_74] | |
} | |
_EAX = &dword_45F110; | |
__asm | |
{ | |
fld [ebp+var_74] | |
fistp dword ptr [eax] | |
fld flt_4678E8 | |
fstp [ebp+var_74] | |
} | |
_EAX = &dword_45F128; | |
__asm | |
{ | |
fld [ebp+var_74] | |
fistp dword ptr [eax] | |
fld flt_45F140 | |
fstp [ebp+var_74] | |
} | |
_EAX = &dword_4678E4; | |
__asm | |
{ | |
fld [ebp+var_74] | |
fistp dword ptr [eax] | |
fld flt_45F118 | |
fstp [ebp+var_74] | |
} | |
_EAX = &dword_4638CC; | |
__asm | |
{ | |
fld [ebp+var_74] | |
fistp dword ptr [eax] | |
fld flt_4590D0 | |
fld st | |
fld [ebp+var_30] | |
fld st | |
fsubp st(2), st | |
fxch st(1) | |
fstp [ebp+var_48] | |
fld flt_45F140 | |
fld st | |
fld [ebp+var_2C] | |
fld st | |
fsubp st(2), st | |
fxch st(1) | |
fstp [ebp+var_34] | |
fld flt_4678E8 | |
fld st | |
fsub st, st(4) | |
fstp [ebp+var_3C] | |
fld flt_45F118 | |
fld st | |
fsub st, st(3) | |
fstp [ebp+var_6C] | |
fxch st(5) | |
fst [ebp+var_44] | |
fstp [ebp+var_38] | |
fxch st(2) | |
fst [ebp+var_40] | |
fstp [ebp+var_4C] | |
fxch st(1) | |
fst [ebp+var_64] | |
fstp [ebp+var_54] | |
fxch st(2) | |
fst [ebp+var_74] | |
fstp [ebp+var_5C] | |
fldz | |
fld [ebp+var_34] | |
fcom st(1) | |
fnstsw ax | |
fld [ebp+var_48] | |
fld [ebp+var_3C] | |
} | |
if ( !__SETP__(BYTE1(_EAX) & 5, 0) ) | |
{ | |
__asm | |
{ | |
fxch st(1) | |
fcom st(3) | |
fnstsw ax | |
} | |
if ( !__SETP__(HIBYTE(_AX) & 5, 0) ) | |
{ | |
__asm | |
{ | |
fstp st(5) | |
fstp st(3) | |
fstp st(2) | |
fstp st | |
fmulp st(1), st | |
fstp [ebp+var_4C] | |
fld [ebp+var_4C] | |
fstp [ebp+var_28] | |
fld [ebp+var_30] | |
fld st | |
fld [ebp+var_28] | |
fld st | |
fsubp st(2), st | |
fxch st(1) | |
fstp [ebp+var_38] | |
fld [ebp+var_2C] | |
fld st | |
fsubrp st(2), st | |
fxch st(1) | |
fstp [ebp+var_4C] | |
fld [ebp+var_48] | |
fld [ebp+var_34] | |
fld [ebp+var_3C] | |
fldz | |
fxch st(4) | |
fxch st(5) | |
fxch st(4) | |
fxch st(3) | |
} | |
} | |
__asm | |
{ | |
fxch st(1) | |
fcom st(3) | |
fnstsw ax | |
} | |
if ( !(HIBYTE(_AX) & 0x41) ) | |
{ | |
__asm | |
{ | |
fstp st(5) | |
fstp st(3) | |
fstp st(2) | |
fstp st | |
fxch st(1) | |
fchs | |
fmulp st(1), st | |
fstp [ebp+var_54] | |
fld [ebp+var_54] | |
fstp [ebp+var_28] | |
fld [ebp+var_30] | |
fld st | |
fld [ebp+var_28] | |
fld st | |
faddp st(2), st | |
fxch st(1) | |
fstp [ebp+var_54] | |
fld [ebp+var_2C] | |
fld st | |
fsubrp st(2), st | |
fxch st(1) | |
fstp [ebp+var_40] | |
fld [ebp+var_48] | |
fld [ebp+var_34] | |
fld [ebp+var_3C] | |
fldz | |
fxch st(4) | |
fxch st(5) | |
fxch st(4) | |
fxch st(3) | |
fxch st(1) | |
} | |
} | |
} | |
__asm | |
{ | |
fld [ebp+var_6C] | |
fcom st(4) | |
fnstsw ax | |
} | |
if ( HIBYTE(_AX) & 0x41 ) | |
{ | |
__asm { fstp st(4) } | |
} | |
else | |
{ | |
__asm | |
{ | |
fxch st(1) | |
fcom st(4) | |
fnstsw ax | |
} | |
if ( !(HIBYTE(_AX) & 0x41) ) | |
{ | |
__asm | |
{ | |
fstp st(6) | |
fstp st(2) | |
fstp st(3) | |
fstp st(2) | |
fstp st | |
fmulp st(1), st | |
fstp [ebp+var_64] | |
fld [ebp+var_64] | |
fstp [ebp+var_28] | |
fld [ebp+var_30] | |
fld st | |
fld [ebp+var_28] | |
fld st | |
faddp st(2), st | |
fxch st(1) | |
fstp [ebp+var_64] | |
fld [ebp+var_2C] | |
fld st | |
faddp st(2), st | |
fxch st(1) | |
fstp [ebp+var_5C] | |
fld [ebp+var_48] | |
fld [ebp+var_34] | |
fld [ebp+var_3C] | |
fld [ebp+var_6C] | |
fldz | |
fxch st(5) | |
fxch st(6) | |
fxch st(5) | |
fxch st(4) | |
fxch st(2) | |
} | |
} | |
__asm | |
{ | |
fxch st(4) | |
fcomp st(2) | |
fnstsw ax | |
} | |
if ( HIBYTE(_AX) & 0x41 ) | |
{ | |
__asm { fxch st(3) } | |
} | |
else | |
{ | |
__asm | |
{ | |
fstp st(5) | |
fstp st(1) | |
fstp st(2) | |
fstp st | |
fchs | |
fmulp st(1), st | |
fstp [ebp+var_74] | |
fld [ebp+var_74] | |
fstp [ebp+var_28] | |
fld [ebp+var_30] | |
fld st | |
fld [ebp+var_28] | |
fld st | |
fsubp st(2), st | |
fxch st(1) | |
fstp [ebp+var_44] | |
fld [ebp+var_2C] | |
fld st | |
faddp st(2), st | |
fxch st(1) | |
fstp [ebp+var_74] | |
fld [ebp+var_48] | |
fld [ebp+var_34] | |
fld [ebp+var_3C] | |
fld [ebp+var_6C] | |
fxch st(4) | |
fxch st(5) | |
fxch st(4) | |
fxch st(3) | |
fxch st(1) | |
} | |
} | |
} | |
__asm | |
{ | |
fld [ebp+var_38] | |
fld [ebp+var_54] | |
fcompp | |
fnstsw ax | |
} | |
if ( !__SETP__(HIBYTE(_AX) & 5, 0) ) | |
{ | |
__asm | |
{ | |
fldz | |
fcomp st(2) | |
fnstsw ax | |
} | |
if ( HIBYTE(_AX) & 0x41 ) | |
{ | |
__asm | |
{ | |
fld st | |
fdiv st, st(2) | |
fmul st, st(3) | |
fadd st, st(6) | |
fstp [ebp+var_40] | |
} | |
} | |
else | |
{ | |
__asm | |
{ | |
fld st(1) | |
fdiv st, st(1) | |
fmul st, st(3) | |
fadd st, st(6) | |
fstp [ebp+var_4C] | |
} | |
} | |
} | |
__asm | |
{ | |
fld [ebp+var_40] | |
fld [ebp+var_5C] | |
fcompp | |
fnstsw ax | |
} | |
if ( !__SETP__(HIBYTE(_AX) & 5, 0) ) | |
{ | |
__asm | |
{ | |
fldz | |
fcomp st(3) | |
fnstsw ax | |
} | |
if ( HIBYTE(_AX) & 0x41 ) | |
{ | |
__asm | |
{ | |
fld st(3) | |
fdiv st, st(3) | |
fmul st, st(1) | |
fadd st, st(5) | |
fstp [ebp+var_64] | |
} | |
} | |
else | |
{ | |
__asm | |
{ | |
fld st(2) | |
fdiv st, st(4) | |
fmul st, st(1) | |
fadd st, st(5) | |
fstp [ebp+var_54] | |
} | |
} | |
} | |
__asm | |
{ | |
fld [ebp+var_64] | |
fld [ebp+var_44] | |
fcompp | |
fnstsw ax | |
} | |
if ( HIBYTE(_AX) & 0x41 ) | |
{ | |
__asm | |
{ | |
fstp st(5) | |
fstp st(4) | |
} | |
} | |
else | |
{ | |
__asm | |
{ | |
fldz | |
fcomp st(2) | |
fnstsw ax | |
} | |
if ( HIBYTE(_AX) & 0x41 ) | |
{ | |
__asm | |
{ | |
fdiv st, st(1) | |
fmul st, st(3) | |
faddp st(5), st | |
fxch st(4) | |
fstp [ebp+var_5C] | |
} | |
} | |
else | |
{ | |
__asm | |
{ | |
fdivr st, st(1) | |
fmul st, st(3) | |
faddp st(5), st | |
fxch st(4) | |
fstp [ebp+var_74] | |
} | |
} | |
} | |
__asm | |
{ | |
fld [ebp+var_74] | |
fld [ebp+var_4C] | |
fcompp | |
fnstsw ax | |
} | |
if ( HIBYTE(_AX) & 0x41 ) | |
{ | |
__asm | |
{ | |
fstp st | |
fstp st(2) | |
fstp st(1) | |
} | |
} | |
else | |
{ | |
__asm | |
{ | |
fldz | |
fcomp st(1) | |
fnstsw ax | |
} | |
if ( HIBYTE(_AX) & 0x41 ) | |
{ | |
__asm | |
{ | |
fdivp st(1), st | |
fmulp st(2), st | |
fld st | |
faddp st(2), st | |
fxch st(1) | |
fstp [ebp+var_44] | |
} | |
} | |
else | |
{ | |
__asm | |
{ | |
fdivrp st(1), st | |
fmulp st(2), st | |
fld st | |
faddp st(2), st | |
fxch st(1) | |
fstp [ebp+var_38] | |
} | |
} | |
} | |
__asm | |
{ | |
fild dword_45F124 | |
fdivr ds:dbl_439550 | |
fstp [ebp+var_28] | |
fld flt_5F1F90 | |
fld [ebp+var_28] | |
fld st | |
fmulp st(2), st | |
fxch st(1) | |
fstp dword_4605CC | |
fld flt_702770 | |
fmul st, st(1) | |
fstp dword_4678E0 | |
fld flt_4590D4 | |
fmul st, st(1) | |
fstp dword_4638C8 | |
fld flt_5F1F94 | |
fmul st, st(1) | |
fstp dword ptr qword_45F144 | |
fld flt_702774 | |
fmul st, st(1) | |
fstp dword ptr qword_4605F4 | |
fmul flt_4590D8 | |
fstp dword ptr qword_45F134 | |
fld dword_4605CC | |
fst dword ptr ds:xmmword_4037F0+4 | |
fld st | |
fld ds:dbl_4395B8 | |
fmul st(1), st | |
fxch st(1) | |
fstp dword ptr ds:xmmword_4037F0+8 | |
fld st(1) | |
fld ds:dbl_4395B0 | |
fmul st(1), st | |
fxch st(1) | |
fstp dword ptr ds:xmmword_4037F0+0Ch | |
fld dword ptr qword_45F144 | |
fst dword ptr ds:xmmword_403800+4 | |
fld st | |
fmulp st(3), st | |
fxch st(2) | |
fstp dword ptr ds:xmmword_403800+8 | |
fmul st, st(1) | |
fstp dword ptr ds:xmmword_403800+0Ch | |
fld st(1) | |
fld ds:dbl_4395A8 | |
fmul st(1), st | |
fxch st(1) | |
fstp dword ptr ds:xmmword_403810+0Ch | |
fld dword ptr ds:xmmword_403810+0Ch | |
fst dword ptr ds:xmmword_403810+8 | |
fst dword ptr ds:xmmword_403810+4 | |
fstp dword ptr ds:xmmword_403810 | |
fmul st, st(1) | |
fstp dword ptr ds:xmmword_403820+0Ch | |
fld dword ptr ds:xmmword_403820+0Ch | |
fst dword ptr ds:xmmword_403820+8 | |
fst dword ptr ds:xmmword_403820+4 | |
fstp dword ptr ds:xmmword_403820 | |
fmul st, st | |
fld st(1) | |
fmulp st(2), st | |
faddp st(1), st | |
fmul ds:dbl_4394C0 | |
fstp dword ptr ds:xmmword_403830+0Ch | |
fld dword ptr ds:xmmword_403830+0Ch | |
fst dword ptr ds:xmmword_403830+8 | |
fst dword ptr ds:xmmword_403830+4 | |
fstp dword ptr ds:xmmword_403830 | |
fmul ds:dbl_4395A0 | |
fstp [ebp+var_28] | |
} | |
_EAX = &v246; | |
__asm | |
{ | |
fld [ebp+var_28] | |
fistp dword ptr [eax] | |
fld [ebp+var_2C] | |
fmul ds:dbl_4395A0 | |
fstp [ebp+var_7C] | |
} | |
_EAX = &v247; | |
__asm | |
{ | |
fld [ebp+var_7C] | |
fistp dword ptr [eax] | |
fld [ebp+var_54] | |
fsub [ebp+var_38] | |
fst qword ptr [ebp-58h] | |
fidiv dword_6F5FA4 | |
fstp [ebp+var_7C] | |
} | |
_EAX = &v250; | |
__asm | |
{ | |
fld [ebp+var_7C] | |
fistp dword ptr [eax] | |
fldz | |
fcomp [ebp+var_34] | |
fnstsw ax | |
} | |
if ( !(BYTE1(_EAX) & 0x41) ) | |
{ | |
v61 = v250; | |
if ( v250 > 0 ) | |
{ | |
__asm { fild [ebp+var_14] } | |
v62 = 0; | |
dword_4590CC = dword_46FFCC; | |
__asm | |
{ | |
fdivr qword ptr [ebp-58h] | |
fstp [ebp+var_34] | |
fld flt_45F140 | |
fsub [ebp+var_2C] | |
fld1 | |
fdivrp st(1), st | |
fstp flt_4605C8 | |
fld [ebp+var_34] | |
fadd [ebp+var_38] | |
fstp [ebp+var_28] | |
} | |
if ( v250 > 0 ) | |
{ | |
do | |
{ | |
__asm | |
{ | |
fld flt_45F140 | |
fstp [esp+0A0h+var_94] | |
fld [ebp+var_28] | |
fstp [esp+0A0h+var_98] | |
fld [ebp+var_2C] | |
fstp [esp+0A0h+var_9C] | |
fld [ebp+var_30] | |
fstp [esp+0A0h+var_A0] | |
} | |
sub_41E940(v66, v65, v64, v63, (int)&v253, (int)&v254); | |
v67 = v254; | |
v68 = v253; | |
v69 = dword_4590CC; | |
if ( dword_45F12C >= 0 ) | |
dword_459110[v62] = dword_4590CC - 8 * v254; | |
else | |
dword_459110[v62] = dword_4590CC + 8 * v253; | |
__asm | |
{ | |
fld [ebp+var_34] | |
fadd [ebp+var_28] | |
} | |
v70 = v69 + 8 * abs(v67 - v68) + 8; | |
__asm { fstp [ebp+var_28] } | |
v61 = v250; | |
++v62; | |
dword_4590CC = v70; | |
} | |
while ( v62 < v250 ); | |
} | |
v250 = v61 << 16; | |
__asm | |
{ | |
fild [ebp+var_14] | |
fld flt_4605C8 | |
fld qword ptr [ebp-58h] | |
fmul st, st(1) | |
fdivp st(2), st | |
fxch st(1) | |
fstp [ebp+var_28] | |
fld [ebp+var_30] | |
fsub [ebp+var_38] | |
fmulp st(1), st | |
fmul [ebp+var_28] | |
fstp [ebp+var_7C] | |
} | |
_EAX = &v248; | |
__asm | |
{ | |
fld [ebp+var_7C] | |
fistp dword ptr [eax] | |
} | |
_EAX = &v254; | |
__asm | |
{ | |
fld [ebp+var_30] | |
fistp dword ptr [eax] | |
} | |
v74 = v254; | |
v75 = v254 + 1; | |
if ( v254 + 1 > (unsigned int)dword_4716E4 ) | |
v75 = dword_4716E4 & ~(v75 >> 31); | |
v253 = v75; | |
if ( v254 > (unsigned int)dword_4716E4 ) | |
v74 = dword_4716E4 & ~(v254 >> 31); | |
v254 = v74; | |
_EAX = &v252; | |
__asm | |
{ | |
fld [ebp+var_2C] | |
fistp dword ptr [eax] | |
} | |
v77 = v252; | |
if ( v252 >= dword_471F28 ) | |
{ | |
v77 = dword_471F28 - 1; | |
v252 = dword_471F28 - 1; | |
} | |
__asm | |
{ | |
fild [ebp+var_4] | |
fsub [ebp+var_30] | |
fabs | |
fstp [ebp+var_7C] | |
fld [ebp+var_7C] | |
fadd ds:dbl_439470 | |
fmul [ebp+var_28] | |
fmul ds:dbl_439598 | |
fadd [ebp+var_2C] | |
fstp [ebp+var_34] | |
fld [ebp+var_34] | |
fild [ebp+var_C] | |
fcomp st(1) | |
fnstsw ax | |
} | |
if ( HIBYTE(_AX) & 0x41 ) | |
{ | |
LABEL_68: | |
__asm { fstp st } | |
if ( v77 >= 0 ) | |
{ | |
_EAX = &v249; | |
__asm | |
{ | |
fld [ebp+var_28] | |
fistp dword ptr [eax] | |
} | |
for ( i = v252; i >= 0; v252 = i ) | |
{ | |
v208 = (i << 16) - v247; | |
v84 = v249; | |
if ( v249 >= 0 ) | |
v84 = -v249; | |
v85 = v84 >> 14; | |
v86 = (i << 16) - v247; | |
if ( v208 >= 0 ) | |
v86 = -v208; | |
v87 = (unsigned int)(v86 - v85) >> 31 == 0; | |
i = v252; | |
if ( !v87 ) | |
break; | |
i = v252 - 1; | |
} | |
for ( j = i * dword_45F12C; i >= 0; v252 = i ) | |
{ | |
LODWORD(v88) = v249 << 16; | |
HIDWORD(v88) = v249 >> 16; | |
v89 = v88 / ((i << 16) - v247); | |
v90 = v253; | |
v91 = ((unsigned __int64)(v89 * (signed __int64)((v253 << 16) - v246)) >> 16) + v248; | |
if ( v253 > 0 ) | |
{ | |
do | |
{ | |
if ( v91 < v89 ) | |
break; | |
--v90; | |
v91 -= v89; | |
} | |
while ( v90 > 0 ); | |
v253 = v90; | |
} | |
v92 = v254; | |
v93 = v91 + v89 * (v254 - v90); | |
if ( v254 < dword_4716E4 ) | |
{ | |
do | |
{ | |
if ( v93 >= v250 ) | |
break; | |
++v92; | |
v93 += v89; | |
} | |
while ( v92 < dword_4716E4 ); | |
v254 = v92; | |
} | |
if ( v90 < v92 ) | |
dword_273B954(v90, v252, v92, v91, v89, j); | |
j -= dword_45F12C; | |
i = v252 - 1; | |
} | |
_m_femms(); | |
} | |
} | |
else | |
{ | |
while ( v77 >= 0 ) | |
{ | |
--v77; | |
v252 = v77; | |
__asm | |
{ | |
fild [ebp+var_C] | |
fcomp st(1) | |
fnstsw ax | |
} | |
if ( HIBYTE(_AX) & 0x41 ) | |
goto LABEL_68; | |
} | |
__asm { fstp st } | |
} | |
} | |
} | |
__asm | |
{ | |
fld [ebp+var_5C] | |
fsub [ebp+var_40] | |
fst qword ptr [ebp-60h] | |
fidiv dword_6F5FA4 | |
fstp [ebp+var_7C] | |
} | |
_EAX = &v250; | |
__asm | |
{ | |
fld [ebp+var_7C] | |
fistp dword ptr [eax] | |
fldz | |
fcomp [ebp+var_3C] | |
fnstsw ax | |
} | |
if ( !__SETP__(BYTE1(_EAX) & 5, 0) ) | |
{ | |
v96 = v250; | |
if ( v250 > 0 ) | |
{ | |
__asm { fild [ebp+var_14] } | |
v97 = 0; | |
dword_4590CC = dword_46FFCC; | |
__asm | |
{ | |
fdivr qword ptr [ebp-60h] | |
fstp [ebp+var_34] | |
fld flt_4678E8 | |
fsub [ebp+var_30] | |
fld1 | |
fdivrp st(1), st | |
fstp flt_4605C8 | |
fld [ebp+var_34] | |
fadd [ebp+var_40] | |
fstp [ebp+var_28] | |
} | |
if ( v250 > 0 ) | |
{ | |
do | |
{ | |
__asm | |
{ | |
fld [ebp+var_28] | |
fstp [esp+0A0h+var_94] | |
fld flt_4678E8 | |
fstp [esp+0A0h+var_98] | |
fld [ebp+var_2C] | |
fstp [esp+0A0h+var_9C] | |
fld [ebp+var_30] | |
fstp [esp+0A0h+var_A0] | |
} | |
sub_41EAD0(v101, v100, v99, v98, (int)&v253, (int)&v254); | |
v102 = v254; | |
v103 = v253; | |
v104 = dword_4590CC; | |
if ( dword_45F12C >= 0 ) | |
dword_459110[v97] = dword_4590CC + 8 * v254; | |
else | |
dword_459110[v97] = dword_4590CC - 8 * v253; | |
__asm | |
{ | |
fld [ebp+var_34] | |
fadd [ebp+var_28] | |
} | |
v105 = v104 + 8 * abs(v102 - v103) + 8; | |
__asm { fstp [ebp+var_28] } | |
v96 = v250; | |
++v97; | |
dword_4590CC = v105; | |
} | |
while ( v97 < v250 ); | |
} | |
v250 = v96 << 16; | |
__asm | |
{ | |
fild [ebp+var_14] | |
fld flt_4605C8 | |
fld qword ptr [ebp-60h] | |
fmul st, st(1) | |
fdivp st(2), st | |
fxch st(1) | |
fstp [ebp+var_28] | |
fld [ebp+var_2C] | |
fsub [ebp+var_40] | |
fmulp st(1), st | |
fmul [ebp+var_28] | |
fstp [ebp+var_7C] | |
} | |
_EAX = &v248; | |
__asm | |
{ | |
fld [ebp+var_7C] | |
fistp dword ptr [eax] | |
} | |
_EAX = &v254; | |
__asm | |
{ | |
fld [ebp+var_2C] | |
fistp dword ptr [eax] | |
} | |
v109 = v254; | |
v110 = v254 + 1; | |
if ( v254 + 1 > (unsigned int)dword_471F28 ) | |
v110 = dword_471F28 & ~(v110 >> 31); | |
v253 = v110; | |
if ( v254 > (unsigned int)dword_471F28 ) | |
v109 = dword_471F28 & ~(v254 >> 31); | |
v254 = v109; | |
_EAX = &v251; | |
__asm | |
{ | |
fld [ebp+var_30] | |
fistp dword ptr [eax] | |
} | |
v112 = v251; | |
if ( v251 < 0 ) | |
{ | |
v112 = 0; | |
v251 = 0; | |
} | |
__asm | |
{ | |
fild [ebp+var_4] | |
fsub [ebp+var_2C] | |
fabs | |
fstp [ebp+var_7C] | |
fld [ebp+var_7C] | |
fadd ds:dbl_439470 | |
fmul [ebp+var_28] | |
fmul ds:dbl_439598 | |
fadd [ebp+var_30] | |
fstp [ebp+var_34] | |
fld [ebp+var_34] | |
fild [ebp+var_10] | |
fcomp st(1) | |
fnstsw ax | |
} | |
if ( __SETP__(HIBYTE(_AX) & 5, 0) ) | |
{ | |
LABEL_106: | |
__asm { fstp st } | |
if ( v112 < dword_4716E4 ) | |
{ | |
_EAX = &v249; | |
__asm | |
{ | |
fld [ebp+var_28] | |
fistp dword ptr [eax] | |
} | |
v118 = v251; | |
v119 = dword_4716E4; | |
if ( v251 >= dword_4716E4 ) | |
goto LABEL_114; | |
while ( 1 ) | |
{ | |
v209 = (v118 << 16) - v246; | |
v120 = v249; | |
if ( v249 >= 0 ) | |
v120 = -v249; | |
v121 = v120 >> 14; | |
v122 = (v118 << 16) - v246; | |
if ( v209 >= 0 ) | |
v122 = -v209; | |
v119 = dword_4716E4; | |
v87 = (unsigned int)(v122 - v121) >> 31 == 0; | |
v123 = v251; | |
if ( !v87 ) | |
break; | |
v118 = v251 + 1; | |
v251 = v118; | |
if ( v118 >= dword_4716E4 ) | |
goto LABEL_114; | |
} | |
if ( v251 >= dword_4716E4 ) | |
{ | |
LABEL_114: | |
v124 = v254; | |
} | |
else | |
{ | |
do | |
{ | |
LODWORD(v126) = v249 << 16; | |
HIDWORD(v126) = v249 >> 16; | |
v127 = v126 / ((v123 << 16) - v246); | |
v128 = ((unsigned __int64)(v127 * (signed __int64)((v253 << 16) - v247)) >> 16) + v248; | |
v129 = v253; | |
v130 = v251; | |
if ( v253 > 0 ) | |
{ | |
do | |
{ | |
if ( v128 < v127 ) | |
break; | |
--v129; | |
v128 -= v127; | |
dword_45E110[v129] = v130; | |
} | |
while ( v129 > 0 ); | |
v253 = v129; | |
} | |
*(_DWORD *)(dword_4638C4 + 4 * v130) = v128; | |
*(_DWORD *)(dword_4638C4 + 4 * v251 + 5120) = v127; | |
v124 = v254; | |
v131 = dword_471F28; | |
v132 = v127 * (v254 - v253) + v128; | |
v133 = v251; | |
if ( v254 < dword_471F28 ) | |
{ | |
v134 = v250; | |
do | |
{ | |
if ( v132 >= v134 ) | |
break; | |
dword_45E110[v124++] = v133; | |
v132 += v127; | |
} | |
while ( v124 < v131 ); | |
v254 = v124; | |
} | |
v119 = dword_4716E4; | |
v123 = v133 + 1; | |
v251 = v123; | |
} | |
while ( v123 < dword_4716E4 ); | |
} | |
v125 = v253; | |
v252 = v253; | |
if ( v253 < v124 ) | |
{ | |
while ( 1 ) | |
{ | |
v135 = dword_45E110[v125]; | |
if ( dword_45F12C >= 0 ) | |
{ | |
v207[0] = -1; | |
v206 = -v135; | |
} | |
else | |
{ | |
v207[0] = 1; | |
v206 = dword_45E110[v125]; | |
} | |
dword_273B820(v135, v125, v119, v206, v207[0]); | |
v125 = v252 + 1; | |
v252 = v125; | |
if ( v125 >= v254 ) | |
break; | |
v119 = dword_4716E4; | |
} | |
} | |
_m_femms(); | |
} | |
} | |
else | |
{ | |
while ( v112 < dword_4716E4 ) | |
{ | |
++v112; | |
v251 = v112; | |
__asm | |
{ | |
fild [ebp+var_10] | |
fcomp st(1) | |
fnstsw ax | |
} | |
if ( __SETP__(HIBYTE(_AX) & 5, 0) ) | |
goto LABEL_106; | |
} | |
__asm { fstp st } | |
} | |
} | |
} | |
__asm | |
{ | |
fld [ebp+var_64] | |
fsub [ebp+var_44] | |
fst qword ptr [ebp-68h] | |
fidiv dword_6F5FA4 | |
fstp [ebp+var_7C] | |
} | |
_EAX = &v250; | |
__asm | |
{ | |
fld [ebp+var_7C] | |
fistp dword ptr [eax] | |
fldz | |
fcomp [ebp+var_6C] | |
fnstsw ax | |
} | |
if ( !__SETP__(BYTE1(_EAX) & 5, 0) ) | |
{ | |
v138 = v250; | |
if ( v250 > 0 ) | |
{ | |
__asm { fild [ebp+var_14] } | |
v139 = 0; | |
dword_4590CC = dword_46FFCC; | |
__asm | |
{ | |
fdivr qword ptr [ebp-68h] | |
fstp [ebp+var_34] | |
fld flt_45F118 | |
fsub [ebp+var_2C] | |
fld1 | |
fdivrp st(1), st | |
fstp flt_4605C8 | |
fld [ebp+var_34] | |
fadd [ebp+var_44] | |
fstp [ebp+var_28] | |
} | |
if ( v250 > 0 ) | |
{ | |
do | |
{ | |
__asm | |
{ | |
fld flt_45F118 | |
fstp [esp+0A0h+var_94] | |
fld [ebp+var_28] | |
fstp [esp+0A0h+var_98] | |
fld [ebp+var_2C] | |
fstp [esp+0A0h+var_9C] | |
fld [ebp+var_30] | |
fstp [esp+0A0h+var_A0] | |
} | |
sub_41E940(v143, v142, v141, v140, (int)&v253, (int)&v254); | |
v144 = v254; | |
v145 = v253; | |
v146 = dword_4590CC; | |
if ( dword_45F12C >= 0 ) | |
dword_459110[v139] = dword_4590CC + 8 * v254; | |
else | |
dword_459110[v139] = dword_4590CC - 8 * v253; | |
__asm | |
{ | |
fld [ebp+var_34] | |
fadd [ebp+var_28] | |
} | |
v147 = v146 + 8 * abs(v144 - v145) + 8; | |
__asm { fstp [ebp+var_28] } | |
v138 = v250; | |
++v139; | |
dword_4590CC = v147; | |
} | |
while ( v139 < v250 ); | |
} | |
v250 = v138 << 16; | |
__asm | |
{ | |
fild [ebp+var_14] | |
fld flt_4605C8 | |
fld qword ptr [ebp-68h] | |
fmul st, st(1) | |
fdivp st(2), st | |
fxch st(1) | |
fstp [ebp+var_28] | |
fld [ebp+var_30] | |
fsub [ebp+var_44] | |
fmulp st(1), st | |
fmul [ebp+var_28] | |
fstp [ebp+var_7C] | |
} | |
_EAX = &v248; | |
__asm | |
{ | |
fld [ebp+var_7C] | |
fistp dword ptr [eax] | |
} | |
_EAX = &v254; | |
__asm | |
{ | |
fld [ebp+var_30] | |
fistp dword ptr [eax] | |
} | |
v151 = v254; | |
v152 = v254 + 1; | |
if ( v254 + 1 > (unsigned int)dword_4716E4 ) | |
v152 = dword_4716E4 & ~(v152 >> 31); | |
v253 = v152; | |
if ( v254 > (unsigned int)dword_4716E4 ) | |
v151 = dword_4716E4 & ~(v254 >> 31); | |
v254 = v151; | |
_EAX = &v252; | |
__asm | |
{ | |
fld [ebp+var_2C] | |
fistp dword ptr [eax] | |
} | |
v154 = v252; | |
if ( v252 < 0 ) | |
{ | |
v154 = 0; | |
v252 = 0; | |
} | |
__asm | |
{ | |
fild [ebp+var_4] | |
fsub [ebp+var_30] | |
fabs | |
fstp [ebp+var_7C] | |
fld [ebp+var_7C] | |
fadd ds:dbl_439470 | |
fmul [ebp+var_28] | |
fmul ds:dbl_439598 | |
fadd [ebp+var_2C] | |
fstp [ebp+var_34] | |
fld [ebp+var_34] | |
fild [ebp+var_C] | |
fcomp st(1) | |
fnstsw ax | |
} | |
if ( __SETP__(HIBYTE(_AX) & 5, 0) ) | |
{ | |
LABEL_152: | |
__asm { fstp st } | |
if ( v154 < dword_471F28 ) | |
{ | |
_EAX = &v249; | |
__asm | |
{ | |
fld [ebp+var_28] | |
fistp dword ptr [eax] | |
} | |
for ( k = v252; k < dword_471F28; v252 = k ) | |
{ | |
v210 = (k << 16) - v247; | |
v161 = v249; | |
if ( v249 >= 0 ) | |
v161 = -v249; | |
v162 = v161 >> 14; | |
v163 = (k << 16) - v247; | |
if ( v210 >= 0 ) | |
v163 = -v210; | |
v87 = (unsigned int)(v163 - v162) >> 31 == 0; | |
k = v252; | |
if ( !v87 ) | |
break; | |
k = v252 + 1; | |
} | |
if ( dword_45F12C >= 0 ) | |
v233 = -k; | |
else | |
v233 = k; | |
for ( ; k < dword_471F28; v252 = k ) | |
{ | |
LODWORD(v164) = v249 << 16; | |
HIDWORD(v164) = v249 >> 16; | |
v165 = v164 / ((k << 16) - v247); | |
v166 = v253; | |
v167 = ((unsigned __int64)(v165 * (signed __int64)((v253 << 16) - v246)) >> 16) + v248; | |
if ( v253 > 0 ) | |
{ | |
do | |
{ | |
if ( v167 < v165 ) | |
break; | |
--v166; | |
v167 -= v165; | |
} | |
while ( v166 > 0 ); | |
v253 = v166; | |
} | |
v168 = v254; | |
v169 = v167 + v165 * (v254 - v166); | |
if ( v254 < dword_4716E4 ) | |
{ | |
do | |
{ | |
if ( v169 >= v250 ) | |
break; | |
++v168; | |
v169 += v165; | |
} | |
while ( v168 < dword_4716E4 ); | |
v254 = v168; | |
} | |
if ( v166 < v168 ) | |
dword_273B954(v166, v252, v168, v167, v165, v233); | |
v233 -= dword_45F12C; | |
k = v252 + 1; | |
} | |
_m_femms(); | |
} | |
} | |
else | |
{ | |
while ( v154 < dword_471F28 ) | |
{ | |
++v154; | |
v252 = v154; | |
__asm | |
{ | |
fild [ebp+var_C] | |
fcomp st(1) | |
fnstsw ax | |
} | |
if ( __SETP__(HIBYTE(_AX) & 5, 0) ) | |
goto LABEL_152; | |
} | |
__asm { fstp st } | |
} | |
} | |
} | |
__asm | |
{ | |
fld [ebp+var_74] | |
fsub [ebp+var_4C] | |
fst qword ptr [ebp-78h] | |
fidiv dword_6F5FA4 | |
fstp [ebp+var_7C] | |
} | |
_EAX = (int)&v250; | |
__asm | |
{ | |
fld [ebp+var_7C] | |
fistp dword ptr [eax] | |
fldz | |
fcomp [ebp+var_48] | |
fnstsw ax | |
} | |
if ( !(BYTE1(_EAX) & 0x41) ) | |
{ | |
_EAX = v250; | |
if ( v250 > 0 ) | |
{ | |
__asm { fild [ebp+var_14] } | |
v171 = 0; | |
dword_4590CC = dword_46FFCC; | |
__asm | |
{ | |
fdivr qword ptr [ebp-78h] | |
fstp [ebp+var_34] | |
fld flt_4590D0 | |
fsub [ebp+var_30] | |
fld1 | |
fdivrp st(1), st | |
fstp flt_4605C8 | |
fld [ebp+var_34] | |
fadd [ebp+var_4C] | |
fstp [ebp+var_28] | |
} | |
if ( v250 > 0 ) | |
{ | |
do | |
{ | |
__asm | |
{ | |
fld [ebp+var_28] | |
fstp [esp+0A0h+var_94] | |
fld flt_4590D0 | |
fstp [esp+0A0h+var_98] | |
fld [ebp+var_2C] | |
fstp [esp+0A0h+var_9C] | |
fld [ebp+var_30] | |
fstp [esp+0A0h+var_A0] | |
} | |
sub_41EAD0(v175, v174, v173, v172, (int)&v253, (int)&v254); | |
v176 = v254; | |
v177 = v253; | |
v178 = dword_4590CC; | |
if ( dword_45F12C >= 0 ) | |
dword_459110[v171] = dword_4590CC - 8 * v254; | |
else | |
dword_459110[v171] = dword_4590CC + 8 * v253; | |
__asm | |
{ | |
fld [ebp+var_34] | |
fadd [ebp+var_28] | |
} | |
v179 = v178 + 8 * abs(v176 - v177) + 8; | |
__asm { fstp [ebp+var_28] } | |
_EAX = v250; | |
++v171; | |
dword_4590CC = v179; | |
} | |
while ( v171 < v250 ); | |
} | |
v250 = _EAX << 16; | |
__asm | |
{ | |
fild [ebp+var_14] | |
fld flt_4605C8 | |
fld qword ptr [ebp-78h] | |
fmul st, st(1) | |
fdivp st(2), st | |
fxch st(1) | |
fstp [ebp+var_28] | |
fld [ebp+var_2C] | |
fsub [ebp+var_4C] | |
fmulp st(1), st | |
fmul [ebp+var_28] | |
fstp [ebp+var_7C] | |
} | |
_EAX = &v248; | |
__asm | |
{ | |
fld [ebp+var_7C] | |
fistp dword ptr [eax] | |
} | |
_EAX = &v254; | |
__asm | |
{ | |
fld [ebp+var_2C] | |
fistp dword ptr [eax] | |
} | |
v183 = v254; | |
v184 = v254 + 1; | |
if ( v254 + 1 > (unsigned int)dword_471F28 ) | |
v184 = dword_471F28 & ~(v184 >> 31); | |
v253 = v184; | |
if ( v254 > (unsigned int)dword_471F28 ) | |
v183 = dword_471F28 & ~(v254 >> 31); | |
v254 = v183; | |
_EAX = &v251; | |
__asm | |
{ | |
fld [ebp+var_30] | |
fistp dword ptr [eax] | |
} | |
v186 = v251; | |
if ( v251 >= dword_4716E4 ) | |
{ | |
v186 = dword_4716E4 - 1; | |
v251 = dword_4716E4 - 1; | |
} | |
__asm | |
{ | |
fild [ebp+var_4] | |
fsub [ebp+var_2C] | |
fabs | |
fstp [ebp+var_7C] | |
fld [ebp+var_7C] | |
fadd ds:dbl_439470 | |
fmul [ebp+var_28] | |
fmul ds:dbl_439598 | |
fadd [ebp+var_30] | |
fstp [ebp+var_34] | |
fld [ebp+var_34] | |
fild [ebp+var_10] | |
fcomp st(1) | |
fnstsw ax | |
} | |
if ( BYTE1(_EAX) & 0x41 ) | |
{ | |
LABEL_193: | |
__asm { fstp st } | |
if ( v186 >= 0 ) | |
{ | |
_EAX = &v249; | |
__asm | |
{ | |
fld [ebp+var_28] | |
fistp dword ptr [eax] | |
} | |
v190 = v251; | |
if ( v251 < 0 ) | |
goto LABEL_201; | |
while ( 1 ) | |
{ | |
v211 = (v190 << 16) - v246; | |
v191 = v249; | |
if ( v249 >= 0 ) | |
v191 = -v249; | |
v192 = v191 >> 14; | |
v193 = (v190 << 16) - v246; | |
if ( v211 >= 0 ) | |
v193 = -v211; | |
if ( (unsigned int)(v193 - v192) >> 31 ) | |
break; | |
v190 = v251-- - 1; | |
if ( v251 < 0 ) | |
goto LABEL_201; | |
} | |
v195 = v251; | |
if ( v251 < 0 ) | |
{ | |
LABEL_201: | |
v194 = v254; | |
} | |
else | |
{ | |
do | |
{ | |
LODWORD(v196) = v249 << 16; | |
HIDWORD(v196) = v249 >> 16; | |
v197 = v196 / ((v195 << 16) - v246); | |
v198 = v253; | |
v199 = v248 + ((unsigned __int64)(v197 * (signed __int64)((v253 << 16) - v247)) >> 16); | |
v200 = v251; | |
if ( v253 > 0 ) | |
{ | |
do | |
{ | |
if ( v199 < v197 ) | |
break; | |
--v198; | |
v199 -= v197; | |
dword_45E110[v198] = v200; | |
} | |
while ( v198 > 0 ); | |
v253 = v198; | |
} | |
*(_DWORD *)(dword_4638C4 + 4 * v200) = v199; | |
*(_DWORD *)(dword_4638C4 + 4 * v251 + 5120) = v197; | |
v194 = v254; | |
v201 = dword_471F28; | |
v202 = v197 * (v254 - v253) + v199; | |
v203 = v251; | |
if ( v254 < dword_471F28 ) | |
{ | |
v204 = v250; | |
do | |
{ | |
if ( v202 >= v204 ) | |
break; | |
dword_45E110[v194++] = v203; | |
v202 += v197; | |
} | |
while ( v194 < v201 ); | |
v254 = v194; | |
} | |
v195 = v203 - 1; | |
v251 = v195; | |
} | |
while ( v195 >= 0 ); | |
} | |
_EAX = v253; | |
v252 = v253; | |
if ( v253 < v194 ) | |
{ | |
do | |
{ | |
dword_273B820(0, _EAX, dword_45E110[_EAX] + 1, 0, dword_45F12C); | |
_EAX = v252 + 1; | |
v252 = _EAX; | |
} | |
while ( _EAX < v254 ); | |
} | |
_m_femms(); | |
} | |
} | |
else | |
{ | |
while ( v186 >= 0 ) | |
{ | |
--v186; | |
v251 = v186; | |
__asm | |
{ | |
fild [ebp+var_10] | |
fcomp st(1) | |
fnstsw ax | |
} | |
if ( BYTE1(_EAX) & 0x41 ) | |
goto LABEL_193; | |
} | |
__asm { fstp st } | |
} | |
} | |
} | |
return _EAX; | |
} | |
// 41EDC3: inconsistent fpu stack | |
// 4037F0: using guessed type __int128 xmmword_4037F0; | |
// 403800: using guessed type __int128 xmmword_403800; | |
// 403810: using guessed type __int128 xmmword_403810; | |
// 403820: using guessed type __int128 xmmword_403820; | |
// 403830: using guessed type __int128 xmmword_403830; | |
// 430AB0: using guessed type __int32 __usercall _ftol2_sse<eax>(double<st0>); | |
// 4590CC: using guessed type int dword_4590CC; | |
// 459110: using guessed type int dword_459110[]; | |
// 45E110: using guessed type int dword_45E110[]; | |
// 45F110: using guessed type int dword_45F110; | |
// 45F114: using guessed type int dword_45F114; | |
// 45F128: using guessed type int dword_45F128; | |
// 45F12C: using guessed type int dword_45F12C; | |
// 45F130: using guessed type int dword_45F130; | |
// 45F134: using guessed type __int64 qword_45F134; | |
// 4605E0: using guessed type int dword_4605E0; | |
// 4605E4: using guessed type int dword_4605E4; | |
// 4605F4: using guessed type __int64 qword_4605F4; | |
// 4638B8: using guessed type int dword_4638B8; | |
// 4638BC: using guessed type int dword_4638BC; | |
// 4638C0: using guessed type int dword_4638C0; | |
// 4638C4: using guessed type int dword_4638C4; | |
// 4638CC: using guessed type int dword_4638CC; | |
// 4678DC: using guessed type int dword_4678DC; | |
// 4678E4: using guessed type int dword_4678E4; | |
// 46FFCC: using guessed type int dword_46FFCC; | |
// 4716E4: using guessed type int dword_4716E4; | |
// 471F28: using guessed type int dword_471F28; | |
// 4F1F80: using guessed type int dword_4F1F80[]; | |
// 6F5FA4: using guessed type int dword_6F5FA4; | |
// 273B820: using guessed type int (__cdecl *dword_273B820)(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD); | |
// 273B950: using guessed type int dword_273B950; | |
// 273B954: using guessed type int (__cdecl *dword_273B954)(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD); | |
// 273B958: using guessed type int dword_273B958; | |
//----- (00420120) -------------------------------------------------------- | |
int __usercall sub_420120<eax>(int a1<eax>, int a2) | |
{ | |
int result; // eax@14 | |
int v3; // edi@1 | |
int v4; // ecx@2 | |
int v5; // eax@4 | |
bool v6; // zf@4 | |
bool v7; // sf@4 | |
unsigned __int8 v8; // of@4 | |
void *v9; // eax@4 | |
int v10; // esi@5 | |
v3 = dword_471F28; | |
word_408112 = 32767 - dword_471F28; | |
word_408116 = 32767 - dword_471F28; | |
word_408110 = 32767 - dword_4716E4; | |
word_408114 = 32767 - dword_4716E4; | |
HIDWORD(qword_4630A8[0]) = a2; | |
WORD1(qword_408118) = a1; | |
dword_408124 = (signed __int16)a1; | |
LOWORD(qword_408118) = 4; | |
dword_408120 = a2 | |
+ -4 * (signed __int16)(32767 - dword_4716E4) | |
- (signed __int16)a1 * (signed __int16)(32767 - dword_471F28); | |
if ( a1 == dword_273A804[0] ) | |
{ | |
v9 = dword_46846C; | |
v10 = HIDWORD(qword_4630A8[0]); | |
} | |
else | |
{ | |
v4 = 0; | |
dword_4590C8 = a1; | |
dword_273A800[0] = 0; | |
if ( dword_471F28 > 0 ) | |
{ | |
do | |
{ | |
dword_273A804[v4] = a1 + dword_273A800[v4]; | |
++v4; | |
} | |
while ( v4 < v3 ); | |
} | |
v5 = dword_273A800[v3] + 256; | |
v8 = __OFSUB__(v5, dword_468470); | |
v6 = v5 == dword_468470; | |
v7 = v5 - dword_468470 < 0; | |
v9 = dword_46846C; | |
if ( (unsigned __int8)(v7 ^ v8) | v6 ) | |
{ | |
v10 = HIDWORD(qword_4630A8[0]); | |
if ( dword_46846C ) | |
goto LABEL_13; | |
} | |
else | |
{ | |
if ( dword_46846C ) | |
free(dword_46846C); | |
v10 = HIDWORD(qword_4630A8[0]); | |
} | |
dword_468470 = dword_273A800[v3] + 256; | |
v9 = malloc(dword_468470); | |
dword_46846C = v9; | |
if ( !v9 ) | |
sub_416030("voxsetframebuffer: allocation too big"); | |
} | |
LABEL_13: | |
dword_273B810 = ((unsigned int)((char *)v9 + -v10 + 127) & 0xFFFFFF00) + 128; | |
dword_4638C4 = (int)((char *)&unk_460608 + 4 * (((signed int)((unsigned int)&unk_460608 ^ v10) >> 2) & 1)); | |
if ( (unsigned int)&unk_2000000 & dword_46FFDC ) | |
{ | |
dword_4082A5 = dword_408120; | |
dword_4082CF = dword_408124; | |
dword_4082C9 = dword_4082CF; | |
result = dword_273B810; | |
dword_4082B0 = dword_273B810; | |
} | |
else | |
{ | |
dword_4084C7 = dword_408120; | |
dword_4084F9 = dword_408124; | |
dword_4084F3 = dword_4084F9; | |
result = dword_273B810; | |
dword_4084D2 = dword_273B810; | |
} | |
return result; | |
} | |
// 408110: using guessed type __int16 word_408110; | |
// 408112: using guessed type __int16 word_408112; | |
// 408114: using guessed type __int16 word_408114; | |
// 408116: using guessed type __int16 word_408116; | |
// 408118: using guessed type __int64 qword_408118; | |
// 408120: using guessed type int dword_408120; | |
// 408124: using guessed type int dword_408124; | |
// 4082A5: using guessed type int dword_4082A5; | |
// 4082B0: using guessed type int dword_4082B0; | |
// 4082C9: using guessed type int dword_4082C9; | |
// 4082CF: using guessed type int dword_4082CF; | |
// 4084C7: using guessed type int dword_4084C7; | |
// 4084D2: using guessed type int dword_4084D2; | |
// 4084F3: using guessed type int dword_4084F3; | |
// 4084F9: using guessed type int dword_4084F9; | |
// 4590C8: using guessed type int dword_4590C8; | |
// 4630A8: using guessed type __int64 qword_4630A8[]; | |
// 4638C4: using guessed type int dword_4638C4; | |
// 468470: using guessed type int dword_468470; | |
// 46FFDC: using guessed type int dword_46FFDC; | |
// 471F28: using guessed type int dword_471F28; | |
// 273A800: using guessed type int dword_273A800[]; | |
// 273A804: using guessed type int dword_273A804[]; | |
// 273B810: using guessed type int dword_273B810; | |
//----- (00420290) -------------------------------------------------------- | |
void *__usercall sub_420290<eax>(const char *a1<eax>) | |
{ | |
FILE *v1; // eax@1 | |
FILE *v2; // ebp@1 | |
void *v3; // eax@3 | |
void *v4; // ebx@3 | |
void *result; // eax@4 | |
int v6; // eax@7 | |
int v7; // ecx@7 | |
size_t v8; // [sp+14h] [bp-30h]@3 | |
int v9; // [sp+18h] [bp-2Ch]@3 | |
int v10; // [sp+1Ch] [bp-28h]@3 | |
int v11; // [sp+30h] [bp-14h]@3 | |
v1 = fopen(a1, "rb"); | |
v2 = v1; | |
if ( !v1 ) | |
sub_416030("could not load kv6 file"); | |
fseek(v1, 4, 0); | |
fread(&v9, 0x1Cu, 1u, v2); | |
v8 = 2 * (v9 * (v10 + 2) + 4 * v11); | |
v3 = malloc(v8 + 40); | |
v4 = v3; | |
if ( v3 ) | |
{ | |
if ( (unsigned __int8)v3 & 3 ) | |
sub_416030("loadkv6 malloc not 32-bit aligned"); | |
v6 = (int)((char *)v3 + 40); | |
memcpy(v4, &v9, 0x1Cu); | |
*((_DWORD *)v4 + 7) = v6; | |
v7 = v6 + 8 * v11; | |
*((_DWORD *)v4 + 8) = v7; | |
*((_DWORD *)v4 + 9) = v7 + 4 * v9; | |
fread((char *)v4 + 40, v8, 1u, v2); | |
fclose(v2); | |
result = v4; | |
} | |
else | |
{ | |
fclose(v2); | |
result = 0; | |
} | |
return result; | |
} | |
//----- (00420380) -------------------------------------------------------- | |
signed int __cdecl sub_420380() | |
{ | |
int v0; // ecx@1 | |
int v1; // esi@1 | |
signed int v2; // eax@1 | |
int v3; // edx@4 | |
signed int v4; // edi@7 | |
int v5; // ecx@7 | |
signed int v6; // edx@7 | |
signed int result; // eax@7 | |
int v8; // esi@10 | |
signed int v9; // ecx@14 | |
v0 = 0; | |
v1 = 1; | |
v2 = 0; | |
do | |
{ | |
dword_4573C4[2 * v2] = v1; | |
dword_4573C0[2 * v2] = v0; | |
v1 += 1 << v0; | |
v3 = v2 & 1 && v2 >= 2; | |
++v2; | |
v0 += v3; | |
} | |
while ( v2 < 30 ); | |
v4 = 3; | |
v5 = 0; | |
v6 = 257; | |
result = (signed int)&unk_4574B0; | |
do | |
{ | |
*(_DWORD *)(result + 4) = v4; | |
*(_DWORD *)result = v5; | |
v4 += 1 << v5; | |
v8 = !(v6 & 3) && v6 >= 264; | |
result += 8; | |
v5 += v8; | |
++v6; | |
} | |
while ( result < (signed int)&dword_457590 ); | |
dword_457594 = 258; | |
dword_457590 = 0; | |
if ( dword_46FFDC & 0x8000 ) | |
{ | |
dword_43D264 = 4; | |
result = 0; | |
v9 = (signed int)dword_457E28; | |
do | |
{ | |
*(_DWORD *)v9 = result; | |
dword_457E28[result] = result; | |
v9 -= 4; | |
++result; | |
} | |
while ( v9 > (signed int)&unk_457628 ); | |
} | |
return result; | |
} | |
// 43D264: using guessed type int dword_43D264; | |
// 4573C0: using guessed type int dword_4573C0[]; | |
// 4573C4: using guessed type int dword_4573C4[]; | |
// 457590: using guessed type int dword_457590; | |
// 457594: using guessed type int dword_457594; | |
// 457E28: using guessed type int dword_457E28[]; | |
// 46FFDC: using guessed type int dword_46FFDC; | |
//----- (00420460) -------------------------------------------------------- | |
int __cdecl sub_420460(int a1, int a2) | |
{ | |
int result; // eax@1 | |
int v3; // ecx@1 | |
int v4; // edi@2 | |
char *v5; // edx@2 | |
int v6; // [sp+Ch] [bp-4h]@1 | |
result = dword_4590C0; | |
v6 = dword_4590C0; | |
v3 = a1 - dword_4468FC; | |
if ( a1 > dword_4468FC ) | |
{ | |
v4 = a2; | |
v5 = &byte_4473C0[dword_4468FC]; | |
do | |
{ | |
result = dword_273C5C0[(unsigned __int8)v5[v3--]]; | |
*(_DWORD *)v4 = result; | |
v4 += v6; | |
} | |
while ( v3 ); | |
} | |
return result; | |
} | |
// 4468FC: using guessed type int dword_4468FC; | |
// 4590C0: using guessed type int dword_4590C0; | |
// 273C5C0: using guessed type int dword_273C5C0[]; | |
//----- (004204B0) -------------------------------------------------------- | |
int __cdecl sub_4204B0(int a1, int a2) | |
{ | |
int result; // eax@1 | |
int v3; // edi@1 | |
int v4; // ebx@1 | |
int v5; // ecx@1 | |
char *v6; // edx@2 | |
result = dword_4590C0; | |
v3 = a2; | |
v4 = dword_4590C0; | |
v5 = a1 - dword_4468FC; | |
if ( a1 > dword_4468FC ) | |
{ | |
v6 = &byte_4473C0[dword_4468FC]; | |
if ( dword_4469B4 ) | |
{ | |
do | |
{ | |
result = *(_DWORD *)&v6[v5] | 0xFF000000; | |
if ( result == dword_4469B4 ) | |
result &= (unsigned int)&unk_FFFFFF; | |
v5 -= 3; | |
*(_DWORD *)v3 = result; | |
v3 += v4; | |
} | |
while ( v5 ); | |
} | |
else | |
{ | |
do | |
{ | |
result = *(_DWORD *)&v6[v5] | 0xFF000000; | |
v5 -= 3; | |
*(_DWORD *)v3 = result; | |
v3 += v4; | |
} | |
while ( v5 ); | |
} | |
} | |
return result; | |
} | |
// 4468FC: using guessed type int dword_4468FC; | |
// 4469B4: using guessed type int dword_4469B4; | |
// 4590C0: using guessed type int dword_4590C0; | |
//----- (004205C0) -------------------------------------------------------- | |
int __cdecl sub_4205C0() | |
{ | |
signed int v0; // edi@1 | |
char v1; // dl@2 | |
int v2; // esi@2 | |
int v3; // edi@7 | |
int v4; // ebp@7 | |
int v5; // ebx@7 | |
int v6; // eax@14 | |
int v7; // esi@14 | |
int v8; // eax@14 | |
int v9; // ecx@16 | |
int v10; // edx@16 | |
int v11; // eax@17 | |
int v12; // ecx@17 | |
int v13; // ebp@25 | |
int v15; // ebp@26 | |
int v16; // ebp@27 | |
signed int v17; // [sp+10h] [bp-4h]@7 | |
v0 = dword_4469A4; | |
do | |
{ | |
while ( 1 ) | |
{ | |
v1 = 4 * v0; | |
v2 = (67240192 >> 4 * v0) & 0xF; | |
dword_446834 = v2; | |
dword_45872C = ((signed int)dword_402010 >> 4 * v0) & 0xF; | |
if ( v2 < dword_4590B4 ) | |
{ | |
if ( (((signed int)dword_402010 >> 4 * v0) & 0xF) < dword_4467E0 ) | |
break; | |
} | |
if ( v0 < 2 ) | |
break; | |
--v0; | |
} | |
} | |
while ( v0 & 0x20000000 ); | |
dword_4469A4 = v0; | |
v3 = (857870592 >> v1) & 0xF; | |
v17 = 1 << ((857870592 >> v1) & 0xF); | |
dword_4590C0 = 1 << ((857870592 >> v1) & 0xF); | |
v4 = (dword_4590C0 - v2 + dword_4590B4 - 1) >> v3; | |
dword_4467D8 = 1 << ((858923280 >> v1) & 0xF); | |
dword_4469A0 = v4; | |
dword_4467E4 = dword_43E7D4 << ((858923280 >> v1) & 0xF); | |
v5 = v4 * ((67244801 >> 4 * byte_273C9D0) & 0xF); | |
dword_457618 = v4 * ((67244801 >> 4 * byte_273C9D0) & 0xF); | |
if ( byte_273C9C8 == 1 ) | |
{ | |
v5 = (v5 + 7) >> 3; | |
} | |
else | |
{ | |
if ( byte_273C9C8 == 2 ) | |
{ | |
v5 = (v5 + 3) >> 2; | |
} | |
else | |
{ | |
if ( byte_273C9C8 != 4 ) | |
goto LABEL_14; | |
v5 = (v5 + 1) >> 1; | |
} | |
} | |
dword_457618 = v5; | |
LABEL_14: | |
memset(byte_4473C0, 0, v5 + 1); | |
dword_44699C = v5; | |
dword_446BB8 = dword_45872C; | |
dword_4469A8 = 0; | |
dword_458728 = 0; | |
dword_446900 = 0; | |
dword_4467DC = -1; | |
v6 = v17 - v2; | |
dword_446BBC = dword_45761C | |
+ dword_43E7D4 * (dword_45872C & ((dword_4467D8 - 1) | -(dword_45872C >= 0))) | |
+ 4 * (v2 & ((dword_4590C0 - 1) | -(v2 >= 0))); | |
v7 = (v17 - v2 - 1) >> v3; | |
v8 = (v6 + dword_4469AC - 1) >> v3; | |
if ( v8 >= v4 ) | |
v8 = v4; | |
v9 = v4 - (v7 & ((v7 <= 0) - 1)); | |
v10 = v4 - v8; | |
dword_4469B0 = v4 - (v7 & ((v7 <= 0) - 1)); | |
dword_4468FC = v4 - v8; | |
if ( byte_273C9D0 == 4 ) | |
{ | |
v11 = 2 * v9; | |
v12 = 2 * v10; | |
LABEL_28: | |
dword_4468FC = v12; | |
dword_4469B0 = v11; | |
goto LABEL_29; | |
} | |
if ( byte_273C9D0 == 2 ) | |
{ | |
v11 = 3 * v9 - 2; | |
v12 = 3 * v10 - 2; | |
goto LABEL_28; | |
} | |
if ( byte_273C9D0 == 6 ) | |
{ | |
v11 = 4 * v9 - 2; | |
v12 = 4 * v10 - 2; | |
goto LABEL_28; | |
} | |
if ( byte_273C9C8 == 1 ) | |
{ | |
v16 = -v4 & 7; | |
v11 = v9 + v16 + 7; | |
v12 = v10 + v16 + 7; | |
goto LABEL_28; | |
} | |
if ( byte_273C9C8 == 2 ) | |
{ | |
dword_4590C0 *= 4; | |
v15 = -v4 & 3; | |
dword_4469B0 = 2 * (v9 + v15) + 6; | |
dword_4468FC = 2 * (v10 + v15) + 6; | |
return 0; | |
} | |
if ( byte_273C9C8 == 4 ) | |
{ | |
dword_4590C0 *= 4; | |
v13 = -v4 & 1; | |
dword_4469B0 = 4 * (v9 + v13) + 4; | |
dword_4468FC = 4 * (v10 + v13) + 4; | |
return 0; | |
} | |
LABEL_29: | |
dword_4590C0 *= 4; | |
return 0; | |
} | |
// 402010: using guessed type int dword_402010[4]; | |
// 43E7D4: using guessed type int dword_43E7D4; | |
// 4467D8: using guessed type int dword_4467D8; | |
// 4467DC: using guessed type int dword_4467DC; | |
// 4467E0: using guessed type int dword_4467E0; | |
// 4467E4: using guessed type int dword_4467E4; | |
// 446834: using guessed type int dword_446834; | |
// 4468FC: using guessed type int dword_4468FC; | |
// 446900: using guessed type int dword_446900; | |
// 44699C: using guessed type int dword_44699C; | |
// 4469A0: using guessed type int dword_4469A0; | |
// 4469A4: using guessed type int dword_4469A4; | |
// 4469A8: using guessed type int dword_4469A8; | |
// 4469AC: using guessed type int dword_4469AC; | |
// 4469B0: using guessed type int dword_4469B0; | |
// 446BB8: using guessed type int dword_446BB8; | |
// 446BBC: using guessed type int dword_446BBC; | |
// 457618: using guessed type int dword_457618; | |
// 45761C: using guessed type int dword_45761C; | |
// 458728: using guessed type int dword_458728; | |
// 45872C: using guessed type int dword_45872C; | |
// 4590B4: using guessed type int dword_4590B4; | |
// 4590C0: using guessed type int dword_4590C0; | |
// 273C9C8: using guessed type char byte_273C9C8; | |
// 273C9D0: using guessed type char byte_273C9D0; | |
//----- (00420860) -------------------------------------------------------- | |
int __usercall sub_420860<eax>(int a1<edx>, int a2<esi>, int a3, int a4) | |
{ | |
signed int v4; // eax@1 | |
int i; // ecx@3 | |
int v6; // eax@5 | |
signed int v7; // edi@5 | |
int v8; // ebp@6 | |
int result; // eax@7 | |
int v10; // [sp+8h] [bp-7Ch]@4 | |
int v11[30]; // [sp+Ch] [bp-78h]@2 | |
v4 = 30; | |
do | |
{ | |
--v4; | |
v11[v4] = 0; | |
} | |
while ( v4 ); | |
for ( i = a3 - 1; i >= 0; --i ) | |
++*(&v10 + *(_DWORD *)(a1 + 4 * i)); | |
*(_DWORD *)a2 = 0; | |
v10 = 0; | |
v6 = a2; | |
v7 = 31; | |
do | |
{ | |
v8 = *(_DWORD *)v6 + *(int *)((char *)&v10 + v6 - a2); | |
v6 += 4; | |
--v7; | |
*(_DWORD *)v6 = v8; | |
} | |
while ( v7 ); | |
for ( result = 0; result < a3; ++result ) | |
{ | |
if ( *(_DWORD *)(a1 + 4 * result) ) | |
*(_DWORD *)(a4 + 4 * (*(_DWORD *)(a2 + 4 * *(_DWORD *)(a1 + 4 * result)))++) = result; | |
} | |
return result; | |
} | |
// 420860: using guessed type int var_78[30]; | |
//----- (00420970) -------------------------------------------------------- | |
void __usercall sub_420970(int a1<ebx>, signed int *a2, int a3) | |
{ | |
signed int v3; // ecx@1 | |
int v4; // edx@1 | |
signed int v5; // ebp@8 | |
int v6; // esi@11 | |
int v7; // edi@11 | |
char v8; // al@20 | |
int v9; // eax@26 | |
int v10; // eax@29 | |
int v11; // ebx@29 | |
int v12; // ecx@29 | |
int v13; // ecx@29 | |
int v14; // eax@29 | |
char v15; // al@31 | |
bool v16; // zf@32 | |
char v17; // dl@34 | |
int v18; // eax@37 | |
int v19; // ebx@37 | |
int v20; // ecx@37 | |
int *v21; // edx@37 | |
int v22; // esi@37 | |
int v23; // edi@37 | |
bool v24; // sf@37 | |
unsigned __int8 v25; // of@37 | |
int v26; // ecx@43 | |
int v27; // esi@43 | |
char v28; // dl@43 | |
char v29; // al@43 | |
int v30; // eax@45 | |
signed int v31; // eax@46 | |
int v32; // edx@46 | |
int v33; // esi@50 | |
int v34; // ebx@51 | |
int v35; // esi@53 | |
int v36; // ebx@54 | |
int v37; // esi@56 | |
int v38; // ebx@57 | |
int v39; // esi@60 | |
int v40; // ecx@61 | |
int v41; // edx@61 | |
int v42; // eax@70 | |
int v43; // [sp-4h] [bp-24h]@37 | |
int v44; // [sp+10h] [bp-10h]@13 | |
int v45; // [sp+14h] [bp-Ch]@29 | |
v3 = dword_4467DC; | |
v4 = a3; | |
if ( dword_4467DC >= 0 ) | |
{ | |
v5 = 0; | |
} | |
else | |
{ | |
if ( a3 <= 0 ) | |
return; | |
v3 = *(_BYTE *)a2; | |
dword_4467DC = *(_BYTE *)a2; | |
if ( dword_457620 >= 0 ) | |
dword_4590C4 |= 1 << v3; | |
else | |
dword_457620 = v3; | |
if ( v3 == dword_43D264 ) | |
{ | |
v3 = 5; | |
dword_4467DC = 5; | |
} | |
v5 = 1; | |
} | |
if ( v5 < a3 ) | |
{ | |
v6 = dword_44699C; | |
v7 = dword_446900; | |
while ( 1 ) | |
{ | |
v44 = v6 + v5; | |
if ( v6 + v5 > v4 ) | |
v44 = v4; | |
switch ( v3 ) | |
{ | |
case 0: | |
if ( v5 < v44 ) | |
{ | |
do | |
byte_4473C0[v6--] = *((_BYTE *)a2 + v5++); | |
while ( v5 < v44 ); | |
dword_44699C = v6; | |
} | |
break; | |
case 1: | |
if ( v5 < v44 ) | |
{ | |
do | |
{ | |
v8 = *((_BYTE *)&dword_4469A8 + v7) + *((_BYTE *)a2 + v5); | |
byte_4473C0[v6] = v8; | |
++v5; | |
--v6; | |
*((_BYTE *)&dword_4469A8 + v7) = v8; | |
v7 = dword_446988[v7]; | |
} | |
while ( v5 < v44 ); | |
dword_44699C = v6; | |
dword_446900 = v7; | |
} | |
break; | |
case 2: | |
if ( v5 < v44 ) | |
{ | |
do | |
byte_4473C0[v6--] += *((_BYTE *)a2 + v5++); | |
while ( v5 < v44 ); | |
dword_44699C = v6; | |
} | |
break; | |
case 3: | |
if ( v5 < v44 ) | |
{ | |
do | |
{ | |
v9 = *((_BYTE *)a2 + v5) + (((unsigned __int8)byte_4473C0[v6] + *((_BYTE *)&dword_4469A8 + v7)) >> 1); | |
byte_4473C0[v6] = v9; | |
++v5; | |
--v6; | |
*((_BYTE *)&dword_4469A8 + v7) = v9; | |
v7 = dword_446988[v7]; | |
} | |
while ( v5 < v44 ); | |
dword_44699C = v6; | |
dword_446900 = v7; | |
} | |
break; | |
case 4: | |
if ( v5 < v44 ) | |
{ | |
do | |
{ | |
v10 = *((_BYTE *)&dword_458728 + v7); | |
v11 = *((_BYTE *)&dword_4469A8 + v7) - v10; | |
v12 = (unsigned __int8)byte_4473C0[v6] - v10; | |
v45 = abs(v11 + v12); | |
v13 = abs(v12); | |
v14 = abs(v11); | |
if ( v13 > v14 || v13 > v45 ) | |
{ | |
v25 = __OFSUB__(v14, v45); | |
v16 = v14 == v45; | |
v24 = v14 - v45 < 0; | |
v15 = byte_4473C0[v6]; | |
if ( !((unsigned __int8)(v24 ^ v25) | v16) ) | |
v15 = *((_BYTE *)&dword_458728 + v7); | |
} | |
else | |
{ | |
v15 = *((_BYTE *)&dword_4469A8 + v7); | |
} | |
v17 = v15 + *((_BYTE *)a2 + v5); | |
*((_BYTE *)&dword_458728 + v7) = byte_4473C0[v6]; | |
byte_4473C0[v6] = v17; | |
++v5; | |
--v6; | |
*((_BYTE *)&dword_4469A8 + v7) = v17; | |
v7 = dword_446988[v7]; | |
} | |
while ( v5 < v44 ); | |
dword_44699C = v6; | |
dword_446900 = v7; | |
} | |
break; | |
case 5: | |
for ( ; v5 < v44; dword_44699C = v6 ) | |
{ | |
v18 = *((_BYTE *)&dword_4469A8 + v7); | |
v43 = a1; | |
v19 = (unsigned __int8)byte_4473C0[v6]; | |
v20 = *((_BYTE *)&dword_458728 + v7); | |
v21 = &dword_457E28[v20 - v18 - (unsigned __int8)byte_4473C0[v6]]; | |
v22 = v21[v19]; | |
v23 = v21[v20]; | |
v25 = __OFSUB__(v23, v22); | |
v24 = v23 - v22 < 0; | |
if ( v23 >= v22 ) | |
v23 = v21[v19]; | |
if ( !(v24 ^ v25) ) | |
LOBYTE(v20) = v19; | |
if ( v23 < v21[v18] ) | |
LOBYTE(v18) = v20; | |
a1 = v43; | |
v26 = dword_446900; | |
v27 = dword_44699C; | |
v7 = dword_446988[dword_446900]; | |
v28 = v18 + *((_BYTE *)a2 + v5); | |
v29 = byte_4473C0[dword_44699C]; | |
*((_BYTE *)&dword_4469A8 + dword_446900) = v28; | |
byte_4473C0[v27] = v28; | |
v6 = v27 - 1; | |
++v5; | |
*((_BYTE *)&dword_458728 + v26) = v29; | |
dword_446900 = v7; | |
} | |
break; | |
default: | |
break; | |
} | |
if ( v6 > 0 ) | |
return; | |
v30 = dword_446BB8; | |
if ( dword_446BB8 < (unsigned int)dword_457624 ) | |
{ | |
v31 = dword_4469B0; | |
v32 = dword_446BBC; | |
switch ( byte_273C9D0 ) | |
{ | |
case 2: | |
sub_4204B0(dword_4469B0, dword_446BBC); | |
LABEL_68: | |
v7 = dword_446900; | |
break; | |
case 4: | |
if ( dword_4469B0 > dword_4468FC ) | |
{ | |
do | |
{ | |
*(_DWORD *)v32 = (unsigned int)&unk_FFFFFF & dword_273C5C0[(unsigned __int8)byte_4473C0[v31]] | (((unsigned int)(unsigned __int8)byte_4473BF[v31] >> 24) + (((unsigned int)(unsigned __int8)byte_4473BF[v31] >> 8) & 0xFF00) + (((byte_4473BF[v31] & 0) + ((unsigned __int8)byte_4473BF[v31] << 16)) << 8)); | |
v32 += dword_4590C0; | |
v31 -= 2; | |
} | |
while ( v31 > dword_4468FC ); | |
} | |
break; | |
case 6: | |
v39 = dword_4468FC; | |
if ( dword_4469B0 > dword_4468FC ) | |
{ | |
v40 = dword_446BBC + 2; | |
v41 = dword_4590C0; | |
do | |
{ | |
*(_BYTE *)(v40 - 2) = byte_4473C0[v31]; | |
*(_BYTE *)(v40 - 1) = byte_4473C1[v31]; | |
*(_BYTE *)v40 = byte_4473C2[v31]; | |
*(_BYTE *)(v40 + 1) = byte_4473BF[v31]; | |
v31 -= 4; | |
v40 += v41; | |
} | |
while ( v31 > v39 ); | |
} | |
break; | |
default: | |
switch ( byte_273C9C8 ) | |
{ | |
case 1: | |
v33 = dword_4468FC; | |
if ( dword_4469B0 > dword_4468FC ) | |
{ | |
do | |
{ | |
v34 = (unsigned __int8)byte_4473C0[v31 >> 3] >> (v31 & 7); | |
--v31; | |
*(_DWORD *)v32 = dword_273C5C0[v34]; | |
v32 += dword_4590C0; | |
} | |
while ( v31 > v33 ); | |
} | |
break; | |
case 2: | |
v35 = dword_4468FC; | |
if ( dword_4469B0 > dword_4468FC ) | |
{ | |
do | |
{ | |
v36 = (unsigned __int8)byte_4473C0[v31 >> 3] >> (v31 & 6); | |
v31 -= 2; | |
*(_DWORD *)v32 = dword_273C5C0[v36]; | |
v32 += dword_4590C0; | |
} | |
while ( v31 > v35 ); | |
} | |
break; | |
case 4: | |
v37 = dword_4468FC; | |
if ( dword_4469B0 > dword_4468FC ) | |
{ | |
do | |
{ | |
v38 = (unsigned __int8)byte_4473C0[v31 >> 3] >> (v31 & 4); | |
v31 -= 4; | |
*(_DWORD *)v32 = dword_273C5C0[v38]; | |
v32 += dword_4590C0; | |
} | |
while ( v31 > v37 ); | |
} | |
break; | |
case 8: | |
sub_420460(dword_4469B0, dword_446BBC); | |
goto LABEL_68; | |
default: | |
goto LABEL_69; | |
} | |
break; | |
} | |
LABEL_69: | |
dword_446BBC += dword_4467E4; | |
v30 = dword_446BB8; | |
} | |
v42 = dword_4467D8 + v30; | |
v6 = dword_457618; | |
a1 = 0; | |
dword_4469A8 = 0; | |
dword_458728 = 0; | |
dword_44699C = dword_457618; | |
dword_446BB8 = v42; | |
if ( dword_4469A4 && v42 >= dword_4467E0 ) | |
{ | |
--dword_4469A4; | |
sub_4205C0(); | |
v6 = dword_44699C; | |
v7 = dword_446900; | |
} | |
if ( v5 >= a3 ) | |
break; | |
v3 = *((_BYTE *)a2 + v5++); | |
dword_4467DC = v3; | |
if ( dword_457620 >= 0 ) | |
dword_4590C4 |= 1 << v3; | |
else | |
dword_457620 = v3; | |
if ( v3 == dword_43D264 ) | |
{ | |
v3 = 5; | |
LABEL_80: | |
dword_4467DC = v3; | |
} | |
if ( v5 >= a3 ) | |
return; | |
v4 = a3; | |
} | |
v3 = -1; | |
goto LABEL_80; | |
} | |
} | |
// 43D264: using guessed type int dword_43D264; | |
// 4467D8: using guessed type int dword_4467D8; | |
// 4467DC: using guessed type int dword_4467DC; | |
// 4467E0: using guessed type int dword_4467E0; | |
// 4467E4: using guessed type int dword_4467E4; | |
// 4468FC: using guessed type int dword_4468FC; | |
// 446900: using guessed type int dword_446900; | |
// 446988: using guessed type int dword_446988[]; | |
// 44699C: using guessed type int dword_44699C; | |
// 4469A4: using guessed type int dword_4469A4; | |
// 4469A8: using guessed type int dword_4469A8; | |
// 4469B0: using guessed type int dword_4469B0; | |
// 446BB8: using guessed type int dword_446BB8; | |
// 446BBC: using guessed type int dword_446BBC; | |
// 457618: using guessed type int dword_457618; | |
// 457620: using guessed type int dword_457620; | |
// 457624: using guessed type int dword_457624; | |
// 457E28: using guessed type int dword_457E28[]; | |
// 458728: using guessed type int dword_458728; | |
// 4590C0: using guessed type int dword_4590C0; | |
// 4590C4: using guessed type int dword_4590C4; | |
// 273C5C0: using guessed type int dword_273C5C0[]; | |
// 273C9C8: using guessed type char byte_273C9C8; | |
// 273C9D0: using guessed type char byte_273C9D0; | |
//----- (00420F50) -------------------------------------------------------- | |
void __thiscall sub_420F50(void *this, int a2, int a3, int a4, signed int a5) | |
{ | |
signed int v5; // edx@1 | |
int v6; // esi@1 | |
int v7; // ecx@2 | |
int v8; // eax@3 | |
int v9; // ebx@4 | |
int v10; // edi@5 | |
unsigned int v11; // edx@6 | |
signed int v12; // ecx@6 | |
int v13; // eax@6 | |
unsigned __int8 v14; // cf@7 | |
int i; // edi@13 | |
unsigned int v16; // edx@14 | |
signed int v17; // ecx@14 | |
int v18; // eax@14 | |
int v19; // [sp+8h] [bp-14h]@2 | |
int v20; // [sp+Ch] [bp-10h]@3 | |
char *v21; // [sp+10h] [bp-Ch]@2 | |
signed int v22; // [sp+14h] [bp-8h]@1 | |
unsigned int v23; // [sp+18h] [bp-4h]@1 | |
v5 = a5; | |
v6 = 0; | |
v23 = 0; | |
v22 = 1; | |
if ( a5 >= 1 ) | |
{ | |
v7 = (int)((char *)this + 4); | |
v19 = v7; | |
v21 = (char *)&unk_4388EC + 4 * a5; | |
do | |
{ | |
v8 = *(_DWORD *)(v7 - 4); | |
v20 = v8; | |
if ( v8 < *(_DWORD *)v7 ) | |
{ | |
v9 = a2 + 4 * v8; | |
do | |
{ | |
v10 = v6 + *(_DWORD *)v21; | |
if ( v6 <= v10 ) | |
{ | |
do | |
{ | |
v11 = v23; | |
v12 = a5; | |
v13 = 0; | |
do | |
{ | |
v14 = v11 & 1; | |
v11 >>= 1; | |
v13 += v14 + v13; | |
--v12; | |
} | |
while ( v12 ); | |
*(_DWORD *)(a3 + 4 * v13) = *(_DWORD *)v9; | |
++v6; | |
*(_BYTE *)(v13 + a4) = v22; | |
v23 = v6; | |
} | |
while ( v6 <= v10 ); | |
v8 = v20; | |
v7 = v19; | |
} | |
++v8; | |
v9 += 4; | |
v20 = v8; | |
} | |
while ( v8 < *(_DWORD *)v7 ); | |
v5 = a5; | |
} | |
v21 -= 4; | |
v7 += 4; | |
++v22; | |
v19 = v7; | |
} | |
while ( v22 <= v5 ); | |
} | |
for ( i = dword_4388F0[v5]; v6 <= i; v23 = v6 ) | |
{ | |
v16 = v23; | |
v17 = a5; | |
v18 = 0; | |
do | |
{ | |
v14 = v16 & 1; | |
v16 >>= 1; | |
v18 += v14 + v18; | |
--v17; | |
} | |
while ( v17 ); | |
++v6; | |
*(_BYTE *)(v18 + a4) = 0; | |
} | |
} | |
// 4388F0: using guessed type int dword_4388F0[]; | |
//----- (00421030) -------------------------------------------------------- | |
int __cdecl sub_421030() | |
{ | |
int v0; // eax@2 | |
int v1; // ecx@2 | |
int result; // eax@2 | |
bool v3; // zf@2 | |
if ( dword_4590B0 ) | |
{ | |
dword_4468F8 = dword_4590B0; | |
result = dword_446904; | |
dword_446998 += 32 - 8 * dword_446904; | |
dword_4590B0 = 0; | |
} | |
else | |
{ | |
v0 = (*(_DWORD *)(dword_4468F8 + 8) >> 24) | |
+ ((*(_DWORD *)(dword_4468F8 + 8) >> 8) & 0xFF00) | |
+ (((*(_DWORD *)(dword_4468F8 + 8) << 16) + (*(_DWORD *)(dword_4468F8 + 8) & 0xFF00)) << 8); | |
v1 = *(_DWORD *)dword_4468F8; | |
dword_446904 = v0; | |
result = dword_4468F8 + v0 + 12; | |
dword_4590B8 = v1; | |
v3 = *(_DWORD *)(dword_4468F8 + 12) == 1413563465; | |
dword_4590B0 = result; | |
if ( v3 ) | |
dword_4590BC = *(_DWORD *)(dword_4468F8 + 16); | |
dword_4468F8 = (int)&dword_4590BC; | |
dword_446998 -= 32; | |
} | |
return result; | |
} | |
// 4468F8: using guessed type int dword_4468F8; | |
// 446904: using guessed type int dword_446904; | |
// 446998: using guessed type int dword_446998; | |
// 4590B0: using guessed type int dword_4590B0; | |
// 4590B8: using guessed type int dword_4590B8; | |
// 4590BC: using guessed type int dword_4590BC; | |
//----- (00421120) -------------------------------------------------------- | |
int __cdecl sub_421120(int a1, int a2) | |
{ | |
signed int v2; // eax@1 | |
int v3; // ebx@1 | |
int v4; // edi@1 | |
int v5; // esi@2 | |
int v6; // ecx@4 | |
v2 = dword_446998; | |
v3 = 0; | |
v4 = 0; | |
do | |
{ | |
v5 = (*(_DWORD *)((v2 >> 3) + dword_4468F8) >> (v2 & 7)) & 1; | |
++v2; | |
dword_446998 = v2; | |
if ( v2 >= 0 ) | |
{ | |
sub_421030(); | |
v2 = dword_446998; | |
} | |
v6 = *(_DWORD *)(a2 + 4 * v3) - *(_DWORD *)(a2 + 4 * v3 + 4); | |
++v3; | |
v4 = v5 + v6 + 2 * v4; | |
} | |
while ( v4 >= 0 ); | |
return *(_DWORD *)(a1 + 4 * (v4 + *(_DWORD *)(a2 + 4 * v3))); | |
} | |
// 4468F8: using guessed type int dword_4468F8; | |
// 446998: using guessed type int dword_446998; | |
//----- (00421180) -------------------------------------------------------- | |
signed int __cdecl sub_421180(int a1, int a2, int a3, int a4, int a5) | |
{ | |
int v5; // esi@3 | |
int v6; // edi@3 | |
signed int v7; // ebx@4 | |
int v8; // eax@4 | |
int v9; // edi@4 | |
signed int v10; // ebp@7 | |
unsigned __int8 v11; // al@11 | |
signed int v12; // ecx@14 | |
int v13; // esi@14 | |
int v14; // ecx@19 | |
int v15; // edx@20 | |
signed __int64 v16; // qax@25 | |
signed int v17; // esi@28 | |
signed int v18; // ebp@28 | |
signed __int64 v19; // qax@29 | |
signed int v20; // eax@36 | |
int v21; // eax@38 | |
char v22; // cl@46 | |
signed int v23; // esi@46 | |
int v25; // edx@57 | |
signed int v26; // eax@60 | |
signed int v27; // eax@63 | |
signed int v28; // eax@66 | |
int v29; // eax@68 | |
signed int v30; // ebp@76 | |
int v31; // edi@76 | |
bool v32; // sf@76 | |
signed int v33; // esi@76 | |
int v34; // eax@79 | |
signed int v35; // esi@79 | |
int v36; // edi@81 | |
int v37; // ecx@84 | |
signed int v38; // esi@84 | |
signed int v39; // esi@86 | |
int v40; // edi@88 | |
bool v41; // zf@98 | |
int v42; // edi@103 | |
signed int v43; // esi@103 | |
int v44; // edi@105 | |
signed int v45; // esi@105 | |
int v46; // edi@107 | |
signed int v47; // esi@107 | |
int v48; // ebp@109 | |
int v49; // edx@109 | |
signed int v50; // ebx@109 | |
int v51; // edi@110 | |
int v52; // ecx@112 | |
signed int v53; // eax@114 | |
int v54; // ecx@115 | |
signed int v55; // eax@116 | |
signed int v56; // eax@118 | |
signed int v57; // eax@120 | |
int v58; // ecx@121 | |
int v59; // eax@122 | |
int v60; // ecx@123 | |
int v61; // edx@124 | |
int v62; // eax@127 | |
int v63; // esi@130 | |
int v64; // eax@132 | |
int v65; // esi@135 | |
int v66; // edx@137 | |
int v67; // esi@138 | |
signed int v68; // eax@145 | |
int v69; // ecx@147 | |
signed int v70; // eax@149 | |
int v71; // ecx@150 | |
int v72; // eax@151 | |
int v73; // ecx@152 | |
int v74; // edx@153 | |
signed int v75; // edi@156 | |
signed int v76; // ebp@156 | |
int v77; // eax@161 | |
char v78; // cl@161 | |
int v79; // edx@167 | |
int v80; // eax@169 | |
int v81; // ebp@169 | |
signed int v82; // esi@169 | |
int v83; // edi@171 | |
int v84; // eax@171 | |
char v85; // cl@171 | |
int v86; // ebp@172 | |
signed int v87; // esi@172 | |
int v88; // eax@176 | |
int v89; // ebx@176 | |
int v90; // ecx@178 | |
int v91; // edi@178 | |
int v92; // eax@178 | |
char v93; // dl@179 | |
int v94; // ebp@183 | |
signed int v95; // [sp+10h] [bp-90h]@76 | |
signed int v96; // [sp+14h] [bp-8Ch]@88 | |
int v97; // [sp+14h] [bp-8Ch]@102 | |
signed int v98; // [sp+18h] [bp-88h]@76 | |
int v99; // [sp+1Ch] [bp-84h]@102 | |
int v100; // [sp+20h] [bp-80h]@79 | |
int v101; // [sp+24h] [bp-7Ch]@119 | |
int v102[30]; // [sp+28h] [bp-78h]@117 | |
if ( !byte_468468 ) | |
{ | |
byte_468468 = 1; | |
sub_420380(); | |
} | |
dword_4469B4 = 0; | |
dword_4590C4 = 0; | |
v5 = dword_273C9C0; | |
v6 = a1 + 8; | |
dword_457620 = -1; | |
while ( 1 ) | |
{ | |
while ( 1 ) | |
{ | |
while ( 1 ) | |
{ | |
while ( 1 ) | |
{ | |
v7 = (*(_DWORD *)v6 >> 24) | |
+ ((*(_DWORD *)v6 >> 8) & 0xFF00) | |
+ (((*(_DWORD *)v6 & 0xFF00) + (*(_DWORD *)v6 << 16)) << 8); | |
v8 = *(_DWORD *)(v6 + 4); | |
v9 = v6 + 8; | |
if ( v8 != 1380206665 ) | |
break; | |
dword_4590B4 = (*(_DWORD *)v9 >> 24) | |
+ ((*(_DWORD *)v9 >> 8) & 0xFF00) | |
+ (((*(_DWORD *)v9 & 0xFF00) + (*(_DWORD *)v9 << 16)) << 8); | |
if ( dword_4590B4 <= 0 | |
|| (dword_4467E0 = (*(_DWORD *)(v9 + 4) >> 24) | |
+ ((*(_DWORD *)(v9 + 4) >> 8) & 0xFF00) | |
+ (((*(_DWORD *)(v9 + 4) & 0xFF00) + (*(_DWORD *)(v9 + 4) << 16)) << 8), | |
dword_4467E0 <= 0) | |
|| (v10 = 1 << *(_BYTE *)(v9 + 8), byte_273C9C8 = *(_BYTE *)(v9 + 8), !(v10 & 0x116)) | |
|| (byte_273C9D0 = *(_BYTE *)(v9 + 9), !((1 << byte_273C9D0) & 0x5D)) | |
|| *(_BYTE *)(v9 + 10) | |
|| *(_BYTE *)(v9 + 11) | |
|| (v11 = *(_BYTE *)(v9 + 12), v11 >= 2u) ) | |
{ | |
dword_4468F8 = v9; | |
return -1; | |
} | |
dword_4469A4 = 7 * v11; | |
if ( !byte_273C9D0 || byte_273C9D0 == 4 ) | |
{ | |
v12 = 0; | |
v13 = -16777216; | |
for ( dword_273C9C0 = v10; v12 < v10; v13 += 65793 * 255 / (v10 - 1) ) | |
dword_273C5C0[v12++] = v13; | |
v5 = dword_273C9C0; | |
} | |
LABEL_17: | |
v6 = v9 + v7 + 4; | |
} | |
if ( v8 != 1163152464 ) | |
break; | |
v5 = v7 / 3; | |
v14 = v7 / 3 - 1; | |
dword_273C9C0 = v7 / 3; | |
if ( v14 < 0 ) | |
goto LABEL_17; | |
v15 = v14 + v9 + 2 * v14; | |
do | |
{ | |
dword_273C5C0[v14] = (((*(_DWORD *)v15 >> 24) | |
+ ((*(_DWORD *)v15 >> 8) & 0xFF00) | |
+ (((*(_DWORD *)v15 & 0xFF00u) + (*(_DWORD *)v15 << 16)) << 8)) >> 8) | 0xFF000000; | |
v15 -= 3; | |
--v14; | |
} | |
while ( v14 >= 0 ); | |
v5 = dword_273C9C0; | |
v6 = v9 + v7 + 4; | |
} | |
if ( v8 != 1145523042 ) | |
break; | |
switch ( byte_273C9D0 ) | |
{ | |
default: | |
goto LABEL_17; | |
case 0: | |
case 4: | |
v16 = 255 * (*(_BYTE *)(v9 + 1) + (*(_BYTE *)v9 << 8)); | |
v6 = v9 + v7 + 4; | |
dword_273C9D4 = 65793 * (unsigned __int64)(v16 / ((1 << byte_273C9C8) - 1)) - (_DWORD)&unk_1000000; | |
break; | |
case 2: | |
case 6: | |
if ( byte_273C9C8 == 8 ) | |
{ | |
dword_273C9D4 = *(_BYTE *)(v9 + 5) + ((*(_BYTE *)(v9 + 3) + ((*(_BYTE *)(v9 + 1) - 256) << 8)) << 8); | |
v6 = v9 + v7 + 4; | |
} | |
else | |
{ | |
v17 = 0; | |
v18 = -16777216; | |
do | |
{ | |
v19 = 2139127681i64 * (*(_BYTE *)(v9 + 2 * v17 + 1) + (*(_BYTE *)(v9 + 2 * v17) << 8)); | |
HIDWORD(v19) = ((HIDWORD(v19) >> 31) + (SHIDWORD(v19) >> 7)) << 8 * (2 - v17++); | |
v18 += HIDWORD(v19); | |
} | |
while ( v17 < 3 ); | |
v5 = dword_273C9C0; | |
dword_273C9D4 = v18; | |
v6 = v9 + v7 + 4; | |
} | |
break; | |
case 3: | |
dword_273C9D4 = dword_273C5C0[*(_BYTE *)v9]; | |
v6 = v9 + v7 + 4; | |
break; | |
} | |
} | |
if ( v8 != 1397641844 ) | |
break; | |
if ( byte_273C9D0 ) | |
{ | |
if ( byte_273C9D0 == 2 ) | |
{ | |
if ( byte_273C9C8 != 8 ) | |
goto LABEL_17; | |
dword_4469B4 = *(_BYTE *)(v9 + 5) + ((*(_BYTE *)(v9 + 3) + ((*(_BYTE *)(v9 + 1) - 256) << 8)) << 8); | |
v6 = v9 + v7 + 4; | |
} | |
else | |
{ | |
if ( byte_273C9D0 != 3 ) | |
goto LABEL_17; | |
v20 = v7; | |
if ( v7 >= v5 ) | |
v20 = v5; | |
v21 = v20 - 1; | |
if ( v21 < 0 ) | |
goto LABEL_17; | |
do | |
{ | |
dword_273C5C0[v21] &= (unsigned int)&unk_FFFFFF | (*(_BYTE *)(v9 + v21) << 24); | |
--v21; | |
} | |
while ( v21 >= 0 ); | |
v6 = v9 + v7 + 4; | |
} | |
} | |
else | |
{ | |
if ( byte_273C9C8 > 8 ) | |
goto LABEL_17; | |
BYTE3(dword_273C5C0[*(_BYTE *)(v9 + 1)]) = 0; | |
v6 = v9 + v7 + 4; | |
} | |
} | |
if ( v8 != 1413563465 ) | |
goto LABEL_17; | |
dword_4468F8 = v9 + v7 - 4; | |
dword_43E7D4 = a3; | |
dword_45761C = a2; | |
dword_457624 = a5; | |
v22 = byte_273C9D0; | |
v23 = 32 - 8 * v7; | |
dword_4469AC = a4; | |
dword_446998 = 32 - 8 * v7; | |
dword_4590B0 = 0; | |
if ( byte_273C9D0 == 2 ) | |
{ | |
dword_446990 = 0; | |
goto LABEL_55; | |
} | |
if ( byte_273C9D0 == 4 ) | |
{ | |
dword_44698C = 0; | |
} | |
else | |
{ | |
if ( byte_273C9D0 != 6 ) | |
{ | |
dword_446988[0] = 0; | |
goto LABEL_57; | |
} | |
dword_446990 = 3; | |
dword_446994 = 0; | |
LABEL_55: | |
dword_44698C = 2; | |
} | |
dword_446988[0] = 1; | |
LABEL_57: | |
v25 = byte_273C9C8; | |
switch ( byte_273C9C8 ) | |
{ | |
case 1: | |
v28 = 2; | |
do | |
{ | |
v7 = dword_273C5C0[v28 & 1]; | |
dword_273C5C0[v28++] = v7; | |
} | |
while ( v28 < 256 ); | |
break; | |
case 2: | |
v27 = 4; | |
do | |
{ | |
v7 = dword_273C5C0[v27 & 3]; | |
dword_273C5C0[v27++] = v7; | |
} | |
while ( v27 < 256 ); | |
break; | |
case 4: | |
v26 = 16; | |
do | |
{ | |
v7 = dword_273C5C0[v26 & 0xF]; | |
dword_273C5C0[v26++] = v7; | |
} | |
while ( v26 < 256 ); | |
break; | |
} | |
v29 = dword_4590B4 * ((67244801 >> 4 * v22) & 0xF); | |
dword_457618 = dword_4590B4 * ((67244801 >> 4 * v22) & 0xF); | |
if ( v25 == 1 ) | |
{ | |
v29 = (v29 + 7) >> 3; | |
goto LABEL_74; | |
} | |
if ( v25 == 2 ) | |
{ | |
v29 = (v29 + 3) >> 2; | |
LABEL_74: | |
dword_457618 = v29; | |
goto LABEL_75; | |
} | |
if ( v25 == 4 ) | |
{ | |
v29 = (v29 + 1) >> 1; | |
goto LABEL_74; | |
} | |
LABEL_75: | |
if ( (unsigned int)(v29 + 1) > 0x10000 ) | |
return -1; | |
sub_4205C0(); | |
v30 = 16384; | |
v95 = 0; | |
v98 = 16384; | |
v31 = (*(_DWORD *)((v23 >> 3) + dword_4468F8) >> (v23 & 7)) & 0xFFFF; | |
v32 = v23 + 16 < 0; | |
v33 = v23 + 16; | |
dword_446998 = v33; | |
if ( !v32 ) | |
{ | |
sub_421030(); | |
v33 = dword_446998; | |
} | |
dword_273C9C4 = v31; | |
while ( 2 ) | |
{ | |
v34 = (*(_DWORD *)((v33 >> 3) + dword_4468F8) >> (v33 & 7)) & 1; | |
v35 = v33 + 1; | |
v100 = v34; | |
dword_446998 = v35; | |
if ( v35 >= 0 ) | |
{ | |
sub_421030(); | |
v35 = dword_446998; | |
} | |
v36 = (*(_DWORD *)((v35 >> 3) + dword_4468F8) >> (v35 & 7)) & 3; | |
v32 = v35 + 2 < 0; | |
v33 = v35 + 2; | |
dword_446998 = v33; | |
if ( !v32 ) | |
{ | |
sub_421030(); | |
v33 = dword_446998; | |
} | |
if ( !v36 ) | |
{ | |
v37 = -v33 & 7; | |
v32 = v37 + v33 < 0; | |
v38 = v37 + v33; | |
dword_446998 = v38; | |
if ( !v32 ) | |
{ | |
sub_421030(); | |
v38 = dword_446998; | |
} | |
v7 = (*(_DWORD *)((v38 >> 3) + dword_4468F8) >> (v38 & 7)) & 0xFFFF; | |
v32 = v38 + 16 < 0; | |
v39 = v38 + 16; | |
dword_446998 = v39; | |
if ( !v32 ) | |
{ | |
sub_421030(); | |
v39 = dword_446998; | |
} | |
v96 = v7; | |
v40 = (*(_DWORD *)((v39 >> 3) + dword_4468F8) >> (v39 & 7)) & 0xFFFF; | |
v32 = v39 + 16 < 0; | |
v33 = v39 + 16; | |
dword_446998 = v33; | |
if ( !v32 ) | |
{ | |
sub_421030(); | |
v33 = dword_446998; | |
} | |
if ( (v7 ^ v40) == 65535 ) | |
{ | |
if ( v7 ) | |
{ | |
do | |
{ | |
if ( v95 >= v30 ) | |
{ | |
sub_420970(v7, (signed int *)((char *)byte_43E7D8 + (((_WORD)v30 - 16384) & 0x7FFF)), 16384); | |
v30 += 16384; | |
v98 = v30; | |
if ( dword_446BB8 >= dword_457624 && dword_4469A4 < 2 ) | |
goto LABEL_186; | |
v33 = dword_446998; | |
} | |
v7 = (*(_DWORD *)((v33 >> 3) + dword_4468F8) >> (v33 & 7)) & 0xFF; | |
v32 = v33 + 8 < 0; | |
v33 += 8; | |
dword_446998 = v33; | |
if ( !v32 ) | |
{ | |
sub_421030(); | |
v33 = dword_446998; | |
} | |
v41 = v96-- == 1; | |
*((_BYTE *)byte_43E7D8 + (v95++ & 0x7FFF)) = v7; | |
} | |
while ( !v41 ); | |
} | |
goto LABEL_182; | |
} | |
return -1; | |
} | |
if ( v36 == 3 ) | |
goto LABEL_182; | |
if ( v36 == 1 ) | |
{ | |
memset32(dword_458730, 8, 0x90u); | |
memset32(&unk_458970, 9, 0x70u); | |
dword_458B30 = 7; | |
dword_458B34 = 7; | |
dword_458B38 = 7; | |
dword_458B3C = 7; | |
dword_458B40 = 7; | |
dword_458B44 = 7; | |
dword_458B48 = 7; | |
dword_458B4C = 7; | |
dword_458B50 = 7; | |
dword_458B54 = 7; | |
dword_458B58 = 7; | |
dword_458B5C = 7; | |
dword_458B60 = 7; | |
dword_458B64 = 7; | |
dword_458B68 = 7; | |
dword_458B6C = 7; | |
dword_458B70 = 7; | |
dword_458B74 = 7; | |
dword_458B78 = 7; | |
dword_458B7C = 7; | |
dword_458B80 = 7; | |
dword_458B84 = 7; | |
dword_458B88 = 7; | |
dword_458B8C = 7; | |
dword_458B90 = 8; | |
dword_458B94 = 8; | |
dword_458B98 = 8; | |
dword_458B9C = 8; | |
dword_458BA0 = 8; | |
dword_458BA4 = 8; | |
dword_458BA8 = 8; | |
dword_458BAC = 8; | |
v99 = 288; | |
v97 = 32; | |
dword_458BB0 = 5; | |
dword_458BB4 = 5; | |
dword_458BB8 = 5; | |
dword_458BBC = 5; | |
dword_458BC0 = 5; | |
dword_458BC4 = 5; | |
dword_458BC8 = 5; | |
dword_458BCC = 5; | |
dword_458BD0 = 5; | |
dword_458BD4 = 5; | |
dword_458BD8 = 5; | |
dword_458BDC = 5; | |
dword_458BE0 = 5; | |
dword_458BE4 = 5; | |
dword_458BE8 = 5; | |
dword_458BEC = 5; | |
dword_458BF0 = 5; | |
dword_458BF4 = 5; | |
dword_458BF8 = 5; | |
dword_458BFC = 5; | |
dword_458C00 = 5; | |
dword_458C04 = 5; | |
dword_458C08 = 5; | |
dword_458C0C = 5; | |
dword_458C10 = 5; | |
dword_458C14 = 5; | |
dword_458C18 = 5; | |
dword_458C1C = 5; | |
dword_458C20 = 5; | |
dword_458C24 = 5; | |
dword_458C28 = 5; | |
dword_458C2C = 5; | |
goto LABEL_144; | |
} | |
++dword_273C9CC; | |
v42 = (*(_DWORD *)((v33 >> 3) + dword_4468F8) >> (v33 & 7)) & 0x1F; | |
v32 = v33 + 5 < 0; | |
v43 = v33 + 5; | |
dword_446998 = v43; | |
if ( !v32 ) | |
{ | |
sub_421030(); | |
v43 = dword_446998; | |
} | |
v99 = v42 + 257; | |
v44 = (*(_DWORD *)((v43 >> 3) + dword_4468F8) >> (v43 & 7)) & 0x1F; | |
v32 = v43 + 5 < 0; | |
v45 = v43 + 5; | |
dword_446998 = v45; | |
if ( !v32 ) | |
{ | |
sub_421030(); | |
v45 = dword_446998; | |
} | |
v97 = v44 + 1; | |
v46 = (*(_DWORD *)((v45 >> 3) + dword_4468F8) >> (v45 & 7)) & 0xF; | |
v32 = v45 + 4 < 0; | |
v47 = v45 + 4; | |
dword_446998 = v47; | |
if ( !v32 ) | |
{ | |
sub_421030(); | |
v47 = dword_446998; | |
} | |
v48 = v46 + 4; | |
v49 = 0; | |
v50 = 0; | |
if ( v46 + 4 <= 0 ) | |
goto LABEL_191; | |
do | |
{ | |
v51 = (*(_DWORD *)((v47 >> 3) + dword_4468F8) >> (v47 & 7)) & 7; | |
v32 = v47 + 3 < 0; | |
v47 += 3; | |
dword_446998 = v47; | |
if ( !v32 ) | |
{ | |
sub_421030(); | |
v47 = dword_446998; | |
v49 = 0; | |
} | |
v52 = dword_43D218[v50++]; | |
dword_4467E8[v52] = v51; | |
} | |
while ( v50 < v48 ); | |
if ( v50 < 19 ) | |
{ | |
LABEL_191: | |
v53 = (signed int)&dword_43D218[v50]; | |
do | |
{ | |
v54 = *(_DWORD *)v53; | |
v53 += 4; | |
dword_4467E8[v54] = v49; | |
} | |
while ( v53 < (signed int)&dword_43D264 ); | |
} | |
v55 = 30; | |
do | |
{ | |
--v55; | |
v102[v55] = v49; | |
} | |
while ( v55 ); | |
v56 = (signed int)&unk_446830; | |
do | |
{ | |
++*(&v101 + *(_DWORD *)v56); | |
v56 -= 4; | |
} | |
while ( v56 >= (signed int)dword_4467E8 ); | |
dword_446908[0] = v49; | |
v101 = v49; | |
v57 = 0; | |
do | |
{ | |
v58 = dword_446908[v57] + *(int *)((char *)&v101 + v57 * 4); | |
++v57; | |
dword_446908[v57] = v58; | |
} | |
while ( v57 < 31 ); | |
v59 = 0; | |
do | |
{ | |
v60 = dword_4467E8[v59]; | |
if ( v60 != v49 ) | |
{ | |
v61 = dword_446908[v60]; | |
dword_458C30[v61] = v59; | |
dword_446908[v60] = v61 + 1; | |
v49 = 0; | |
} | |
++v59; | |
} | |
while ( v59 < 19 ); | |
v7 = 0; | |
if ( v99 + v97 > v49 ) | |
{ | |
do | |
{ | |
v62 = sub_421120((int)dword_458C30, (int)dword_446908); | |
if ( v62 >= 16 ) | |
{ | |
if ( v62 == 16 ) | |
{ | |
v63 = (*(_DWORD *)((dword_446998 >> 3) + dword_4468F8) >> (dword_446998 & 7)) & 3; | |
dword_446998 += 2; | |
if ( dword_446998 >= 0 ) | |
sub_421030(); | |
v64 = v63 + 3; | |
if ( v63 != -3 ) | |
{ | |
memcpy(&dword_458730[v7], &dword_458730[v7 - 1], 4 * v64); | |
v7 += v64; | |
} | |
} | |
else | |
{ | |
if ( v62 == 17 ) | |
{ | |
v65 = (*(_DWORD *)((dword_446998 >> 3) + dword_4468F8) >> (dword_446998 & 7)) & 7; | |
dword_446998 += 3; | |
if ( dword_446998 >= 0 ) | |
sub_421030(); | |
v66 = v65 + 3; | |
} | |
else | |
{ | |
v67 = (*(_DWORD *)((dword_446998 >> 3) + dword_4468F8) >> (dword_446998 & 7)) & 0x7F; | |
dword_446998 += 7; | |
if ( dword_446998 >= 0 ) | |
sub_421030(); | |
v66 = v67 + 11; | |
} | |
if ( v66 ) | |
{ | |
memset(&dword_458730[v7], 0, 4 * v66); | |
v7 += v66; | |
} | |
} | |
} | |
else | |
{ | |
dword_458730[v7++] = v62; | |
} | |
} | |
while ( v7 < v99 + v97 ); | |
LABEL_144: | |
v49 = 0; | |
} | |
v68 = 30; | |
do | |
{ | |
--v68; | |
v102[v68] = v49; | |
} | |
while ( v68 ); | |
v69 = v99 - 1; | |
if ( v99 - 1 >= v49 ) | |
{ | |
do | |
++*(&v101 + dword_458730[v69--]); | |
while ( v69 >= 0 ); | |
} | |
dword_446908[0] = v49; | |
v101 = v49; | |
v70 = 0; | |
do | |
{ | |
v71 = dword_446908[v70] + *(int *)((char *)&v101 + v70 * 4); | |
++v70; | |
dword_446908[v70] = v71; | |
} | |
while ( v70 < 31 ); | |
v72 = 0; | |
if ( v99 > v49 ) | |
{ | |
do | |
{ | |
v73 = dword_458730[v72]; | |
if ( v73 != v49 ) | |
{ | |
v74 = dword_446908[v73]; | |
dword_458C30[v74] = v72; | |
dword_446908[v73] = v74 + 1; | |
v49 = 0; | |
} | |
++v72; | |
} | |
while ( v72 < v99 ); | |
} | |
sub_420F50(dword_446908, (int)dword_458C30, (int)dword_446BC0, (int)byte_4469B8, 9); | |
sub_420860((int)&dword_458730[v99], (int)&unk_457598, v97, (int)&unk_446838); | |
sub_420F50(&unk_457598, (int)&unk_446838, (int)dword_458628, (int)byte_4468B8, 6); | |
v33 = dword_446998; | |
while ( 2 ) | |
{ | |
v75 = v98; | |
v76 = v95; | |
while ( 2 ) | |
{ | |
if ( v76 >= v75 ) | |
{ | |
sub_420970(v7, (signed int *)((char *)byte_43E7D8 + (((_WORD)v75 - 16384) & 0x7FFF)), 16384); | |
v75 += 16384; | |
v98 = v75; | |
if ( dword_446BB8 >= dword_457624 && dword_4469A4 < 2 ) | |
goto LABEL_186; | |
v33 = dword_446998; | |
} | |
v77 = (*(_DWORD *)((v33 >> 3) + dword_4468F8) >> (v33 & 7)) & 0x1FF; | |
v78 = byte_4469B8[v77]; | |
if ( v78 ) | |
{ | |
v7 = dword_446BC0[v77]; | |
v32 = (unsigned __int8)v78 + v33 < 0; | |
v33 += (unsigned __int8)v78; | |
dword_446998 = v33; | |
if ( !v32 ) | |
{ | |
sub_421030(); | |
goto LABEL_165; | |
} | |
} | |
else | |
{ | |
v7 = sub_421120((int)dword_458C30, (int)dword_446908); | |
LABEL_165: | |
v33 = dword_446998; | |
} | |
if ( v7 < 256 ) | |
{ | |
v79 = v76++ & 0x7FFF; | |
*((_BYTE *)byte_43E7D8 + v79) = v7; | |
v95 = v76; | |
continue; | |
} | |
break; | |
} | |
if ( v7 != 256 ) | |
{ | |
v80 = dword_456CA8[2 * v7]; | |
v81 = dword_4388F0[v80] & (*(_DWORD *)((v33 >> 3) + dword_4468F8) >> (v33 & 7)); | |
v32 = v80 + v33 < 0; | |
v82 = v80 + v33; | |
dword_446998 = v82; | |
if ( !v32 ) | |
{ | |
sub_421030(); | |
v82 = dword_446998; | |
} | |
v83 = v81 + dword_456CAC[2 * v7]; | |
v84 = (*(_DWORD *)((v82 >> 3) + dword_4468F8) >> (v82 & 7)) & 0x3F; | |
v85 = byte_4468B8[v84]; | |
if ( v85 ) | |
{ | |
v86 = dword_458628[v84]; | |
v32 = (unsigned __int8)v85 + v82 < 0; | |
v87 = (unsigned __int8)v85 + v82; | |
dword_446998 = v87; | |
if ( !v32 ) | |
{ | |
sub_421030(); | |
goto LABEL_175; | |
} | |
} | |
else | |
{ | |
v86 = sub_421120((int)&unk_446838, (int)&unk_457598); | |
LABEL_175: | |
v87 = dword_446998; | |
} | |
v88 = dword_4573C0[2 * v86]; | |
v89 = dword_4388F0[v88] & (*(_DWORD *)((v87 >> 3) + dword_4468F8) >> (v87 & 7)); | |
v32 = v88 + v87 < 0; | |
v33 = v88 + v87; | |
dword_446998 = v33; | |
if ( !v32 ) | |
{ | |
sub_421030(); | |
v33 = dword_446998; | |
} | |
v90 = v95; | |
v91 = v95 + v83; | |
v92 = v95 - (v89 + dword_4573C4[2 * v86]); | |
do | |
{ | |
v93 = *((_BYTE *)byte_43E7D8 + (v92 & 0x7FFF)); | |
v7 = v90++ & 0x7FFF; | |
++v92; | |
*((_BYTE *)byte_43E7D8 + v7) = v93; | |
} | |
while ( v90 < v91 ); | |
v95 = v90; | |
continue; | |
} | |
break; | |
} | |
v30 = v98; | |
LABEL_182: | |
if ( !v100 ) | |
continue; | |
break; | |
} | |
v94 = v30 - 16384; | |
if ( (v95 ^ v94) & 0x8000 ) | |
{ | |
sub_420970(v7, (signed int *)((char *)byte_43E7D8 + (v94 & 0x7FFF)), -v94 & 0x7FFF); | |
sub_420970(v7, byte_43E7D8, v95 & 0x7FFF); | |
} | |
else | |
{ | |
sub_420970(v7, (signed int *)((char *)byte_43E7D8 + (v94 & 0x7FFF)), v95 - v94); | |
} | |
LABEL_186: | |
if ( byte_273C9D0 == 4 ) | |
dword_273C9C0 = 0; | |
return 0; | |
} | |
// 4388F0: using guessed type int dword_4388F0[]; | |
// 43D218: using guessed type int dword_43D218[]; | |
// 43D264: using guessed type int dword_43D264; | |
// 43E7D4: using guessed type int dword_43E7D4; | |
// 4467E0: using guessed type int dword_4467E0; | |
// 4467E8: using guessed type int dword_4467E8[]; | |
// 4468F8: using guessed type int dword_4468F8; | |
// 446908: using guessed type int dword_446908[]; | |
// 446988: using guessed type int dword_446988[]; | |
// 44698C: using guessed type int dword_44698C; | |
// 446990: using guessed type int dword_446990; | |
// 446994: using guessed type int dword_446994; | |
// 446998: using guessed type int dword_446998; | |
// 4469A4: using guessed type int dword_4469A4; | |
// 4469AC: using guessed type int dword_4469AC; | |
// 4469B4: using guessed type int dword_4469B4; | |
// 446BB8: using guessed type int dword_446BB8; | |
// 446BC0: using guessed type int dword_446BC0[]; | |
// 456CA8: using guessed type int dword_456CA8[]; | |
// 456CAC: using guessed type int dword_456CAC[]; | |
// 4573C0: using guessed type int dword_4573C0[]; | |
// 4573C4: using guessed type int dword_4573C4[]; | |
// 457618: using guessed type int dword_457618; | |
// 45761C: using guessed type int dword_45761C; | |
// 457620: using guessed type int dword_457620; | |
// 457624: using guessed type int dword_457624; | |
// 458628: using guessed type int dword_458628[]; | |
// 458730: using guessed type int dword_458730[]; | |
// 458B30: using guessed type int dword_458B30; | |
// 458B34: using guessed type int dword_458B34; | |
// 458B38: using guessed type int dword_458B38; | |
// 458B3C: using guessed type int dword_458B3C; | |
// 458B40: using guessed type int dword_458B40; | |
// 458B44: using guessed type int dword_458B44; | |
// 458B48: using guessed type int dword_458B48; | |
// 458B4C: using guessed type int dword_458B4C; | |
// 458B50: using guessed type int dword_458B50; | |
// 458B54: using guessed type int dword_458B54; | |
// 458B58: using guessed type int dword_458B58; | |
// 458B5C: using guessed type int dword_458B5C; | |
// 458B60: using guessed type int dword_458B60; | |
// 458B64: using guessed type int dword_458B64; | |
// 458B68: using guessed type int dword_458B68; | |
// 458B6C: using guessed type int dword_458B6C; | |
// 458B70: using guessed type int dword_458B70; | |
// 458B74: using guessed type int dword_458B74; | |
// 458B78: using guessed type int dword_458B78; | |
// 458B7C: using guessed type int dword_458B7C; | |
// 458B80: using guessed type int dword_458B80; | |
// 458B84: using guessed type int dword_458B84; | |
// 458B88: using guessed type int dword_458B88; | |
// 458B8C: using guessed type int dword_458B8C; | |
// 458B90: using guessed type int dword_458B90; | |
// 458B94: using guessed type int dword_458B94; | |
// 458B98: using guessed type int dword_458B98; | |
// 458B9C: using guessed type int dword_458B9C; | |
// 458BA0: using guessed type int dword_458BA0; | |
// 458BA4: using guessed type int dword_458BA4; | |
// 458BA8: using guessed type int dword_458BA8; | |
// 458BAC: using guessed type int dword_458BAC; | |
// 458BB0: using guessed type int dword_458BB0; | |
// 458BB4: using guessed type int dword_458BB4; | |
// 458BB8: using guessed type int dword_458BB8; | |
// 458BBC: using guessed type int dword_458BBC; | |
// 458BC0: using guessed type int dword_458BC0; | |
// 458BC4: using guessed type int dword_458BC4; | |
// 458BC8: using guessed type int dword_458BC8; | |
// 458BCC: using guessed type int dword_458BCC; | |
// 458BD0: using guessed type int dword_458BD0; | |
// 458BD4: using guessed type int dword_458BD4; | |
// 458BD8: using guessed type int dword_458BD8; | |
// 458BDC: using guessed type int dword_458BDC; | |
// 458BE0: using guessed type int dword_458BE0; | |
// 458BE4: using guessed type int dword_458BE4; | |
// 458BE8: using guessed type int dword_458BE8; | |
// 458BEC: using guessed type int dword_458BEC; | |
// 458BF0: using guessed type int dword_458BF0; | |
// 458BF4: using guessed type int dword_458BF4; | |
// 458BF8: using guessed type int dword_458BF8; | |
// 458BFC: using guessed type int dword_458BFC; | |
// 458C00: using guessed type int dword_458C00; | |
// 458C04: using guessed type int dword_458C04; | |
// 458C08: using guessed type int dword_458C08; | |
// 458C0C: using guessed type int dword_458C0C; | |
// 458C10: using guessed type int dword_458C10; | |
// 458C14: using guessed type int dword_458C14; | |
// 458C18: using guessed type int dword_458C18; | |
// 458C1C: using guessed type int dword_458C1C; | |
// 458C20: using guessed type int dword_458C20; | |
// 458C24: using guessed type int dword_458C24; | |
// 458C28: using guessed type int dword_458C28; | |
// 458C2C: using guessed type int dword_458C2C; | |
// 458C30: using guessed type int dword_458C30[]; | |
// 4590B0: using guessed type int dword_4590B0; | |
// 4590B4: using guessed type int dword_4590B4; | |
// 4590C4: using guessed type int dword_4590C4; | |
// 468468: using guessed type char byte_468468; | |
// 273C5C0: using guessed type int dword_273C5C0[]; | |
// 273C9C0: using guessed type int dword_273C9C0; | |
// 273C9C4: using guessed type int dword_273C9C4; | |
// 273C9C8: using guessed type char byte_273C9C8; | |
// 273C9CC: using guessed type int dword_273C9CC; | |
// 273C9D0: using guessed type char byte_273C9D0; | |
// 273C9D4: using guessed type int dword_273C9D4; | |
// 421180: using guessed type int var_78[30]; | |
//----- (00422060) -------------------------------------------------------- | |
void __usercall sub_422060(int a1<eax>, void **a2, int a3, int a4) | |
{ | |
FILE *v4; // edi@1 | |
int v5; // ebp@1 | |
__int32 v6; // eax@1 | |
size_t v7; // ebx@1 | |
void *v8; // eax@1 | |
int v9; // esi@1 | |
int v10; // eax@3 | |
v4 = (FILE *)a1; | |
v5 = 4 * a3; | |
v6 = _filelength(*(_DWORD *)(a1 + 16)); | |
v7 = v6; | |
v8 = malloc(v6); | |
v9 = (int)v8; | |
if ( v8 ) | |
{ | |
fread(v8, v7, 1u, v4); | |
fclose(v4); | |
v10 = (int)malloc(a4 * v5); | |
*a2 = (void *)v10; | |
if ( v10 && sub_421180(v9, v10, v5, a3, a4) < 0 ) | |
{ | |
free((void *)v9); | |
free(*a2); | |
*a2 = 0; | |
} | |
else | |
{ | |
free((void *)v9); | |
} | |
} | |
else | |
{ | |
fclose(v4); | |
} | |
} | |
//----- (00422100) -------------------------------------------------------- | |
int __thiscall sub_422100(void *this, float a2) | |
{ | |
int v2; // edx@1 | |
int result; // eax@1 | |
int v4; // ecx@1 | |
v2 = dword_283CD18; | |
result = 21 * dword_283CD18; | |
dword_283D090[21 * dword_283CD18] = dword_273CA24; | |
flt_283D088[result] = a2; | |
dword_283D08C[result] = (int)this; | |
v4 = 245 * (_DWORD)this; | |
flt_283D040[result] = flt_468720[v4]; | |
flt_283D044[result] = flt_468724[v4]; | |
flt_283D048[result] = flt_468728[v4]; | |
dword_283CD18 = v2 + 1; | |
flt_283D04C[result] = 0.1; | |
flt_283D050[result] = 0.0; | |
flt_283D054[result] = 0.0; | |
flt_283D058[result] = 0.0; | |
flt_283D05C[result] = 0.1; | |
flt_283D060[result] = 0.0; | |
flt_283D064[result] = 0.0; | |
flt_283D068[result] = 0.0; | |
flt_283D06C[result] = 0.1; | |
*(float *)&dword_283D070[result] = flt_468750[v4] * 0.800000011920929 + flt_46872C[v4]; | |
*(float *)&dword_283D074[result] = flt_468754[v4] * 0.800000011920929 + flt_468730[v4]; | |
*(float *)&dword_283D078[result] = 0.800000011920929 * *(float *)&dword_468758[v4] + flt_468734[v4]; | |
return result * 4; | |
} | |
// 468720: using guessed type float flt_468720[]; | |
// 468724: using guessed type float flt_468724[]; | |
// 468728: using guessed type float flt_468728[]; | |
// 46872C: using guessed type float flt_46872C[]; | |
// 468730: using guessed type float flt_468730[]; | |
// 468734: using guessed type float flt_468734[]; | |
// 468750: using guessed type float flt_468750[]; | |
// 468754: using guessed type float flt_468754[]; | |
// 468758: using guessed type int dword_468758[]; | |
// 273CA24: using guessed type int dword_273CA24; | |
// 283CD18: using guessed type int dword_283CD18; | |
// 283D040: using guessed type float flt_283D040[]; | |
// 283D044: using guessed type float flt_283D044[]; | |
// 283D048: using guessed type float flt_283D048[]; | |
// 283D04C: using guessed type float flt_283D04C[]; | |
// 283D050: using guessed type float flt_283D050[]; | |
// 283D054: using guessed type float flt_283D054[]; | |
// 283D058: using guessed type float flt_283D058[]; | |
// 283D05C: using guessed type float flt_283D05C[]; | |
// 283D060: using guessed type float flt_283D060[]; | |
// 283D064: using guessed type float flt_283D064[]; | |
// 283D068: using guessed type float flt_283D068[]; | |
// 283D06C: using guessed type float flt_283D06C[]; | |
// 283D070: using guessed type int dword_283D070[]; | |
// 283D074: using guessed type int dword_283D074[]; | |
// 283D078: using guessed type int dword_283D078[]; | |
// 283D088: using guessed type float flt_283D088[]; | |
// 283D08C: using guessed type int dword_283D08C[]; | |
// 283D090: using guessed type int dword_283D090[]; | |
//----- (004221F0) -------------------------------------------------------- | |
int __usercall sub_4221F0<eax>(int a1<eax>, float a2, float a3, float a4) | |
{ | |
int v4; // eax@1 | |
double v5; // st6@1 | |
double v6; // st7@1 | |
double v7; // st6@1 | |
double v8; // st7@1 | |
double v9; // st7@2 | |
int result; // eax@5 | |
float v11; // [sp+4h] [bp+4h]@1 | |
float v12; // [sp+4h] [bp+4h]@1 | |
float v13; // [sp+4h] [bp+4h]@1 | |
float v14; // [sp+4h] [bp+4h]@1 | |
float v15; // [sp+4h] [bp+4h]@1 | |
float v16; // [sp+8h] [bp+8h]@1 | |
float v17; // [sp+8h] [bp+8h]@1 | |
float v18; // [sp+8h] [bp+8h]@1 | |
float v19; // [sp+Ch] [bp+Ch]@1 | |
float v20; // [sp+Ch] [bp+Ch]@1 | |
v4 = 245 * a1; | |
v11 = a2 - flt_468720[v4]; | |
v16 = a3 - flt_468724[v4]; | |
v19 = a4 - flt_468728[v4]; | |
v5 = v11; | |
v6 = v16; | |
v12 = *(float *)&dword_468758[v4] * v19 + flt_468754[v4] * v16 + flt_468750[v4] * v11; | |
v13 = 1.0 / v12; | |
v17 = flt_468738[v4] * v5 + flt_46873C[v4] * v16 + flt_468740[v4] * v19; | |
v18 = v17 * v13; | |
v7 = v6 * flt_468748[v4] + v5 * flt_468744[v4] + v19 * flt_46874C[v4]; | |
v8 = v13; | |
v14 = v7; | |
v20 = v14 * v8; | |
v15 = v8 * 1.200000047683716; | |
if ( v18 - v15 >= 0.0 ) | |
{ | |
result = 0; | |
} | |
else | |
{ | |
v9 = v15; | |
if ( v18 + v15 <= 0.0 ) | |
result = 0; | |
else | |
result = v20 - v9 < 0.0 && v9 + v20 > 0.0; | |
} | |
return result; | |
} | |
// 468720: using guessed type float flt_468720[]; | |
// 468724: using guessed type float flt_468724[]; | |
// 468728: using guessed type float flt_468728[]; | |
// 468738: using guessed type float flt_468738[]; | |
// 46873C: using guessed type float flt_46873C[]; | |
// 468740: using guessed type float flt_468740[]; | |
// 468744: using guessed type float flt_468744[]; | |
// 468748: using guessed type float flt_468748[]; | |
// 46874C: using guessed type float flt_46874C[]; | |
// 468750: using guessed type float flt_468750[]; | |
// 468754: using guessed type float flt_468754[]; | |
// 468758: using guessed type int dword_468758[]; | |
//----- (00422360) -------------------------------------------------------- | |
signed int __usercall sub_422360<eax>(int a1<edi>, int a2<esi>) | |
{ | |
float v2; // eax@1 | |
float v3; // ecx@1 | |
float v4; // edx@1 | |
double v5; // st7@1 | |
float v6; // ST14_4@1 | |
float v7; // ST14_4@1 | |
signed int v8; // ebp@1 | |
signed int v9; // ebx@1 | |
signed int result; // eax@8 | |
float v11; // [sp+14h] [bp-18h]@1 | |
float v12; // [sp+18h] [bp-14h]@1 | |
float v13; // [sp+1Ch] [bp-10h]@1 | |
signed int v14; // [sp+24h] [bp-8h]@1 | |
LODWORD(v2) = *(_DWORD *)a2; | |
LODWORD(v3) = *(_DWORD *)(a2 + 4); | |
LODWORD(v4) = *(_DWORD *)(a2 + 8); | |
v5 = flt_273C9E0; | |
*(float *)(a1 + 8) = *(float *)(a1 + 8) + flt_273C9E0; | |
v11 = v2; | |
v12 = v3; | |
v13 = v4; | |
v6 = v5 * 32.0; | |
*(float *)a2 = *(float *)a1 * v6 + *(float *)a2; | |
*(float *)(a2 + 4) = v6 * *(float *)(a1 + 4) + *(float *)(a2 + 4); | |
v7 = v6 * *(float *)(a1 + 8) + *(float *)(a2 + 8); | |
*(float *)(a2 + 8) = v7; | |
v8 = (signed int)floor(*(float *)a2); | |
v14 = (signed int)floor(*(float *)(a2 + 4)); | |
v9 = (signed int)floor(v7); | |
if ( sub_416F00(v14, v9, v8) ) | |
{ | |
if ( v9 == (signed int)floor(v13) ) | |
{ | |
if ( v8 == (signed int)floor(v11) ) | |
{ | |
if ( v14 != (signed int)floor(v12) ) | |
*(float *)(a1 + 4) = -*(float *)(a1 + 4); | |
} | |
else | |
{ | |
*(float *)a1 = -*(float *)a1; | |
} | |
} | |
else | |
{ | |
*(float *)(a1 + 8) = -*(float *)(a1 + 8); | |
} | |
*(_DWORD *)a2 = LODWORD(v11); | |
*(_DWORD *)(a2 + 4) = LODWORD(v12); | |
*(_DWORD *)(a2 + 8) = LODWORD(v13); | |
result = 1; | |
*(float *)a1 = *(float *)a1 * 0.5; | |
*(float *)(a1 + 4) = *(float *)(a1 + 4) * 0.5; | |
*(float *)(a1 + 8) = 0.5 * *(float *)(a1 + 8); | |
} | |
else | |
{ | |
result = 0; | |
} | |
return result; | |
} | |
// 273C9E0: using guessed type float flt_273C9E0; | |
//----- (004224D0) -------------------------------------------------------- | |
signed int __usercall sub_4224D0<eax>(const char *a1<edi>) | |
{ | |
FILE *v1; // eax@1 | |
FILE *v2; // esi@1 | |
char v4; // [sp+4h] [bp-30h]@3 | |
char v5; // [sp+14h] [bp-20h]@2 | |
v1 = fopen("config.ini", "r"); | |
v2 = v1; | |
if ( !v1 ) | |
return 0; | |
if ( !fgets(&v5, 64, v1) ) | |
{ | |
LABEL_6: | |
fclose(v2); | |
return 0; | |
} | |
while ( sscanf(&v5, "%s %s", &v4, PathName) != 2 || strcmp(&v4, a1) ) | |
{ | |
if ( !fgets(&v5, 64, v2) ) | |
goto LABEL_6; | |
} | |
fclose(v2); | |
return 1; | |
} | |
//----- (00422650) -------------------------------------------------------- | |
int __cdecl sub_422650() | |
{ | |
double v0; // st7@1 | |
signed int v1; // ecx@1 | |
double v2; // st6@1 | |
int v3; // eax@1 | |
double v4; // qt0@2 | |
double v5; // qt1@4 | |
double v6; // st6@4 | |
double v7; // st7@4 | |
double v8; // qt2@5 | |
int result; // eax@7 | |
v0 = 0.2; | |
v1 = 0; | |
v2 = 0.30000001; | |
v3 = (int)flt_283D06C; | |
while ( 1 ) | |
{ | |
*(_DWORD *)(v3 + 32) = -1; | |
if ( v1 >= 2 ) | |
{ | |
*(float *)v3 = v2; | |
*(float *)(v3 - 16) = v2; | |
*(float *)(v3 - 32) = v2; | |
v8 = v2; | |
v6 = v0; | |
v7 = v8; | |
} | |
else | |
{ | |
v5 = v2; | |
v6 = v0; | |
v7 = v5; | |
*(float *)v3 = v6; | |
*(float *)(v3 - 16) = v6; | |
*(float *)(v3 - 32) = v6; | |
} | |
v3 += 84; | |
++v1; | |
if ( (_UNKNOWN *)v3 == &unk_283D1BC ) | |
break; | |
v4 = v6; | |
v2 = v7; | |
v0 = v4; | |
} | |
dword_283D090[0] = dword_273CA60; | |
result = dword_273CA6C; | |
dword_283D0E4 = dword_273CA64; | |
dword_283D138 = dword_273CA68; | |
dword_283D18C = dword_273CA6C; | |
dword_283CD18 = 4; | |
return result; | |
} | |
// 273CA60: using guessed type int dword_273CA60; | |
// 273CA64: using guessed type int dword_273CA64; | |
// 273CA68: using guessed type int dword_273CA68; | |
// 273CA6C: using guessed type int dword_273CA6C; | |
// 283CD18: using guessed type int dword_283CD18; | |
// 283D06C: using guessed type float flt_283D06C[]; | |
// 283D090: using guessed type int dword_283D090[]; | |
// 283D0E4: using guessed type int dword_283D0E4; | |
// 283D138: using guessed type int dword_283D138; | |
// 283D18C: using guessed type int dword_283D18C; | |
//----- (004226D0) -------------------------------------------------------- | |
signed int __cdecl sub_4226D0() | |
{ | |
int v0; // edi@1 | |
signed int result; // eax@1 | |
signed int v2; // esi@2 | |
signed int v3; // ebx@2 | |
int v4; // eax@3 | |
signed int v5; // ecx@3 | |
int v6; // edx@7 | |
int v7; // eax@8 | |
v0 = 0; | |
result = (signed int)dword_4F1F80; | |
do | |
{ | |
v2 = result; | |
v3 = 512; | |
do | |
{ | |
v4 = *(_DWORD *)v2; | |
v5 = *(_BYTE *)(*(_DWORD *)v2 + 1); | |
if ( v5 < *(_BYTE *)(*(_DWORD *)v2 + 1) ) | |
{ | |
LABEL_7: | |
v6 = *(_BYTE *)(v4 + 3); | |
if ( v5 >= v6 ) | |
v7 = 0; | |
else | |
v7 = v4 + 4 * (v5 - v6); | |
} | |
else | |
{ | |
while ( v5 > *(_BYTE *)(v4 + 2) && *(_BYTE *)v4 ) | |
{ | |
v4 += 4 * *(_BYTE *)v4; | |
if ( v5 < *(_BYTE *)(v4 + 1) ) | |
goto LABEL_7; | |
} | |
v7 = v4 + 4 * (v5 - *(_BYTE *)(v4 + 1)) + 4; | |
} | |
dword_273CB60[v0] = *(_DWORD *)v7 | 0xFF000000; | |
v2 += 4; | |
++v0; | |
--v3; | |
} | |
while ( v3 ); | |
result = v2; | |
} | |
while ( v2 < (signed int)&dword_5F1F80 ); | |
return result; | |
} | |
// 4F1F80: using guessed type int dword_4F1F80[]; | |
// 5F1F80: using guessed type int dword_5F1F80; | |
// 273CB60: using guessed type int dword_273CB60[]; | |
//----- (00422760) -------------------------------------------------------- | |
int __cdecl sub_422760() | |
{ | |
int result; // eax@1 | |
dword_2848708 = 3; | |
dword_283CD30 = 3; | |
dword_283CD14 = dword_283CF2C; | |
result = 0; | |
dword_283CD20 = 25; | |
dword_283CD24 = 10; | |
dword_283CD28 = 40; | |
dword_283CD2C = 2; | |
dword_283CD1C = dword_2848700 + 500; | |
dword_28485E4 = 0; | |
dword_273CA7C = 0; | |
dword_283CF14 = 100; | |
dword_273CA74 = 0; | |
dword_28465C0 = 0; | |
return result; | |
} | |
// 273CA74: using guessed type int dword_273CA74; | |
// 273CA7C: using guessed type int dword_273CA7C; | |
// 283CD14: using guessed type int dword_283CD14; | |
// 283CD1C: using guessed type int dword_283CD1C; | |
// 283CD20: using guessed type int dword_283CD20; | |
// 283CD24: using guessed type int dword_283CD24; | |
// 283CD28: using guessed type int dword_283CD28; | |
// 283CD2C: using guessed type int dword_283CD2C; | |
// 283CD30: using guessed type int dword_283CD30; | |
// 283CF14: using guessed type int dword_283CF14; | |
// 283CF2C: using guessed type int dword_283CF2C; | |
// 28465C0: using guessed type int dword_28465C0; | |
// 28485E4: using guessed type int dword_28485E4; | |
// 2848700: using guessed type int dword_2848700; | |
// 2848708: using guessed type int dword_2848708; | |
//----- (004227E0) -------------------------------------------------------- | |
char *__cdecl sub_4227E0() | |
{ | |
int v0; // ecx@1 | |
unsigned __int8 v1; // bl@2 | |
signed int v2; // esi@2 | |
int v3; // eax@3 | |
signed int v4; // esi@4 | |
char v5; // al@5 | |
char v6; // al@7 | |
signed int v7; // ecx@7 | |
char v8; // bl@9 | |
signed int v9; // eax@9 | |
signed int v10; // edx@18 | |
signed int v11; // ecx@19 | |
int v12; // eax@19 | |
int v13; // esi@28 | |
signed int v14; // edx@28 | |
signed int v15; // ecx@29 | |
signed int v16; // eax@29 | |
signed int v17; // edi@42 | |
int v18; // ecx@43 | |
signed int v19; // eax@43 | |
int v20; // edx@44 | |
char *v21; // esi@44 | |
char *v22; // edx@47 | |
signed int v23; // edx@49 | |
int v24; // ecx@50 | |
char *result; // eax@50 | |
int v26; // ecx@53 | |
unsigned __int8 v27; // [sp+10h] [bp-24h]@2 | |
unsigned __int8 v28; // [sp+10h] [bp-24h]@9 | |
unsigned __int8 v29; // [sp+11h] [bp-23h]@2 | |
char v30; // [sp+12h] [bp-22h]@2 | |
char v31; // [sp+13h] [bp-21h]@2 | |
char v32; // [sp+14h] [bp-20h]@2 | |
signed int v33; // [sp+18h] [bp-1Ch]@1 | |
int v34; // [sp+18h] [bp-1Ch]@7 | |
int v35; // [sp+1Ch] [bp-18h]@1 | |
int v36; // [sp+20h] [bp-14h]@1 | |
int v37; // [sp+24h] [bp-10h]@1 | |
int v38; // [sp+28h] [bp-Ch]@1 | |
int v39; // [sp+2Ch] [bp-8h]@1 | |
int v40; // [sp+30h] [bp-4h]@1 | |
v0 = 0; | |
v35 = -8421505; | |
v36 = 2147418112; | |
v37 = (int)&unk_FFFF00; | |
v38 = 65280; | |
v39 = 65535; | |
v40 = -16711681; | |
v33 = 0; | |
do | |
{ | |
v1 = *((_BYTE *)&v35 + v33); | |
v29 = *((_BYTE *)&v35 + v33 + 1); | |
v27 = *((_BYTE *)&v35 + v33 + 2); | |
v30 = v27 >> 3; | |
v31 = v29 >> 3; | |
v2 = 4; | |
v32 = v1 >> 3; | |
do | |
{ | |
BYTE3(dword_283CF20[v0++]) = 0; | |
byte_283CF1C[4 * v0] = v27 / v2 - v30; | |
byte_283CF1D[4 * v0] = v29 / v2 - v31; | |
v3 = v1 / v2--; | |
byte_283CF1E[4 * v0] = v3 - v32; | |
} | |
while ( v2 ); | |
v4 = 4; | |
do | |
{ | |
BYTE3(dword_283CF20[v0++]) = 0; | |
byte_283CF1C[4 * v0] = v27 + (unsigned __int8)(-1 - v27) / v4 - v30; | |
byte_283CF1D[4 * v0] = v29 + (unsigned __int8)(-1 - v29) / v4 - v31; | |
v5 = (unsigned __int8)(-1 - v1) / v4-- - v32; | |
byte_283CF1E[4 * v0] = v1 + v5; | |
} | |
while ( v4 ); | |
v33 += 3; | |
} | |
while ( v33 < 24 ); | |
v6 = 0; | |
v34 = 0; | |
v7 = (signed int)&unk_28425C0; | |
while ( 1 ) | |
{ | |
v8 = v6 & 7; | |
v28 = v6 & 0xF8; | |
v9 = 0; | |
do | |
{ | |
if ( v9 & 7 && (v9 & 7) != 7 && v8 && v8 != 7 ) | |
*(_DWORD *)v7 = dword_283CF20[v28 + (v9 >> 3)] | 0xFF000000; | |
else | |
*(_DWORD *)v7 = 0; | |
++v9; | |
v7 += 4; | |
} | |
while ( v9 < 64 ); | |
++v34; | |
if ( v7 >= (signed int)&dword_28465C0 ) | |
break; | |
v6 = v34; | |
} | |
v10 = 0; | |
do | |
{ | |
v11 = 0; | |
v12 = 8 * v10; | |
do | |
{ | |
if ( v11 && v11 != 7 && v10 && v10 != 7 ) | |
{ | |
dword_283CDC0[v12] = 0; | |
dword_2848600[v12] = 0; | |
} | |
else | |
{ | |
dword_283CDC0[v12] = -16777216; | |
dword_2848600[v12] = -1; | |
} | |
++v11; | |
++v12; | |
} | |
while ( v11 < 8 ); | |
++v10; | |
} | |
while ( v10 < 8 ); | |
v13 = 0; | |
v14 = 0; | |
do | |
{ | |
v15 = 0; | |
v16 = v14; | |
do | |
{ | |
if ( v15 && v15 != 6 && v13 && v14 != 168 ) | |
{ | |
*(int *)((char *)&dword_2848800 + v16) = 0; | |
*(int *)((char *)&dword_283CB60 + v16) = 0; | |
} | |
else | |
{ | |
*(int *)((char *)&dword_2848800 + v16) = -16776961; | |
*(int *)((char *)&dword_283CB60 + v16) = -16711936; | |
} | |
if ( v15 == 3 || v14 == 84 ) | |
{ | |
*(int *)((char *)&dword_273CA80 + v16) = -16776961; | |
*(int *)((char *)&dword_2848720 + v16) = -16711936; | |
} | |
else | |
{ | |
*(int *)((char *)&dword_273CA80 + v16) = 0; | |
*(int *)((char *)&dword_2848720 + v16) = 0; | |
} | |
++v15; | |
v16 += 4; | |
} | |
while ( v15 < 7 ); | |
v14 += 28; | |
++v13; | |
} | |
while ( v14 < 196 ); | |
v17 = 0; | |
do | |
{ | |
v18 = 3; | |
v19 = abs(v17 - 3); | |
if ( v19 > 3 ) | |
goto LABEL_58; | |
v20 = 4 - v19; | |
v21 = (char *)&unk_283CD94 + 4 * v17; | |
v18 = 3 - (4 - v19); | |
do | |
{ | |
*(_DWORD *)v21 = -1; | |
v21 -= 28; | |
--v20; | |
} | |
while ( v20 ); | |
if ( v18 >= 0 ) | |
{ | |
LABEL_58: | |
v22 = (char *)&unk_283CD40 + 4 * (v17 + 7 * v18); | |
do | |
{ | |
*(_DWORD *)v22 = 0; | |
--v18; | |
v22 -= 28; | |
} | |
while ( v18 >= 0 ); | |
} | |
v23 = 0; | |
if ( 3 - v19 < 0 ) | |
goto LABEL_59; | |
v24 = 3 - v19 + 1; | |
result = (char *)&unk_283CCA0 + 4 * v17; | |
v23 = v24; | |
do | |
{ | |
*(_DWORD *)result = -1; | |
result += 28; | |
--v24; | |
} | |
while ( v24 ); | |
if ( v23 < 4 ) | |
{ | |
LABEL_59: | |
result = (char *)&unk_283CCA0 + 4 * (v17 + 7 * v23); | |
v26 = 4 - v23; | |
do | |
{ | |
*(_DWORD *)result = 0; | |
result += 28; | |
--v26; | |
} | |
while ( v26 ); | |
} | |
++v17; | |
} | |
while ( v17 < 7 ); | |
return result; | |
} | |
// 273CA80: using guessed type int dword_273CA80; | |
// 283CB60: using guessed type int dword_283CB60; | |
// 283CDC0: using guessed type int dword_283CDC0[]; | |
// 283CF20: using guessed type int dword_283CF20[]; | |
// 28465C0: using guessed type int dword_28465C0; | |
// 2848600: using guessed type int dword_2848600[]; | |
// 2848720: using guessed type int dword_2848720; | |
// 2848800: using guessed type int dword_2848800; | |
//----- (00422B10) -------------------------------------------------------- | |
void __usercall sub_422B10(int a1<esi>) | |
{ | |
double v1; // st6@2 | |
double v2; // st5@2 | |
double v3; // st6@3 | |
double v4; // st5@3 | |
double v5; // qt0@6 | |
float v6; // ST20_4@7 | |
double v7; // st5@7 | |
float v8; // ST20_4@7 | |
double v9; // st5@9 | |
double v10; // st6@9 | |
double v11; // st7@10 | |
double v12; // st5@10 | |
double v13; // qt2@11 | |
double v14; // st5@12 | |
double v15; // st7@13 | |
float v16; // ST10_4@14 | |
float v17; // ST08_4@15 | |
float v18; // ST10_4@15 | |
double v19; // qt0@21 | |
double v20; // st7@21 | |
double v21; // st5@24 | |
double v22; // qt1@25 | |
double v23; // st5@28 | |
double v24; // st7@29 | |
float v25; // ST10_4@30 | |
float v26; // ST08_4@31 | |
float v27; // ST10_4@31 | |
double v28; // st5@33 | |
double v29; // qtt@35 | |
double v30; // st5@40 | |
double v31; // st6@40 | |
double v32; // st7@41 | |
double v33; // st5@41 | |
double v34; // qt1@42 | |
double v35; // st5@43 | |
double v36; // st7@44 | |
float v37; // ST10_4@45 | |
float v38; // ST08_4@46 | |
float v39; // ST10_4@46 | |
double v40; // qtt@52 | |
double v41; // st7@52 | |
double v42; // st5@55 | |
double v43; // qt0@56 | |
double v44; // st5@59 | |
double v45; // st7@60 | |
float v46; // ST10_4@61 | |
float v47; // ST08_4@62 | |
float v48; // ST10_4@62 | |
double v49; // st5@64 | |
double v50; // qt2@66 | |
float v51; // [sp+Ch] [bp-34h]@12 | |
float v52; // [sp+Ch] [bp-34h]@28 | |
float v53; // [sp+Ch] [bp-34h]@43 | |
float v54; // [sp+Ch] [bp-34h]@59 | |
float v55; // [sp+10h] [bp-30h]@12 | |
float v56; // [sp+10h] [bp-30h]@28 | |
float v57; // [sp+10h] [bp-30h]@43 | |
float v58; // [sp+10h] [bp-30h]@59 | |
float v59; // [sp+14h] [bp-2Ch]@2 | |
float v60; // [sp+18h] [bp-28h]@9 | |
float v61; // [sp+18h] [bp-28h]@29 | |
float v62; // [sp+18h] [bp-28h]@44 | |
float v63; // [sp+18h] [bp-28h]@54 | |
float v64; // [sp+18h] [bp-28h]@70 | |
float v65; // [sp+1Ch] [bp-24h]@13 | |
float v66; // [sp+1Ch] [bp-24h]@29 | |
float v67; // [sp+1Ch] [bp-24h]@44 | |
float v68; // [sp+1Ch] [bp-24h]@60 | |
float v69; // [sp+1Ch] [bp-24h]@70 | |
float v70; // [sp+20h] [bp-20h]@13 | |
float v71; // [sp+20h] [bp-20h]@23 | |
float v72; // [sp+20h] [bp-20h]@40 | |
float v73; // [sp+20h] [bp-20h]@60 | |
float v74; // [sp+20h] [bp-20h]@70 | |
float v75; // [sp+24h] [bp-1Ch]@1 | |
float v76; // [sp+24h] [bp-1Ch]@72 | |
float v77; // [sp+28h] [bp-18h]@7 | |
float v78; // [sp+28h] [bp-18h]@71 | |
float v79; // [sp+2Ch] [bp-14h]@7 | |
float v80; // [sp+2Ch] [bp-14h]@70 | |
float v81; // [sp+30h] [bp-10h]@2 | |
double v82; // [sp+34h] [bp-Ch]@28 | |
double v83; // [sp+34h] [bp-Ch]@59 | |
v75 = flt_273C9E0 * 32.0; | |
if ( *(_DWORD *)(a1 + 880) ) | |
{ | |
v81 = 0.44999999; | |
v1 = 0.89999998; | |
v59 = 0.89999998; | |
v2 = 0.0; | |
if ( *(float *)(a1 + 692) < 0.0 ) | |
{ | |
v3 = 0.0; | |
v4 = -0.89999998; | |
goto LABEL_7; | |
} | |
} | |
else | |
{ | |
v81 = 0.89999998; | |
v1 = 1.35; | |
v59 = 1.35; | |
v2 = 0.0; | |
if ( *(float *)(a1 + 692) < 0.0 ) | |
{ | |
v3 = 0.0; | |
v4 = -1.35; | |
goto LABEL_7; | |
} | |
} | |
v5 = v2; | |
v4 = v1; | |
v3 = v5; | |
LABEL_7: | |
v79 = v4; | |
v77 = *(float *)(a1 + 680) + v81; | |
v6 = fabs(*(float *)(a1 + 684)); | |
v7 = v6; | |
v8 = fabs(*(float *)(a1 + 688)); | |
if ( v8 >= v7 ) | |
{ | |
if ( v3 == *(float *)(a1 + 688) ) | |
{ | |
v41 = v59; | |
} | |
else | |
{ | |
v72 = *(float *)(a1 + 688) * v75 + *(float *)(a1 + 676); | |
v30 = v3; | |
v31 = v59; | |
if ( v30 <= *(float *)(a1 + 688) ) | |
{ | |
v34 = v30; | |
v33 = 0.44999999; | |
v32 = v34; | |
} | |
else | |
{ | |
v32 = v30; | |
v33 = -0.44999999; | |
} | |
v57 = v33; | |
v53 = -v31; | |
v35 = v53; | |
if ( v53 <= v31 ) | |
{ | |
v36 = v53; | |
v62 = *(float *)(a1 + 672) - 0.449999988079071; | |
v67 = v72 + v57; | |
while ( 1 ) | |
{ | |
v37 = v36 + v77; | |
if ( sub_417000(v62, v67, v37) ) | |
break; | |
v38 = v36 + v77; | |
v39 = *(float *)(a1 + 672) + 0.449999988079071; | |
if ( sub_417000(v39, v67, v38) ) | |
break; | |
v53 = v53 + 0.8999999761581421; | |
v36 = v53; | |
if ( v53 > v31 ) | |
goto LABEL_50; | |
} | |
v36 = v53; | |
LABEL_50: | |
v31 = v59; | |
v35 = v36; | |
v32 = 0.0; | |
} | |
if ( v31 >= v35 ) | |
{ | |
v43 = v31; | |
v3 = v32; | |
v41 = v43; | |
*(float *)(a1 + 688) = v3; | |
} | |
else | |
{ | |
*(float *)(a1 + 676) = v72; | |
v40 = v31; | |
v3 = v32; | |
v41 = v40; | |
} | |
} | |
if ( v3 != *(float *)(a1 + 684) ) | |
{ | |
v63 = *(float *)(a1 + 684) * v75 + *(float *)(a1 + 672); | |
if ( v3 <= *(float *)(a1 + 684) ) | |
v42 = 0.44999999; | |
else | |
v42 = -0.44999999; | |
v58 = v42; | |
v54 = -v41; | |
v83 = v41; | |
v44 = v54; | |
if ( v54 <= v41 ) | |
{ | |
v45 = v54; | |
v68 = *(float *)(a1 + 676) - 0.449999988079071; | |
v73 = v58 + v63; | |
while ( 1 ) | |
{ | |
v46 = v45 + v77; | |
if ( sub_417000(v73, v68, v46) ) | |
break; | |
v47 = v45 + v77; | |
v48 = *(float *)(a1 + 676) + 0.449999988079071; | |
if ( sub_417000(v73, v48, v47) ) | |
break; | |
v54 = v54 + 0.8999999761581421; | |
v45 = v54; | |
if ( v54 > v83 ) | |
{ | |
v3 = 0.0; | |
v49 = v59; | |
goto LABEL_66; | |
} | |
} | |
v45 = v54; | |
v49 = v59; | |
v3 = 0.0; | |
LABEL_66: | |
v50 = v49; | |
v44 = v45; | |
v41 = v50; | |
} | |
if ( v44 <= v41 ) | |
*(float *)(a1 + 684) = v3; | |
else | |
*(float *)(a1 + 672) = v63; | |
} | |
} | |
else | |
{ | |
if ( v3 == *(float *)(a1 + 684) ) | |
{ | |
v20 = v59; | |
} | |
else | |
{ | |
v60 = *(float *)(a1 + 684) * v75 + *(float *)(a1 + 672); | |
v9 = v3; | |
v10 = v59; | |
if ( v9 <= *(float *)(a1 + 684) ) | |
{ | |
v13 = v9; | |
v12 = 0.44999999; | |
v11 = v13; | |
} | |
else | |
{ | |
v11 = v9; | |
v12 = -0.44999999; | |
} | |
v55 = v12; | |
v51 = -v10; | |
v14 = v51; | |
if ( v51 <= v10 ) | |
{ | |
v15 = v51; | |
v65 = *(float *)(a1 + 676) - 0.449999988079071; | |
v70 = v55 + v60; | |
while ( 1 ) | |
{ | |
v16 = v15 + v77; | |
if ( sub_417000(v70, v65, v16) ) | |
break; | |
v17 = v15 + v77; | |
v18 = *(float *)(a1 + 676) + 0.449999988079071; | |
if ( sub_417000(v70, v18, v17) ) | |
break; | |
v51 = v51 + 0.8999999761581421; | |
v15 = v51; | |
if ( v51 > v10 ) | |
goto LABEL_19; | |
} | |
v15 = v51; | |
LABEL_19: | |
v10 = v59; | |
v14 = v15; | |
v11 = 0.0; | |
} | |
if ( v10 >= v14 ) | |
{ | |
v22 = v10; | |
v3 = v11; | |
v20 = v22; | |
*(float *)(a1 + 684) = v3; | |
} | |
else | |
{ | |
*(float *)(a1 + 672) = v60; | |
v19 = v10; | |
v3 = v11; | |
v20 = v19; | |
} | |
} | |
if ( v3 != *(float *)(a1 + 688) ) | |
{ | |
v71 = *(float *)(a1 + 688) * v75 + *(float *)(a1 + 676); | |
if ( v3 <= *(float *)(a1 + 688) ) | |
v21 = 0.44999999; | |
else | |
v21 = -0.44999999; | |
v56 = v21; | |
v52 = -v20; | |
v82 = v20; | |
v23 = v52; | |
if ( v52 <= v20 ) | |
{ | |
v24 = v52; | |
v61 = *(float *)(a1 + 672) - 0.449999988079071; | |
v66 = v71 + v56; | |
while ( 1 ) | |
{ | |
v25 = v24 + v77; | |
if ( sub_417000(v61, v66, v25) ) | |
break; | |
v26 = v24 + v77; | |
v27 = *(float *)(a1 + 672) + 0.449999988079071; | |
if ( sub_417000(v27, v66, v26) ) | |
break; | |
v52 = v52 + 0.8999999761581421; | |
v24 = v52; | |
if ( v52 > v82 ) | |
{ | |
v3 = 0.0; | |
v28 = v59; | |
goto LABEL_35; | |
} | |
} | |
v24 = v52; | |
v28 = v59; | |
v3 = 0.0; | |
LABEL_35: | |
v29 = v28; | |
v23 = v24; | |
v20 = v29; | |
} | |
if ( v23 <= v20 ) | |
*(float *)(a1 + 688) = v3; | |
else | |
*(float *)(a1 + 676) = v71; | |
} | |
} | |
v74 = *(float *)(a1 + 692) * v75 + v77; | |
v80 = v74 + v79; | |
v69 = *(float *)(a1 + 676) - 0.449999988079071; | |
v64 = *(float *)(a1 + 672) - 0.449999988079071; | |
if ( sub_417000(v64, v69, v80) | |
|| (v78 = *(float *)(a1 + 676) + 0.449999988079071, sub_417000(v64, v78, v80)) | |
|| (v76 = *(float *)(a1 + 672) + 0.449999988079071, sub_417000(v76, v69, v80)) | |
|| sub_417000(v76, v78, v80) ) | |
{ | |
if ( *(float *)(a1 + 692) <= 0.0 ) | |
{ | |
*(_DWORD *)(a1 + 916) = 1; | |
*(float *)(a1 + 692) = 0.0; | |
} | |
else | |
{ | |
if ( *(float *)(a1 + 680) <= 61.0 ) | |
{ | |
*(float *)(a1 + 692) = 0.0; | |
*(_DWORD *)(a1 + 920) = 0; | |
*(_DWORD *)(a1 + 916) = 0; | |
} | |
else | |
{ | |
*(float *)(a1 + 692) = 0.0; | |
*(_DWORD *)(a1 + 920) = 1; | |
*(_DWORD *)(a1 + 916) = 0; | |
} | |
} | |
} | |
else | |
{ | |
*(_DWORD *)(a1 + 916) = 1; | |
*(float *)(a1 + 680) = v74 - v81; | |
} | |
} | |
// 273C9E0: using guessed type float flt_273C9E0; | |
//----- (00423250) -------------------------------------------------------- | |
signed int __usercall sub_423250<eax>(int a1<esi>) | |
{ | |
float v2; // [sp+Ch] [bp-18h]@1 | |
float v3; // [sp+10h] [bp-14h]@1 | |
float v4; // [sp+14h] [bp-10h]@1 | |
float v5; // [sp+18h] [bp-Ch]@1 | |
float v6; // [sp+1Ch] [bp-8h]@1 | |
float v7; // [sp+20h] [bp-4h]@1 | |
v3 = *(float *)(a1 + 672) + 0.449999988079071; | |
v7 = *(float *)(a1 + 672) - 0.449999988079071; | |
v4 = *(float *)(a1 + 676) + 0.449999988079071; | |
v6 = *(float *)(a1 + 676) - 0.449999988079071; | |
v2 = *(float *)(a1 + 680) + 2.25; | |
v5 = *(float *)(a1 + 680) - 1.350000023841858; | |
if ( *(_DWORD *)(a1 + 916) | |
&& !sub_417000(v3, v4, v2) | |
&& !sub_417000(v3, v6, v2) | |
&& !sub_417000(v7, v4, v2) | |
&& !sub_417000(v7, v6, v2) ) | |
return 1; | |
if ( !sub_417000(v3, v4, v5) && !sub_417000(v3, v6, v5) && !sub_417000(v7, v4, v5) && !sub_417000(v7, v6, v5) ) | |
{ | |
*(float *)(a1 + 680) = *(float *)(a1 + 680) - 0.8999999761581421; | |
return 1; | |
} | |
return 0; | |
} | |
//----- (00423410) -------------------------------------------------------- | |
int __usercall sub_423410<eax>(char *a1<eax>, int a2) | |
{ | |
unsigned int v2; // edx@1 | |
char v3; // cl@2 | |
int result; // eax@3 | |
memcpy(&unk_4683D8, &unk_468370, 0x68u); | |
memcpy(&unk_468370, &unk_468308, 0x68u); | |
memcpy(&unk_468308, &unk_4682A0, 0x68u); | |
memcpy(&unk_4682A0, &unk_468238, 0x68u); | |
memcpy(&unk_468238, &unk_4681D0, 0x68u); | |
v2 = &unk_4681D0 - (_UNKNOWN *)a1; | |
do | |
{ | |
v3 = *a1; | |
a1[v2] = *a1; | |
++a1; | |
} | |
while ( v3 ); | |
result = a2; | |
dword_468230[0] = a2; | |
dword_468234[0] = dword_2848700 + 10000; | |
return result; | |
} | |
// 468230: using guessed type int dword_468230[]; | |
// 468234: using guessed type int dword_468234[]; | |
// 2848700: using guessed type int dword_2848700; | |
//----- (004234D0) -------------------------------------------------------- | |
void __cdecl sub_4234D0() | |
{ | |
int v0; // ecx@1 | |
double v1; // st7@2 | |
int v2; // esi@2 | |
int v3; // eax@3 | |
int v4; // edx@4 | |
int v5; // eax@4 | |
int v6; // ecx@4 | |
float v7; // ST18_4@4 | |
float v8; // ST18_4@4 | |
signed int v9; // ebx@4 | |
signed int v10; // ebp@4 | |
double v11; // st7@4 | |
int v12; // eax@4 | |
signed int v13; // ecx@4 | |
int v14; // [sp+1Ch] [bp-10h]@2 | |
float v15; // [sp+20h] [bp-Ch]@4 | |
float v16; // [sp+24h] [bp-8h]@4 | |
float v17; // [sp+28h] [bp-4h]@4 | |
v0 = 0; | |
if ( dword_4681CC > 0 ) | |
{ | |
do | |
{ | |
v1 = flt_273C9E0; | |
v14 = v0 + 1; | |
v2 = 8 * (unsigned __int8)(dword_4681C8 + (_BYTE)v0); | |
if ( dword_2848700 <= dword_28465F8[v2] ) | |
{ | |
v4 = dword_28465E0[v2]; | |
v5 = dword_28465E4[v2]; | |
v6 = dword_28465E8[v2]; | |
flt_28465F4[v2] = v1 + flt_28465F4[v2]; | |
LODWORD(v15) = v4; | |
LODWORD(v16) = v5; | |
LODWORD(v17) = v6; | |
v7 = v1 * 32.0; | |
*(float *)&dword_28465E0[v2] = flt_28465EC[v2] * v7 + *(float *)&dword_28465E0[v2]; | |
*(float *)&dword_28465E4[v2] = flt_28465F0[v2] * v7 + *(float *)&dword_28465E4[v2]; | |
v8 = v7 * flt_28465F4[v2] + *(float *)&dword_28465E8[v2]; | |
*(float *)&dword_28465E8[v2] = v8; | |
v9 = (signed int)floor(*(float *)&dword_28465E0[v2]); | |
v10 = (signed int)floor(*(float *)&dword_28465E4[v2]); | |
v11 = floor(v8); | |
v12 = dword_4F1F80[(v9 & 0x1FF) + ((v10 & 0x1FF) << 9)]; | |
v13 = (signed int)v11; | |
if ( (signed int)v11 == 63 ) | |
v13 = 62; | |
if ( v13 >= *(_BYTE *)(v12 + 1) ) | |
{ | |
while ( *(_BYTE *)v12 ) | |
{ | |
v12 += 4 * *(_BYTE *)v12; | |
if ( v13 < *(_BYTE *)(v12 + 3) ) | |
break; | |
if ( v13 < *(_BYTE *)(v12 + 1) ) | |
goto LABEL_18; | |
} | |
if ( (signed int)v11 == (signed int)floor(v17) ) | |
{ | |
if ( v9 == (signed int)floor(v15) ) | |
{ | |
if ( v10 != (signed int)floor(v16) ) | |
flt_28465F0[v2] = -flt_28465F0[v2]; | |
} | |
else | |
{ | |
flt_28465EC[v2] = -flt_28465EC[v2]; | |
} | |
} | |
else | |
{ | |
flt_28465F4[v2] = -flt_28465F4[v2]; | |
} | |
dword_28465E0[v2] = LODWORD(v15); | |
dword_28465E4[v2] = LODWORD(v16); | |
dword_28465E8[v2] = LODWORD(v17); | |
flt_28465EC[v2] = flt_28465EC[v2] * 0.5; | |
flt_28465F0[v2] = flt_28465F0[v2] * 0.5; | |
flt_28465F4[v2] = 0.5 * flt_28465F4[v2]; | |
} | |
} | |
else | |
{ | |
v3 = (unsigned __int8)(dword_4681C8 + 1); | |
--dword_4681CC; | |
memcpy(&dword_28465E0[v2], &dword_28465E0[8 * dword_4681C8], 0x20u); | |
dword_4681C8 = v3; | |
} | |
LABEL_18: | |
v0 = v14; | |
} | |
while ( v14 < dword_4681CC ); | |
} | |
} | |
// 4681C8: using guessed type int dword_4681C8; | |
// 4681CC: using guessed type int dword_4681CC; | |
// 4F1F80: using guessed type int dword_4F1F80[]; | |
// 273C9E0: using guessed type float flt_273C9E0; | |
// 28465E0: using guessed type int dword_28465E0[]; | |
// 28465E4: using guessed type int dword_28465E4[]; | |
// 28465E8: using guessed type int dword_28465E8[]; | |
// 28465EC: using guessed type float flt_28465EC[]; | |
// 28465F0: using guessed type float flt_28465F0[]; | |
// 28465F4: using guessed type float flt_28465F4[]; | |
// 28465F8: using guessed type int dword_28465F8[]; | |
// 2848700: using guessed type int dword_2848700; | |
//----- (00423750) -------------------------------------------------------- | |
int __cdecl sub_423750(int a1) | |
{ | |
float v1; // ST04_4@1 | |
int result; // eax@1 | |
*(float *)(a1 + 8) = (double)rand() / 16383.5 - 1.0; | |
v1 = ((double)rand() / 16383.5 - 1.0) * 3.141592741012573; | |
*(float *)a1 = cos(v1); | |
result = a1 + 4; | |
*(float *)(a1 + 4) = sin(v1); | |
return result; | |
} | |
//----- (004237C0) -------------------------------------------------------- | |
float *__cdecl sub_4237C0(int a1, float a2, int a3, int a4) | |
{ | |
int v4; // ebp@1 | |
int v5; // esi@2 | |
int v6; // esi@5 | |
float *result; // eax@5 | |
double v8; // st6@5 | |
float v9; // [sp+28h] [bp+10h]@5 | |
v4 = a4; | |
do | |
{ | |
v5 = (unsigned __int8)(dword_4681CC + (_BYTE)dword_4681C8); | |
if ( dword_4681CC >= 256 ) | |
dword_4681C8 = (unsigned __int8)(dword_4681C8 + 1); | |
else | |
++dword_4681CC; | |
v6 = 8 * v5; | |
dword_28465E0[v6] = *(_DWORD *)a1; | |
dword_28465E4[v6] = *(_DWORD *)(a1 + 4); | |
dword_28465E8[v6] = *(_DWORD *)(a1 + 8); | |
flt_28465EC[v6 + 2] = (double)rand() / 16383.5 - 1.0; | |
v9 = ((double)rand() / 16383.5 - 1.0) * 3.141592741012573; | |
flt_28465EC[v6] = cos(v9); | |
result = &flt_28465EC[v6 + 1]; | |
*result = sin(v9); | |
--v4; | |
v8 = flt_28465EC[v6] * a2; | |
dword_28465F8[v6] = dword_2848700 + 500; | |
dword_28465FC[v6] = a3; | |
flt_28465EC[v6] = v8; | |
flt_28465F0[v6] = flt_28465F0[v6] * a2; | |
flt_28465F4[v6] = a2 * flt_28465F4[v6]; | |
} | |
while ( v4 > 0 ); | |
return result; | |
} | |
// 4681C8: using guessed type int dword_4681C8; | |
// 4681CC: using guessed type int dword_4681CC; | |
// 28465E0: using guessed type int dword_28465E0[]; | |
// 28465E4: using guessed type int dword_28465E4[]; | |
// 28465E8: using guessed type int dword_28465E8[]; | |
// 28465EC: using guessed type float flt_28465EC[]; | |
// 28465F0: using guessed type float flt_28465F0[]; | |
// 28465F4: using guessed type float flt_28465F4[]; | |
// 28465F8: using guessed type int dword_28465F8[]; | |
// 28465FC: using guessed type int dword_28465FC[]; | |
// 2848700: using guessed type int dword_2848700; | |
//----- (004239F0) -------------------------------------------------------- | |
void __usercall sub_4239F0(int a1<edi>) | |
{ | |
int v1; // ecx@1 | |
unsigned int v2; // ebp@2 | |
signed int v3; // esi@2 | |
double v4; // st7@3 | |
signed int v5; // eax@4 | |
signed int v6; // edx@4 | |
int v7; // ebx@5 | |
signed int v8; // ebx@6 | |
signed int v9; // esi@6 | |
signed int v10; // eax@6 | |
int v11; // eax@7 | |
signed int v12; // edx@9 | |
signed int v13; // [sp+18h] [bp-44h]@4 | |
signed int v14; // [sp+1Ch] [bp-40h]@2 | |
int v15; // [sp+20h] [bp-3Ch]@1 | |
int v16; // [sp+28h] [bp-34h]@5 | |
int v17; // [sp+2Ch] [bp-30h]@6 | |
float v18; // [sp+30h] [bp-2Ch]@6 | |
float v19; // [sp+34h] [bp-28h]@6 | |
float v20; // [sp+38h] [bp-24h]@4 | |
float v21; // [sp+3Ch] [bp-20h]@4 | |
float i; // [sp+40h] [bp-1Ch]@4 | |
float v23; // [sp+44h] [bp-18h]@4 | |
float v24; // [sp+48h] [bp-14h]@5 | |
float v25; // [sp+4Ch] [bp-10h]@6 | |
float v26; // [sp+50h] [bp-Ch]@5 | |
float v27; // [sp+54h] [bp-8h]@5 | |
float v28; // [sp+58h] [bp-4h]@5 | |
v1 = *(_DWORD *)(a1 + 80); | |
v15 = v1; | |
if ( v1 ) | |
{ | |
v2 = *(_DWORD *)(v1 + 28); | |
v3 = 0; | |
v14 = 0; | |
if ( *(_DWORD *)v1 > 0 ) | |
{ | |
v4 = 0.5; | |
do | |
{ | |
v5 = *(_DWORD *)(v1 + 4); | |
v6 = 0; | |
v13 = 0; | |
v23 = (double)v14 - *(float *)(v1 + 12); | |
v20 = *(float *)(a1 + 12) * v23 + *(float *)a1; | |
v21 = *(float *)(a1 + 16) * v23 + *(float *)(a1 + 4); | |
for ( i = v23 * *(float *)(a1 + 20) + *(float *)(a1 + 8); v6 < v5; v13 = v6 ) | |
{ | |
v7 = *(_DWORD *)(v1 + 36); | |
v24 = (double)v13 - *(float *)(v1 + 16); | |
v16 = v2 + 8 * *(_WORD *)(v7 + 2 * (v6 + v3 * v5)); | |
v26 = *(float *)(a1 + 24) * v24 + v20; | |
v27 = v24 * *(float *)(a1 + 28) + v21; | |
v28 = v24 * *(float *)(a1 + 32) + i; | |
if ( v2 < v16 ) | |
{ | |
do | |
{ | |
v25 = (double)*(_WORD *)(v2 + 4) - *(float *)(v1 + 20); | |
*(float *)&v17 = v25 * *(float *)(a1 + 36) + v26 + v4; | |
v18 = *(float *)(a1 + 40) * v25 + v27 + v4; | |
v19 = v25 * *(float *)(a1 + 44) + v28; | |
v8 = (signed int)v19; | |
v9 = (signed int)v18; | |
v10 = (signed int)*(float *)&v17; | |
if ( (v9 | (unsigned int)v10) >= 0x200 || (v11 = dword_4F1F80[v10 + (v9 << 9)], v8 < *(_BYTE *)(v11 + 1)) ) | |
{ | |
LABEL_11: | |
sub_4237C0((int)&v17, 0.125, *(_DWORD *)v2, 2); | |
v4 = 0.5; | |
} | |
else | |
{ | |
while ( *(_BYTE *)v11 ) | |
{ | |
v12 = *(_BYTE *)(v11 + 4 * *(_BYTE *)v11 + 3); | |
v11 += 4 * *(_BYTE *)v11; | |
if ( v8 < v12 ) | |
break; | |
if ( v8 < *(_BYTE *)(v11 + 1) ) | |
goto LABEL_11; | |
} | |
} | |
v1 = v15; | |
v2 += 8; | |
} | |
while ( v2 < v16 ); | |
v3 = v14; | |
v6 = v13; | |
} | |
v5 = *(_DWORD *)(v1 + 4); | |
++v6; | |
} | |
++v3; | |
v14 = v3; | |
} | |
while ( v3 < *(_DWORD *)v1 ); | |
} | |
} | |
} | |
// 4F1F80: using guessed type int dword_4F1F80[]; | |
//----- (00423BC0) -------------------------------------------------------- | |
signed int __cdecl sub_423BC0() | |
{ | |
char v0; // al@1 | |
int v1; // edx@1 | |
int v2; // ecx@1 | |
int v3; // esi@1 | |
signed int v4; // ebp@1 | |
__int32 v5; // edi@6 | |
int v6; // ecx@13 | |
int v7; // esi@38 | |
int v8; // edi@41 | |
signed int result; // eax@47 | |
int v10; // esi@63 | |
int v11; // edi@73 | |
int v12; // [sp+10h] [bp-4h]@38 | |
int v13; // [sp+10h] [bp-4h]@63 | |
v0 = dword_468458; | |
v1 = dword_273CA7C; | |
v2 = dword_2848708; | |
v3 = dword_283CD1C; | |
v4 = 0; | |
if ( dword_468458 & 1 && dword_283CD1C <= dword_2848700 && !dword_273CA7C && (dword_2848708 != 3 || dword_283CD24) ) | |
{ | |
v5 = 245 * dword_283CDB0; | |
if ( !dword_4687F8[245 * dword_283CDB0] ) | |
{ | |
dword_4687F8[v5] = 1; | |
LABEL_10: | |
v4 = 1; | |
goto LABEL_11; | |
} | |
} | |
else | |
{ | |
v5 = 245 * dword_283CDB0; | |
if ( dword_4687F8[245 * dword_283CDB0] ) | |
{ | |
dword_4687F8[v5] = 0; | |
goto LABEL_10; | |
} | |
} | |
LABEL_11: | |
if ( !byte_471959 || dword_468814[v5] ) | |
{ | |
if ( v0 & 2 ) | |
{ | |
if ( !(dword_468454 & 2) ) | |
{ | |
if ( v2 == 3 ) | |
{ | |
if ( !v1 ) | |
{ | |
if ( v3 <= dword_2848700 ) | |
{ | |
if ( dword_28485E4 || (dword_28485E4 = 1, dword_468814[v5]) ) | |
dword_28485E4 = 0; | |
} | |
} | |
} | |
} | |
} | |
v6 = 1; | |
} | |
else | |
{ | |
v6 = 1; | |
byte_471959 = 0; | |
dword_28485E4 = 0; | |
dword_4687EC[v5] = 1; | |
v4 = 1; | |
} | |
if ( byte_47193D ) | |
{ | |
if ( !dword_4687F0[v5] ) | |
{ | |
dword_4687F0[v5] = v6; | |
if ( !dword_468814[v5] ) | |
flt_468728[v5] = flt_468728[v5] + 0.8999999761581421; | |
goto LABEL_38; | |
} | |
LABEL_37: | |
if ( !v4 ) | |
goto LABEL_47; | |
goto LABEL_38; | |
} | |
if ( dword_4687F0[v5] ) | |
{ | |
if ( !sub_423250((int)&dword_468480[v5]) ) | |
{ | |
v6 = 1; | |
goto LABEL_37; | |
} | |
dword_4687F0[v5] = 0; | |
} | |
else | |
{ | |
if ( byte_47194A || dword_28485E4 ) | |
{ | |
if ( dword_4687F4[v5] ) | |
goto LABEL_37; | |
dword_4687F4[v5] = v6; | |
} | |
else | |
{ | |
if ( !dword_4687F4[v5] ) | |
goto LABEL_37; | |
dword_4687F4[v5] = 0; | |
} | |
} | |
LABEL_38: | |
v12 = 16 * (dword_4687F8[v5] | 2 * (dword_4687EC[v5] | 2 * (dword_4687F0[v5] | 2 * dword_4687F4[v5]))) | 3; | |
v7 = off_43D298(20); | |
if ( !v7 ) | |
{ | |
off_43D2A0(); | |
JUMPOUT(*(int *)loc_423D77); | |
} | |
v8 = off_43D298(1); | |
if ( !v8 ) | |
off_43D2A0(); | |
*(_DWORD *)(v7 + 8) = v8; | |
if ( v8 ) | |
{ | |
*(_BYTE *)v8 = v12; | |
*(_DWORD *)v7 = 0; | |
*(_DWORD *)(v7 + 4) = 1; | |
*(_DWORD *)(v7 + 12) = 1; | |
*(_DWORD *)(v7 + 16) = 0; | |
} | |
else | |
{ | |
off_43D29C(v7); | |
v7 = 0; | |
} | |
sub_42E540(v7); | |
v4 = 0; | |
v6 = 1; | |
LABEL_47: | |
result = 980 * dword_283CDB0; | |
if ( !byte_471931 ) | |
{ | |
if ( byte_47193F ) | |
{ | |
if ( !*(int *)((char *)dword_4687E0 + result) ) | |
{ | |
*(int *)((char *)dword_4687E0 + result) = v6; | |
v4 = v6; | |
} | |
} | |
else | |
{ | |
if ( !*(int *)((char *)dword_4687DC + result) && !*(int *)((char *)dword_4687E0 + result) ) | |
goto LABEL_58; | |
*(int *)((char *)dword_4687E0 + result) = 0; | |
v4 = 2; | |
} | |
*(int *)((char *)dword_4687DC + result) = 0; | |
goto LABEL_58; | |
} | |
if ( !*(int *)((char *)dword_4687DC + result) ) | |
{ | |
*(int *)((char *)dword_4687DC + result) = v6; | |
v4 = v6; | |
} | |
*(int *)((char *)dword_4687E0 + result) = 0; | |
LABEL_58: | |
if ( byte_47193E ) | |
{ | |
if ( !*(int *)((char *)dword_4687E4 + result) ) | |
{ | |
*(int *)((char *)dword_4687E4 + result) = v6; | |
v4 = v6; | |
} | |
*(int *)((char *)dword_4687E8 + result) = 0; | |
goto LABEL_62; | |
} | |
if ( byte_471940 ) | |
{ | |
if ( !*(int *)((char *)dword_4687E8 + result) ) | |
{ | |
*(int *)((char *)dword_4687E8 + result) = v6; | |
v4 = v6; | |
} | |
*(int *)((char *)dword_4687E4 + result) = 0; | |
LABEL_62: | |
if ( !v4 ) | |
return result; | |
goto LABEL_63; | |
} | |
if ( !*(int *)((char *)dword_4687E4 + result) && !*(int *)((char *)dword_4687E8 + result) ) | |
goto LABEL_62; | |
*(int *)((char *)dword_4687E8 + result) = 0; | |
*(int *)((char *)dword_4687E4 + result) = 0; | |
v4 = 2; | |
LABEL_63: | |
v13 = 16 | |
* (*(int *)((char *)dword_4687DC + result) | 2 | |
* (*(int *)((char *)dword_4687E0 + result) | 2 | |
* (*(int *)((char *)dword_4687E4 + result) | 2 * *(int *)((char *)dword_4687E8 + result)))) | 2; | |
v10 = off_43D298(20); | |
if ( !v10 ) | |
{ | |
off_43D2A0(); | |
JUMPOUT(*(int *)loc_423E95); | |
} | |
v11 = off_43D298(1); | |
if ( !v11 ) | |
off_43D2A0(); | |
*(_DWORD *)(v10 + 8) = v11; | |
if ( v11 ) | |
{ | |
*(_BYTE *)v11 = v13; | |
*(_DWORD *)v10 = 0; | |
*(_DWORD *)(v10 + 4) = 1; | |
*(_DWORD *)(v10 + 12) = 1; | |
*(_DWORD *)(v10 + 16) = 0; | |
} | |
else | |
{ | |
off_43D29C(v10); | |
v10 = 0; | |
} | |
result = sub_42E540(v10); | |
if ( v4 == 1 ) | |
dword_468820[245 * dword_283CDB0] = dword_2848700 + 256; | |
return result; | |
} | |
// 423D77: using guessed type int(); | |
// 423E95: using guessed type int(); | |
// 43D298: using guessed type int (__cdecl *off_43D298)(_DWORD); | |
// 43D29C: using guessed type int (__cdecl *off_43D29C)(_DWORD); | |
// 43D2A0: using guessed type int (*off_43D2A0)(void); | |
// 468454: using guessed type int dword_468454; | |
// 468458: using guessed type int dword_468458; | |
// 468480: using guessed type int dword_468480[]; | |
// 468728: using guessed type float flt_468728[]; | |
// 4687DC: using guessed type int dword_4687DC[]; | |
// 4687E0: using guessed type int dword_4687E0[]; | |
// 4687E4: using guessed type int dword_4687E4[]; | |
// 4687E8: using guessed type int dword_4687E8[]; | |
// 4687EC: using guessed type int dword_4687EC[]; | |
// 4687F0: using guessed type int dword_4687F0[]; | |
// 4687F4: using guessed type int dword_4687F4[]; | |
// 4687F8: using guessed type int dword_4687F8[]; | |
// 468814: using guessed type int dword_468814[]; | |
// 468820: using guessed type int dword_468820[]; | |
// 471931: using guessed type char byte_471931; | |
// 47193D: using guessed type char byte_47193D; | |
// 47193E: using guessed type char byte_47193E; | |
// 47193F: using guessed type char byte_47193F; | |
// 471940: using guessed type char byte_471940; | |
// 47194A: using guessed type char byte_47194A; | |
// 471959: using guessed type char byte_471959; | |
// 273CA7C: using guessed type int dword_273CA7C; | |
// 283CD1C: using guessed type int dword_283CD1C; | |
// 283CD24: using guessed type int dword_283CD24; | |
// 28485E4: using guessed type int dword_28485E4; | |
// 2848700: using guessed type int dword_2848700; | |
// 2848708: using guessed type int dword_2848708; | |
//----- (00423F60) -------------------------------------------------------- | |
int __thiscall sub_423F60(int this, int a2, int a3) | |
{ | |
int result; // eax@1 | |
int v4; // eax@5 | |
char *v5; // eax@5 | |
char *v6; // edx@5 | |
char v7; // cl@6 | |
result = 980 * dword_283CDB0; | |
if ( dword_46880C[245 * dword_283CDB0] ) | |
{ | |
result = dword_283CF14 - a2; | |
dword_283CF14 = result; | |
if ( result <= 0 ) | |
{ | |
sub_414FD0(this, -400, "wav/death.wav"); | |
dword_28465C0 = 0; | |
dword_28485E4 = 0; | |
dword_46880C[245 * dword_283CDB0] = 0; | |
sub_423750((int)&unk_28487F0); | |
dword_273CA74 = 1; | |
if ( a3 != dword_283CDB0 ) | |
++dword_468824[245 * a3]; | |
PathName[0] = 13; | |
PathName[1] = a3; | |
v4 = sub_42EEC0(PathName, 2u, 1); | |
sub_42E540(v4); | |
memcpy(PathName, "You've been killed by ", 0x16u); | |
v5 = (char *)&unk_468844 + 980 * a3; | |
PathName[22] = aYouVeBeenKille[22]; | |
v6 = (char *)(&unk_2842496 - (_UNKNOWN *)v5); | |
do | |
{ | |
v7 = *v5; | |
v5[(_DWORD)v6] = *v5; | |
++v5; | |
} | |
while ( v7 ); | |
result = sub_423410(PathName, 4); | |
} | |
} | |
return result; | |
} | |
// 46880C: using guessed type int dword_46880C[]; | |
// 468824: using guessed type int dword_468824[]; | |
// 273CA74: using guessed type int dword_273CA74; | |
// 283CF14: using guessed type int dword_283CF14; | |
// 28465C0: using guessed type int dword_28465C0; | |
// 28485E4: using guessed type int dword_28485E4; | |
//----- (00424060) -------------------------------------------------------- | |
int __fastcall sub_424060(int a1) | |
{ | |
int v1; // ebx@1 | |
int v2; // ebp@2 | |
const char *v3; // eax@7 | |
int v4; // ecx@14 | |
double v5; // st7@15 | |
int v6; // eax@21 | |
double v7; // st7@26 | |
double v8; // st6@27 | |
double v9; // st7@35 | |
const char *v10; // eax@42 | |
const char *v11; // eax@45 | |
double v12; // st7@50 | |
void *v13; // edi@53 | |
void *v14; // esi@53 | |
int v15; // edx@58 | |
int v16; // eax@58 | |
const char *v17; // eax@67 | |
const char *v18; // eax@91 | |
int v19; // eax@108 | |
bool v20; // zf@109 | |
int v21; // esi@119 | |
int v22; // edi@122 | |
double v23; // st7@132 | |
double v24; // st7@133 | |
int v25; // esi@148 | |
int v26; // edi@151 | |
double v27; // st6@175 | |
double v28; // st7@179 | |
double v29; // st5@180 | |
int v30; // esi@187 | |
int v31; // edi@190 | |
float v32; // eax@199 | |
int v33; // ecx@199 | |
int v34; // edx@199 | |
double v35; // st7@205 | |
double v36; // st7@206 | |
double v37; // st7@213 | |
double v38; // st7@213 | |
__int32 v39; // esi@214 | |
int v40; // edx@214 | |
int v41; // ecx@214 | |
int v42; // ebx@214 | |
bool v43; // zf@220 | |
int v44; // esi@235 | |
char v45; // bl@238 | |
double v46; // st7@241 | |
double v47; // st7@241 | |
int v48; // eax@244 | |
int v49; // edi@245 | |
int v50; // ecx@251 | |
int v51; // eax@251 | |
double v52; // st6@251 | |
int v53; // edx@251 | |
double v54; // st6@251 | |
int v55; // eax@252 | |
double v56; // st7@253 | |
double v57; // st7@260 | |
double v58; // st6@263 | |
double v59; // st6@273 | |
int v60; // eax@274 | |
float v61; // ST0C_4@286 | |
int v62; // ecx@286 | |
int v63; // eax@288 | |
double v64; // st7@297 | |
float v65; // ST08_4@301 | |
double v66; // st7@305 | |
float v67; // edi@305 | |
float v68; // ebx@305 | |
double v69; // st6@305 | |
double v70; // st6@305 | |
double v71; // qt2@305 | |
float v72; // ST20_4@305 | |
double v73; // st6@305 | |
double v74; // st4@305 | |
double v75; // st5@305 | |
float v76; // ST0C_4@305 | |
float v77; // ST08_4@305 | |
__int32 v78; // eax@313 | |
float v79; // edx@313 | |
double v80; // st7@313 | |
float *v81; // ecx@314 | |
int result; // eax@322 | |
int v83; // [sp+8h] [bp-68h]@93 | |
float v84; // [sp+1Ch] [bp-54h]@6 | |
float v85; // [sp+1Ch] [bp-54h]@35 | |
float v86; // [sp+1Ch] [bp-54h]@305 | |
int v87; // [sp+20h] [bp-50h]@1 | |
float v88; // [sp+24h] [bp-4Ch]@1 | |
float v89; // [sp+28h] [bp-48h]@1 | |
int v90; // [sp+2Ch] [bp-44h]@112 | |
float v91; // [sp+30h] [bp-40h]@112 | |
float v92; // [sp+34h] [bp-3Ch]@39 | |
float v93; // [sp+38h] [bp-38h]@305 | |
int v94; // [sp+3Ch] [bp-34h]@119 | |
int v95; // [sp+40h] [bp-30h]@112 | |
int v96; // [sp+44h] [bp-2Ch]@113 | |
int v97; // [sp+48h] [bp-28h]@113 | |
int v98; // [sp+4Ch] [bp-24h]@113 | |
float v99; // [sp+50h] [bp-20h]@113 | |
int v100; // [sp+54h] [bp-1Ch]@113 | |
int v101; // [sp+58h] [bp-18h]@140 | |
float v102; // [sp+5Ch] [bp-14h]@140 | |
float v103; // [sp+60h] [bp-10h]@140 | |
float v104; // [sp+64h] [bp-Ch]@199 | |
float v105; // [sp+68h] [bp-8h]@199 | |
float v106; // [sp+6Ch] [bp-4h]@199 | |
v89 = 0.0; | |
v88 = 0.0; | |
v87 = 0; | |
v1 = 0; | |
do | |
{ | |
v2 = 245 * v87; | |
if ( dword_468810[245 * v87] == v1 || dword_468830[v2] == v1 && v87 != dword_283CDB0 ) | |
goto LABEL_321; | |
if ( dword_46880C[v2] == v1 ) | |
{ | |
if ( v87 == dword_283CDB0 && dword_273CA74 == v1 ) | |
{ | |
dword_6F5FA4 = 2; | |
goto LABEL_321; | |
} | |
v66 = flt_273C9E0; | |
a1 = LODWORD(flt_468728[v2]); | |
v67 = flt_468720[v2]; | |
v68 = flt_468724[v2]; | |
v98 = LODWORD(flt_468720[v2]); | |
v69 = 0.5 * flt_273C9E0 + flt_468734[v2]; | |
v99 = v68; | |
v100 = a1; | |
*(float *)&v94 = v69; | |
v70 = *(float *)&v94; | |
flt_468734[v2] = *(float *)&v94; | |
v71 = v70; | |
v72 = v66 * 32.0; | |
v73 = v72; | |
v86 = flt_46872C[v2] * v72 + flt_468720[v2]; | |
flt_468720[v2] = v86; | |
v93 = v73 * flt_468730[v2] + flt_468724[v2]; | |
v74 = v93; | |
flt_468724[v2] = v93; | |
v92 = v73 * v71 + flt_468728[v2]; | |
v75 = v92; | |
flt_468728[v2] = v92; | |
v76 = v75; | |
v77 = v74; | |
if ( sub_417000(v86, v77, v76) || v92 >= 63.0 ) | |
{ | |
v95 = (signed int)floor(v86); | |
v96 = (signed int)floor(v93); | |
v97 = (signed int)floor(v92); | |
if ( v97 == (signed int)floor(*(float *)&v100) ) | |
{ | |
if ( v95 == (signed int)*(float *)&v98 ) | |
{ | |
if ( v96 != (signed int)v99 ) | |
flt_468730[v2] = -flt_468730[v2]; | |
} | |
else | |
{ | |
flt_46872C[v2] = -flt_46872C[v2]; | |
} | |
} | |
else | |
{ | |
flt_468734[v2] = -*(float *)&v94; | |
} | |
v78 = dword_283CDB0; | |
LODWORD(v79) = v100; | |
v80 = flt_46872C[v2] * 0.25; | |
flt_468720[v2] = v67; | |
flt_468724[v2] = v68; | |
flt_468728[v2] = v79; | |
flt_46872C[v2] = v80; | |
flt_468730[v2] = flt_468730[v2] * 0.25; | |
flt_468734[v2] = 0.25 * flt_468734[v2]; | |
if ( v87 != v78 ) | |
goto LABEL_320; | |
v81 = &flt_468734[245 * v78]; | |
if ( *v81 < 0.01 && *v81 > -0.01 ) | |
dword_273CA74 = 0; | |
sub_423750((int)&unk_28487F0); | |
sub_414FD0(a1, -300, "wav/bounce.wav"); | |
} | |
if ( v87 == dword_283CDB0 ) | |
{ | |
sub_41DC20(); | |
sub_41DC20(); | |
sub_41DC20(); | |
dword_6F5FA4 = 1; | |
} | |
LABEL_320: | |
v1 = 0; | |
goto LABEL_321; | |
} | |
v84 = flt_273C9E0; | |
if ( dword_4687EC[v2] != v1 ) | |
{ | |
v20 = v87 == dword_283CDB0; | |
flt_468734[v2] = -0.31999999; | |
dword_4687EC[v2] = v1; | |
v3 = "wav/waterjump.wav"; | |
if ( v20 ) | |
{ | |
if ( dword_468818[v2] == v1 ) | |
v3 = "wav/jump.wav"; | |
sub_414FD0(a1, -500, v3); | |
} | |
else | |
{ | |
if ( dword_468818[v2] == v1 ) | |
v3 = "wav/jump.wav"; | |
sub_414EB0((int)&flt_468720[v2], v3, -500, (int)&flt_468720[v2]); | |
} | |
} | |
v4 = dword_468814[v2]; | |
if ( v4 == v1 ) | |
{ | |
if ( dword_4687F0[v2] == v1 ) | |
{ | |
if ( dword_4687F4[v2] == v1 ) | |
goto LABEL_21; | |
v5 = v84 * 0.5; | |
} | |
else | |
{ | |
v5 = v84 * 0.300000011920929; | |
} | |
} | |
else | |
{ | |
v5 = v84 * 0.1000000014901161; | |
} | |
v84 = v5; | |
LABEL_21: | |
v6 = dword_4687DC[v2]; | |
if ( (v6 != v1 || dword_4687E0[v2] != v1) && (dword_4687E4[v2] != v1 || dword_4687E8[v2] != v1) ) | |
v84 = v84 * 0.7071067690849304; | |
v7 = v84; | |
if ( v6 != v1 ) | |
{ | |
flt_46872C[v2] = flt_468750[v2] * v7 + flt_46872C[v2]; | |
v8 = flt_468754[v2] * v7 + flt_468730[v2]; | |
LABEL_30: | |
flt_468730[v2] = v8; | |
goto LABEL_31; | |
} | |
if ( dword_4687E0[v2] != v1 ) | |
{ | |
flt_46872C[v2] = flt_46872C[v2] - flt_468750[v2] * v7; | |
v8 = flt_468730[v2] - flt_468754[v2] * v7; | |
goto LABEL_30; | |
} | |
LABEL_31: | |
if ( dword_4687E4[v2] == v1 ) | |
{ | |
if ( dword_4687E8[v2] != v1 ) | |
{ | |
flt_46872C[v2] = flt_468738[v2] * v7 + flt_46872C[v2]; | |
flt_468730[v2] = v7 * flt_46873C[v2] + flt_468730[v2]; | |
} | |
} | |
else | |
{ | |
flt_46872C[v2] = flt_46872C[v2] - flt_468738[v2] * v7; | |
flt_468730[v2] = flt_468730[v2] - v7 * flt_46873C[v2]; | |
} | |
v9 = flt_273C9E0; | |
v85 = flt_273C9E0 + 1.0; | |
flt_468734[v2] = (flt_468734[v2] + flt_273C9E0) / v85; | |
if ( dword_468818[v2] == v1 ) | |
{ | |
if ( v4 == v1 ) | |
v85 = v9 * 4.0 + 1.0; | |
} | |
else | |
{ | |
v85 = v9 * 6.0 + 1.0; | |
} | |
flt_46872C[v2] = flt_46872C[v2] / v85; | |
flt_468730[v2] = flt_468730[v2] / v85; | |
v92 = flt_468734[v2]; | |
sub_422B10((int)&dword_468480[v2]); | |
if ( 0.0 == flt_468734[v2] && v92 > 0.239999994635582 ) | |
{ | |
if ( v87 == dword_283CDB0 ) | |
{ | |
v10 = "wav/waterland.wav"; | |
if ( dword_468818[245 * dword_283CDB0] == v1 ) | |
v10 = "wav/land.wav"; | |
sub_414FD0(a1, -500, v10); | |
} | |
else | |
{ | |
v11 = "wav/waterland.wav"; | |
if ( dword_468818[v2] == v1 ) | |
v11 = "wav/land.wav"; | |
sub_414EB0(a1, v11, -500, (int)&flt_468720[v2]); | |
} | |
if ( v92 > 0.4799999892711639 ) | |
{ | |
if ( v87 == dword_283CDB0 ) | |
{ | |
v12 = v92; | |
sub_423F60( | |
-27 - (signed int)(v12 * -256.0 * v12 * v12), | |
-27 - (signed int)(v12 * -256.0 * v12 * v12), | |
dword_283CDB0); | |
sub_414FD0(a1, -500, "wav/fallhurt.wav"); | |
} | |
else | |
{ | |
sub_414EB0(a1, "wav/fallhurt.wav", -500, (int)&flt_468720[v2]); | |
} | |
} | |
flt_46872C[v2] = flt_46872C[v2] * 0.5; | |
flt_468730[v2] = 0.5 * flt_468730[v2]; | |
} | |
v13 = (void *)v87; | |
v14 = (void *)dword_283CDB0; | |
if ( v87 == dword_283CDB0 ) | |
{ | |
a1 = 980 * dword_283CDB0; | |
if ( dword_4687DC[245 * dword_283CDB0] != v1 | |
|| *(int *)((char *)dword_4687E0 + a1) != v1 | |
|| *(int *)((char *)dword_4687E4 + a1) != v1 | |
|| *(int *)((char *)dword_4687E8 + a1) != v1 ) | |
{ | |
if ( dword_4687F4[v2] != v1 || *(int *)((char *)dword_468814 + a1) != v1 ) | |
{ | |
v15 = dword_2848700; | |
} | |
else | |
{ | |
v15 = dword_2848700; | |
if ( dword_2848700 > *(int *)((char *)dword_468820 + a1) | |
&& (*(float *)((char *)flt_46872C + a1) > 0.1000000014901161 | |
|| *(float *)((char *)flt_46872C + a1) < -0.1000000014901161 | |
|| *(float *)((char *)flt_468730 + a1) > 0.1000000014901161 | |
|| *(float *)((char *)flt_468730 + a1) < -0.1000000014901161) ) | |
{ | |
switch ( dword_2848700 & 3 ) | |
{ | |
case 0: | |
v17 = "wav/wade1.wav"; | |
if ( *(int *)((char *)dword_468818 + a1) == v1 ) | |
v17 = "wav/footstep1.wav"; | |
goto LABEL_75; | |
case 1: | |
v17 = "wav/wade2.wav"; | |
if ( *(int *)((char *)dword_468818 + a1) == v1 ) | |
v17 = "wav/footstep2.wav"; | |
goto LABEL_75; | |
case 2: | |
v17 = "wav/wade3.wav"; | |
if ( *(int *)((char *)dword_468818 + a1) == v1 ) | |
v17 = "wav/footstep3.wav"; | |
goto LABEL_75; | |
case 3: | |
v17 = "wav/wade4.wav"; | |
if ( *(int *)((char *)dword_468818 + a1) == v1 ) | |
v17 = "wav/footstep4.wav"; | |
LABEL_75: | |
sub_414FD0(a1, -1000, v17); | |
break; | |
default: | |
break; | |
} | |
v14 = (void *)dword_283CDB0; | |
v15 = dword_2848700; | |
a1 = 980 * dword_283CDB0; | |
dword_468820[245 * dword_283CDB0] = dword_2848700 + 512; | |
} | |
} | |
v13 = (void *)v87; | |
v16 = dword_2848708; | |
dword_6F5FA4 = 2; | |
} | |
else | |
{ | |
v15 = dword_2848700; | |
v16 = dword_2848708; | |
dword_6F5FA4 = 1; | |
} | |
} | |
else | |
{ | |
if ( dword_4687DC[v2] == v1 && dword_4687E0[v2] == v1 && dword_4687E4[v2] == v1 && dword_4687E8[v2] == v1 | |
|| dword_4687F4[v2] != v1 | |
|| dword_468814[v2] != v1 ) | |
{ | |
v15 = dword_2848700; | |
} | |
else | |
{ | |
v15 = dword_2848700; | |
if ( dword_2848700 > dword_468820[v2] | |
&& (flt_46872C[v2] > 0.1000000014901161 | |
|| flt_46872C[v2] < -0.1000000014901161 | |
|| flt_468730[v2] > 0.1000000014901161 | |
|| flt_468730[v2] < -0.1000000014901161) ) | |
{ | |
switch ( dword_2848700 & 3 ) | |
{ | |
case 0: | |
v18 = "wav/wade1.wav"; | |
if ( dword_468818[v2] == v1 ) | |
v18 = "wav/footstep1.wav"; | |
v83 = (int)&flt_468720[v2]; | |
goto LABEL_102; | |
case 1: | |
v18 = "wav/wade2.wav"; | |
if ( dword_468818[v2] == v1 ) | |
v18 = "wav/footstep2.wav"; | |
goto LABEL_101; | |
case 2: | |
v18 = "wav/wade3.wav"; | |
if ( dword_468818[v2] == v1 ) | |
v18 = "wav/footstep3.wav"; | |
v83 = (int)&flt_468720[v2]; | |
goto LABEL_102; | |
case 3: | |
v18 = "wav/wade4.wav"; | |
if ( dword_468818[v2] == v1 ) | |
v18 = "wav/footstep4.wav"; | |
LABEL_101: | |
a1 = (int)&flt_468720[v2]; | |
v83 = (int)&flt_468720[v2]; | |
LABEL_102: | |
sub_414EB0(a1, v18, -1000, v83); | |
break; | |
default: | |
break; | |
} | |
v15 = dword_2848700; | |
v14 = (void *)dword_283CDB0; | |
dword_468820[v2] = dword_2848700 + 512; | |
} | |
} | |
v16 = dword_4687FC[v2]; | |
} | |
if ( dword_4687F8[v2] == v1 ) | |
{ | |
if ( v16 == 4 ) | |
{ | |
if ( dword_46881C[v2] != v1 && dword_283CD18 < 256 ) | |
{ | |
if ( v13 == v14 ) | |
{ | |
v61 = (double)dword_46881C[245 * (signed int)v14]; | |
sub_422100(v14, v61); | |
sub_414FD0(v62, -1000, "wav/woosh.wav"); | |
v20 = dword_283CD2C-- == 1; | |
dword_283CD1C = dword_2848700 + 500; | |
if ( v20 ) | |
dword_468464 = -1; | |
v94 = dword_46881C[245 * dword_283CDB0] - dword_2848700; | |
PathName[0] = 5; | |
*(float *)&PathName[1] = (double)v94; | |
v63 = sub_42EEC0(PathName, 5u, 1); | |
sub_42E540(v63); | |
} | |
dword_46881C[v2] = v1; | |
goto LABEL_271; | |
} | |
} | |
else | |
{ | |
if ( v16 != v1 ) | |
goto LABEL_271; | |
} | |
dword_46881C[v2] = v1; | |
goto LABEL_271; | |
} | |
switch ( v16 ) | |
{ | |
case 0: | |
v19 = dword_46881C[v2]; | |
if ( v19 == v1 ) | |
{ | |
dword_46881C[v2] = v15 + 1000; | |
v20 = v13 == v14; | |
goto LABEL_160; | |
} | |
if ( v15 <= v19 ) | |
goto LABEL_271; | |
if ( v13 != v14 | |
|| (sub_418730((int)&flt_468750[v2], (int)&flt_468720[v2], (int)&v95, (int)&v91, (int)&v90), LODWORD(v91) == v1) ) | |
goto LABEL_128; | |
*(float *)&v98 = (double)v95 + 0.5 - flt_468720[v2]; | |
v99 = (double)v96 + 0.5 - flt_468724[v2]; | |
*(float *)&v100 = (double)v97 + 0.5 - flt_468728[v2]; | |
if ( *(float *)&v98 >= 3.0 ) | |
{ | |
dword_46881C[v2] = v1; | |
} | |
else | |
{ | |
if ( *(float *)&v98 <= -3.0 || v99 >= 3.0 || v99 <= -3.0 || *(float *)&v100 >= 3.0 || *(float *)&v100 <= -3.0 ) | |
{ | |
LABEL_128: | |
dword_46881C[v2] = v1; | |
} | |
else | |
{ | |
v94 = ((v95 | ((v96 | (v97 << 9)) << 9)) << 6) | 0x2B; | |
v21 = off_43D298(20); | |
if ( v21 == v1 ) | |
{ | |
off_43D2A0(); | |
JUMPOUT(*(int *)loc_424813); | |
} | |
v22 = off_43D298(4); | |
if ( v22 == v1 ) | |
off_43D2A0(); | |
*(_DWORD *)(v21 + 8) = v22; | |
if ( v22 == v1 ) | |
{ | |
off_43D29C(v21); | |
sub_42E540(0); | |
dword_46881C[v2] = v1; | |
} | |
else | |
{ | |
*(_DWORD *)v22 = v94; | |
*(_DWORD *)v21 = v1; | |
*(_DWORD *)(v21 + 4) = 1; | |
*(_DWORD *)(v21 + 12) = 4; | |
*(_DWORD *)(v21 + 16) = v1; | |
sub_42E540(v21); | |
dword_46881C[v2] = v1; | |
} | |
} | |
} | |
goto LABEL_271; | |
case 1: | |
if ( v15 <= dword_46881C[v2] ) | |
goto LABEL_271; | |
dword_46881C[v2] = v15 + 200; | |
sub_418730((int)&flt_468750[v2], (int)&flt_468720[v2], (int)&v95, (int)&v91, (int)&v90); | |
a1 = LODWORD(v91); | |
if ( LODWORD(v91) != v1 ) | |
{ | |
switch ( v90 ) | |
{ | |
case 0: | |
v23 = (double)v95 - 0.1000000014901161; | |
goto LABEL_133; | |
case 1: | |
v23 = (double)v95 + 1.100000023841858; | |
LABEL_133: | |
*(float *)&v98 = v23; | |
v99 = (double)v96 + 0.5; | |
v24 = (double)v97 + 0.5; | |
goto LABEL_139; | |
case 2: | |
*(float *)&v98 = (double)v95 + 0.5; | |
v99 = (double)v96 - 0.1000000014901161; | |
v24 = (double)v97 + 0.5; | |
goto LABEL_139; | |
case 3: | |
*(float *)&v98 = (double)v95 + 0.5; | |
v99 = (double)v96 + 1.100000023841858; | |
v24 = (double)v97 + 0.5; | |
goto LABEL_139; | |
case 4: | |
*(float *)&v98 = (double)v95 + 0.5; | |
v99 = (double)v96 + 0.5; | |
v24 = (double)v97 - 0.1000000014901161; | |
goto LABEL_139; | |
case 5: | |
*(float *)&v98 = (double)v95 + 0.5; | |
v99 = (double)v96 + 0.5; | |
v24 = (double)v97 + 1.100000023841858; | |
LABEL_139: | |
*(float *)&v100 = v24; | |
break; | |
default: | |
break; | |
} | |
*(float *)&v101 = flt_468720[v2] - *(float *)&v98; | |
v102 = flt_468724[v2] - v99; | |
v103 = flt_468728[v2] - *(float *)&v100; | |
if ( *(float *)&v101 < 3.0 ) | |
{ | |
if ( *(float *)&v101 > -3.0 && v102 < 3.0 && v102 > -3.0 && v103 < 3.0 && v103 > -3.0 ) | |
{ | |
sub_4237C0((int)&v98, 0.25, *LODWORD(v91), 2); | |
if ( v13 == (void *)dword_283CDB0 && sub_4183A0((int)&v95) ) | |
{ | |
v94 = ((v95 | ((v96 | (v97 << 9)) << 9)) << 6) | 0x1B; | |
v25 = off_43D298(20); | |
if ( v25 == v1 ) | |
{ | |
off_43D2A0(); | |
JUMPOUT(*(int *)loc_424ADE); | |
} | |
v26 = off_43D298(4); | |
if ( v26 == v1 ) | |
off_43D2A0(); | |
*(_DWORD *)(v25 + 8) = v26; | |
if ( v26 == v1 ) | |
{ | |
off_43D29C(v25); | |
v25 = 0; | |
} | |
else | |
{ | |
*(_DWORD *)v26 = v94; | |
*(_DWORD *)v25 = v1; | |
*(_DWORD *)(v25 + 4) = 1; | |
*(_DWORD *)(v25 + 12) = 4; | |
*(_DWORD *)(v25 + 16) = v1; | |
} | |
sub_42E540(v25); | |
if ( dword_283CD20 < 100 ) | |
++dword_283CD20; | |
} | |
sub_414EB0((int)&v98, "wav/hitground.wav", -300, (int)&v98); | |
goto LABEL_271; | |
} | |
} | |
} | |
v20 = v13 == (void *)dword_283CDB0; | |
LABEL_160: | |
if ( v20 ) | |
{ | |
sub_414FD0(a1, -2000, "wav/woosh.wav"); | |
goto LABEL_271; | |
} | |
goto LABEL_321; | |
case 2: | |
if ( v13 == v14 ) | |
{ | |
sub_418730((int)&flt_468750[v2], (int)&flt_468720[v2], (int)&v95, (int)&v91, (int)&v90); | |
if ( LODWORD(v91) != v1 ) | |
{ | |
switch ( v90 ) | |
{ | |
case 0: | |
--v95; | |
break; | |
case 1: | |
++v95; | |
break; | |
case 2: | |
--v96; | |
break; | |
case 3: | |
++v96; | |
break; | |
case 4: | |
--v97; | |
break; | |
case 5: | |
++v97; | |
break; | |
default: | |
break; | |
} | |
if ( v97 >= v1 ) | |
{ | |
if ( v97 != 62 ) | |
{ | |
*(float *)&v101 = flt_468720[v2] - ((double)v95 + 0.5); | |
v102 = flt_468724[v2] - ((double)v96 + 0.5); | |
v103 = flt_468728[v2] - ((double)v97 + 0.5); | |
v27 = *(float *)&v101; | |
if ( *(float *)&v101 < 3.0 ) | |
{ | |
if ( v27 > -3.0 ) | |
{ | |
if ( v102 < 3.0 ) | |
{ | |
if ( v102 > -3.0 ) | |
{ | |
v28 = v103; | |
if ( v103 < 3.0 ) | |
{ | |
v29 = v102; | |
if ( v28 > -3.0 ) | |
{ | |
if ( v27 >= 0.949999988079071 | |
|| v27 <= -0.949999988079071 | |
|| v29 >= 0.949999988079071 | |
|| v29 <= -0.949999988079071 | |
|| v28 >= 0.949999988079071 | |
|| (v94 = 1 - dword_4687F0[v2], | |
-1.850000023841858 - (double)v94 * 0.8999999761581421 >= v28) ) | |
{ | |
sub_414FD0(a1, -300, "wav/switch.wav"); | |
v94 = ((v95 | ((v96 | (v97 << 9)) << 9)) << 6) | 0xB; | |
v30 = off_43D298(20); | |
if ( v30 == v1 ) | |
{ | |
off_43D2A0(); | |
JUMPOUT(*(int *)loc_424D7F); | |
} | |
v31 = off_43D298(4); | |
if ( v31 == v1 ) | |
off_43D2A0(); | |
*(_DWORD *)(v30 + 8) = v31; | |
if ( v31 == v1 ) | |
{ | |
off_43D29C(v30); | |
v30 = 0; | |
} | |
else | |
{ | |
*(_DWORD *)v31 = v94; | |
*(_DWORD *)v30 = v1; | |
*(_DWORD *)(v30 + 4) = 1; | |
*(_DWORD *)(v30 + 12) = 4; | |
*(_DWORD *)(v30 + 16) = v1; | |
} | |
sub_42E540(v30); | |
--dword_283CD20; | |
if ( !dword_283CD20 ) | |
dword_468464 = -1; | |
dword_283CD1C = dword_2848700 + 500; | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
else | |
{ | |
if ( v15 > dword_46881C[v2] ) | |
dword_46881C[v2] = v15 + 500; | |
} | |
goto LABEL_271; | |
case 3: | |
if ( v15 <= dword_46881C[v2] ) | |
goto LABEL_271; | |
v32 = flt_468750[v2]; | |
v33 = LODWORD(flt_468754[v2]); | |
dword_46881C[v2] = v15 + 500; | |
v34 = dword_468758[v2]; | |
v104 = v32; | |
LODWORD(v105) = v33; | |
LODWORD(v106) = v34; | |
if ( v13 == v14 ) | |
{ | |
sub_414FD0(v33, -1000, "wav/semishoot.wav"); | |
if ( dword_28485E4 == v1 ) | |
{ | |
v94 = rand(); | |
v104 = ((double)v94 / 16383.5 - 1.0) * 0.009999999776482582 + v104; | |
v94 = rand(); | |
v105 = ((double)v94 / 16383.5 - 1.0) * 0.009999999776482582 + v105; | |
v94 = rand(); | |
v106 = ((double)v94 / 16383.5 - 1.0) * 0.009999999776482582 + v106; | |
} | |
} | |
else | |
{ | |
sub_414EB0(v33, "wav/semishoot.wav", -1000, (int)&flt_468720[v2]); | |
} | |
sub_418730((int)&v104, (int)&flt_468720[v2], (int)&v95, (int)&v91, (int)&v90); | |
if ( LODWORD(v91) != v1 ) | |
{ | |
switch ( v90 ) | |
{ | |
case 0: | |
v35 = (double)v95 - 0.1000000014901161; | |
goto LABEL_206; | |
case 1: | |
v35 = (double)v95 + 1.100000023841858; | |
LABEL_206: | |
*(float *)&v98 = v35; | |
v99 = (double)v96 + 0.5; | |
v36 = (double)v97 + 0.5; | |
goto LABEL_212; | |
case 2: | |
*(float *)&v98 = (double)v95 + 0.5; | |
v99 = (double)v96 - 0.1000000014901161; | |
v36 = (double)v97 + 0.5; | |
goto LABEL_212; | |
case 3: | |
*(float *)&v98 = (double)v95 + 0.5; | |
v99 = (double)v96 + 1.100000023841858; | |
v36 = (double)v97 + 0.5; | |
goto LABEL_212; | |
case 4: | |
*(float *)&v98 = (double)v95 + 0.5; | |
v99 = (double)v96 + 0.5; | |
v36 = (double)v97 - 0.1000000014901161; | |
goto LABEL_212; | |
case 5: | |
*(float *)&v98 = (double)v95 + 0.5; | |
v99 = (double)v96 + 0.5; | |
v36 = (double)v97 + 1.100000023841858; | |
LABEL_212: | |
*(float *)&v100 = v36; | |
break; | |
default: | |
break; | |
} | |
*(float *)&v94 = fabs(flt_468724[v2] - v99); | |
v37 = *(float *)&v94; | |
*(float *)&v94 = fabs(flt_468720[v2] - *(float *)&v98); | |
v38 = v37 + *(float *)&v94; | |
*(float *)&v94 = fabs(flt_468728[v2] - *(float *)&v100); | |
v85 = v38 + *(float *)&v94; | |
} | |
v39 = dword_283CDB0; | |
v40 = v87; | |
v41 = 0; | |
v90 = 0; | |
v42 = (int)dword_46880C; | |
break; | |
case 4: | |
v60 = dword_46881C[v2]; | |
if ( v60 == v1 ) | |
{ | |
dword_46881C[v2] = v15 + 3000; | |
if ( v13 == v14 ) | |
sub_414FD0(a1, -300, "wav/pin.wav"); | |
else | |
sub_414EB0(a1, "wav/pin.wav", -300, (int)&flt_468720[v2]); | |
} | |
else | |
{ | |
if ( v15 > v60 ) | |
{ | |
sub_414FD0(a1, 0, "wav/explode.wav"); | |
if ( v87 == dword_283CDB0 ) | |
sub_423F60(a1, 2147483647, dword_283CDB0); | |
dword_46881C[v2] = v1; | |
} | |
} | |
goto LABEL_271; | |
default: | |
goto LABEL_271; | |
} | |
while ( 1 ) | |
{ | |
if ( !*(_DWORD *)(v42 + 4) || v41 == v39 || !*(_DWORD *)v42 || dword_468804[v2] == *(_DWORD *)(v42 - 8) ) | |
goto LABEL_231; | |
if ( v40 == v39 ) | |
{ | |
v43 = *(_DWORD *)(v42 + 32) == 0; | |
} | |
else | |
{ | |
if ( v40 == v41 || !*(_DWORD *)(v42 + 28) ) | |
goto LABEL_231; | |
*(float *)&v94 = *(float *)(v42 - 228) + 1.0; | |
v43 = sub_4221F0(v40, *(float *)(v42 - 236), *(float *)(v42 - 232), *(float *)&v94) == 0; | |
} | |
if ( !v43 ) | |
break; | |
LABEL_231: | |
++v41; | |
v42 += 980; | |
v90 = v41; | |
if ( (_UNKNOWN *)v42 == &unk_47028C ) | |
{ | |
if ( v91 == 0.0 ) | |
{ | |
flt_283D088[21 * dword_283CD18] = 128.0; | |
goto LABEL_251; | |
} | |
goto LABEL_233; | |
} | |
} | |
if ( sub_41A6D0((int)&v104, v42 - 908, (int)&flt_468720[v2], (int)&v101) ) | |
{ | |
v45 = 1; | |
goto LABEL_241; | |
} | |
if ( !sub_41A6D0((int)&v104, v42 - 740, (int)&flt_468720[v2], (int)&v101) ) | |
{ | |
if ( sub_41A6D0((int)&v104, v42 - 824, (int)&flt_468720[v2], (int)&v101) | |
|| sub_41A6D0((int)&v104, v42 - 656, (int)&flt_468720[v2], (int)&v101) | |
|| sub_41A6D0((int)&v104, v42 - 572, (int)&flt_468720[v2], (int)&v101) ) | |
{ | |
v45 = 3; | |
goto LABEL_241; | |
} | |
v39 = dword_283CDB0; | |
v41 = v90; | |
v40 = v87; | |
goto LABEL_231; | |
} | |
v45 = 2; | |
LABEL_241: | |
*(float *)&v94 = fabs(flt_468724[v2] - v102); | |
v46 = *(float *)&v94; | |
*(float *)&v94 = fabs(flt_468720[v2] - *(float *)&v101); | |
v47 = v46 + *(float *)&v94; | |
*(float *)&v94 = fabs(flt_468728[v2] - v103); | |
v92 = v47 + *(float *)&v94; | |
if ( v91 != 0.0 && v92 > (double)v85 ) | |
{ | |
LABEL_233: | |
sub_414EB0(v41, "wav/hitground.wav", 0, (int)&v98); | |
sub_4237C0((int)&v98, 0.25, *LODWORD(v91), 4); | |
flt_283D088[21 * dword_283CD18] = v85; | |
if ( v87 == dword_283CDB0 && sub_4183A0((int)&v95) ) | |
{ | |
v94 = ((v95 | ((v96 | (v97 << 9)) << 9)) << 6) | 0x1B; | |
v44 = off_43D298(20); | |
if ( !v44 ) | |
{ | |
off_43D2A0(); | |
JUMPOUT(*(int *)loc_42522E); | |
} | |
v49 = off_43D298(4); | |
if ( !v49 ) | |
off_43D2A0(); | |
*(_DWORD *)(v44 + 8) = v49; | |
if ( v49 ) | |
{ | |
*(_DWORD *)v49 = v94; | |
*(_DWORD *)v44 = 0; | |
*(_DWORD *)(v44 + 4) = 1; | |
*(_DWORD *)(v44 + 12) = 4; | |
*(_DWORD *)(v44 + 16) = 0; | |
sub_42E540(v44); | |
} | |
else | |
{ | |
off_43D29C(v44); | |
sub_42E540(0); | |
} | |
} | |
goto LABEL_251; | |
} | |
sub_414EB0((int)&v101, "wav/hitplayer.wav", 0, (int)&v101); | |
sub_4237C0((int)&v101, 0.25, -8454144, 4); | |
flt_283D088[21 * dword_283CD18] = v92; | |
if ( v87 == dword_283CDB0 ) | |
{ | |
PathName[0] = 16 * v45 | 4; | |
PathName[1] = v90; | |
v48 = sub_42EEC0(PathName, 2u, 1); | |
sub_42E540(v48); | |
} | |
LABEL_251: | |
v50 = dword_283CD18; | |
v51 = 21 * dword_283CD18; | |
v52 = flt_468750[v2] * 10.0 + flt_468720[v2]; | |
dword_283D090[21 * dword_283CD18] = dword_273CA70; | |
dword_283D08C[v51] = -2; | |
v53 = LODWORD(v104); | |
flt_283D040[v51] = v52; | |
a1 = v50 + 1; | |
v54 = flt_468724[v2]; | |
dword_283CD18 = a1; | |
flt_283D044[v51] = v54 + flt_468754[v2] * 10.0; | |
flt_283D048[v51] = flt_468728[v2] + *(float *)&dword_468758[v2] * 10.0; | |
*(float *)&v94 = fabs(flt_468750[v2]); | |
flt_283D088[v51] = flt_283D088[v51] - 10.0 * (*(float *)&v94 + *(float *)&v94 + *(float *)&v94); | |
flt_283D04C[v51] = flt_468738[v2] * -0.1000000014901161; | |
flt_283D050[v51] = -0.1000000014901161 * flt_46873C[v2]; | |
flt_283D054[v51] = 0.0; | |
flt_283D058[v51] = flt_468750[v2] * 0.1000000014901161; | |
flt_283D05C[v51] = flt_468754[v2] * 0.1000000014901161; | |
flt_283D060[v51] = *(float *)&dword_468758[v2] * 0.1000000014901161; | |
flt_283D064[v51] = flt_468744[v2] * 0.1000000014901161; | |
flt_283D068[v51] = flt_468748[v2] * 0.1000000014901161; | |
flt_283D06C[v51] = 0.1000000014901161 * flt_46874C[v2]; | |
dword_283D070[v51] = v53; | |
dword_283D074[v51] = LODWORD(v105); | |
dword_283D078[v51] = LODWORD(v106); | |
if ( v87 != dword_283CDB0 ) | |
goto LABEL_320; | |
v89 = -0.050000001; | |
a1 = dword_2848700 & 0x3FF; | |
v55 = dword_2848700 & 0x1FF; | |
if ( a1 <= 511 ) | |
{ | |
v94 = dword_2848700 & 0x1FF; | |
v56 = ((double)v55 - 255.5) * -0.00009999999747378752; | |
} | |
else | |
{ | |
v94 = dword_2848700 & 0x1FF; | |
v56 = ((double)v55 - 255.5) * 0.00009999999747378752; | |
} | |
v88 = v56; | |
if ( (dword_4687DC[v2] || dword_4687E0[v2] || dword_4687E4[v2] || dword_4687E8[v2]) && !dword_4687F4[v2] ) | |
{ | |
v89 = -0.1; | |
v57 = 2.0; | |
v88 = v88 * 2.0; | |
} | |
else | |
{ | |
v57 = 2.0; | |
} | |
if ( dword_468814[v2] ) | |
{ | |
v58 = v89 * v57; | |
goto LABEL_266; | |
} | |
if ( dword_4687F0[v2] ) | |
{ | |
v58 = v89 * 0.5; | |
v57 = 0.5; | |
LABEL_266: | |
v89 = v58; | |
v88 = v57 * v88; | |
} | |
--dword_283CD24; | |
if ( !dword_283CD24 && !dword_283CD28 ) | |
dword_468464 = -1; | |
v1 = 0; | |
LABEL_271: | |
if ( v87 == dword_283CDB0 ) | |
{ | |
if ( dword_28485E4 == v1 ) | |
v59 = 0.004000000189989805; | |
else | |
v59 = 0.002000000094994903; | |
v88 = (double)dword_46845C * v59 + v88; | |
v89 = v59 * (double)dword_468460 + v89; | |
if ( *(float *)&dword_468758[v2] < 0.0 && flt_46874C[v2] + v89 < 0.05000000074505806 ) | |
{ | |
v89 = 0.0; | |
v64 = (float)0.0; | |
} | |
else | |
{ | |
v64 = v89; | |
if ( *(float *)&dword_468758[v2] > 0.0 && flt_46874C[v2] - v64 < 0.05000000074505806 ) | |
{ | |
v89 = 0.0; | |
v64 = (float)0.0; | |
} | |
} | |
*(float *)&v94 = v64 + (double)(dword_283D020 - 389239337); | |
v65 = *(float *)&v94; | |
*(float *)&v94 = flt_468740[v2] * flt_273C9E0 * 8.0; | |
sub_41DE20(*(float *)&v94, v65, v88); | |
} | |
LABEL_321: | |
++v87; | |
} | |
while ( v87 != 32 ); | |
result = (signed int)(*(float *)&dword_468758[245 * dword_283CDB0] * *(float *)&dword_468758[245 * dword_283CDB0] * 5.0) | |
- (signed int)((v88 * v88 + v89 * v89) * -2000.0) | |
+ dword_6F5FA4; | |
dword_6F5FA4 = result; | |
if ( result > 24 ) | |
dword_6F5FA4 = 24; | |
return result; | |
} | |
// 424813: using guessed type int(); | |
// 424ADE: using guessed type int(); | |
// 424D7F: using guessed type int(); | |
// 42522E: using guessed type int(); | |
// 43D298: using guessed type int (__cdecl *off_43D298)(_DWORD); | |
// 43D29C: using guessed type int (__cdecl *off_43D29C)(_DWORD); | |
// 43D2A0: using guessed type int (*off_43D2A0)(void); | |
// 46845C: using guessed type int dword_46845C; | |
// 468460: using guessed type int dword_468460; | |
// 468464: using guessed type int dword_468464; | |
// 468480: using guessed type int dword_468480[]; | |
// 468720: using guessed type float flt_468720[]; | |
// 468724: using guessed type float flt_468724[]; | |
// 468728: using guessed type float flt_468728[]; | |
// 46872C: using guessed type float flt_46872C[]; | |
// 468730: using guessed type float flt_468730[]; | |
// 468734: using guessed type float flt_468734[]; | |
// 468738: using guessed type float flt_468738[]; | |
// 46873C: using guessed type float flt_46873C[]; | |
// 468740: using guessed type float flt_468740[]; | |
// 468744: using guessed type float flt_468744[]; | |
// 468748: using guessed type float flt_468748[]; | |
// 46874C: using guessed type float flt_46874C[]; | |
// 468750: using guessed type float flt_468750[]; | |
// 468754: using guessed type float flt_468754[]; | |
// 468758: using guessed type int dword_468758[]; | |
// 4687DC: using guessed type int dword_4687DC[]; | |
// 4687E0: using guessed type int dword_4687E0[]; | |
// 4687E4: using guessed type int dword_4687E4[]; | |
// 4687E8: using guessed type int dword_4687E8[]; | |
// 4687EC: using guessed type int dword_4687EC[]; | |
// 4687F0: using guessed type int dword_4687F0[]; | |
// 4687F4: using guessed type int dword_4687F4[]; | |
// 4687F8: using guessed type int dword_4687F8[]; | |
// 4687FC: using guessed type int dword_4687FC[]; | |
// 468804: using guessed type int dword_468804[]; | |
// 46880C: using guessed type int dword_46880C[]; | |
// 468810: using guessed type int dword_468810[]; | |
// 468814: using guessed type int dword_468814[]; | |
// 468818: using guessed type int dword_468818[]; | |
// 46881C: using guessed type int dword_46881C[]; | |
// 468820: using guessed type int dword_468820[]; | |
// 468830: using guessed type int dword_468830[]; | |
// 6F5FA4: using guessed type int dword_6F5FA4; | |
// 273C9E0: using guessed type float flt_273C9E0; | |
// 273CA70: using guessed type int dword_273CA70; | |
// 273CA74: using guessed type int dword_273CA74; | |
// 283CD18: using guessed type int dword_283CD18; | |
// 283CD1C: using guessed type int dword_283CD1C; | |
// 283CD20: using guessed type int dword_283CD20; | |
// 283CD24: using guessed type int dword_283CD24; | |
// 283CD28: using guessed type int dword_283CD28; | |
// 283CD2C: using guessed type int dword_283CD2C; | |
// 283D020: using guessed type int dword_283D020; | |
// 283D040: using guessed type float flt_283D040[]; | |
// 283D044: using guessed type float flt_283D044[]; | |
// 283D048: using guessed type float flt_283D048[]; | |
// 283D04C: using guessed type float flt_283D04C[]; | |
// 283D050: using guessed type float flt_283D050[]; | |
// 283D054: using guessed type float flt_283D054[]; | |
// 283D058: using guessed type float flt_283D058[]; | |
// 283D05C: using guessed type float flt_283D05C[]; | |
// 283D060: using guessed type float flt_283D060[]; | |
// 283D064: using guessed type float flt_283D064[]; | |
// 283D068: using guessed type float flt_283D068[]; | |
// 283D06C: using guessed type float flt_283D06C[]; | |
// 283D070: using guessed type int dword_283D070[]; | |
// 283D074: using guessed type int dword_283D074[]; | |
// 283D078: using guessed type int dword_283D078[]; | |
// 283D088: using guessed type float flt_283D088[]; | |
// 283D08C: using guessed type int dword_283D08C[]; | |
// 283D090: using guessed type int dword_283D090[]; | |
// 28485E4: using guessed type int dword_28485E4; | |
// 2848700: using guessed type int dword_2848700; | |
// 2848708: using guessed type int dword_2848708; | |
//----- (00425C10) -------------------------------------------------------- | |
void __cdecl sub_425C10() | |
{ | |
if ( dword_46FFD0 ) | |
{ | |
free(dword_46FFD0); | |
dword_46FFD0 = 0; | |
dword_46FFCC = 0; | |
} | |
if ( dword_2842440 ) | |
{ | |
free(dword_2842440); | |
dword_2842440 = 0; | |
} | |
if ( dword_273CA78 ) | |
{ | |
free(dword_273CA78); | |
dword_273CA78 = 0; | |
} | |
if ( dword_283CD10 ) | |
{ | |
free(dword_283CD10); | |
dword_283CD10 = 0; | |
} | |
if ( dword_273C9DC ) | |
{ | |
free(dword_273C9DC); | |
dword_273C9DC = 0; | |
} | |
if ( dword_28487FC ) | |
{ | |
free(dword_28487FC); | |
dword_28487FC = 0; | |
} | |
if ( dword_283CF18 ) | |
{ | |
free(dword_283CF18); | |
dword_283CF18 = 0; | |
} | |
sub_419F20(); | |
sub_42F620(); | |
timeEndPeriod(1u); | |
WSACleanup(); | |
if ( dword_46846C ) | |
{ | |
free(dword_46846C); | |
dword_46846C = 0; | |
} | |
} | |
// 46FFCC: using guessed type int dword_46FFCC; | |
//----- (00425D00) -------------------------------------------------------- | |
void __usercall sub_425D00(__m64 a1<mm5>, __m128 a2<xmm1>, __m128 a3<xmm7>) | |
{ | |
double v3; // st7@1 | |
unsigned int v4; // ecx@3 | |
double v5; // st7@3 | |
__int32 v6; // ecx@6 | |
signed int v7; // esi@6 | |
signed int v8; // ebx@6 | |
int v9; // edi@6 | |
signed int v10; // edx@6 | |
void *v11; // ebx@21 | |
int v12; // esi@21 | |
signed int *v13; // ebp@21 | |
signed int v14; // edx@21 | |
int v15; // eax@21 | |
int v16; // esi@22 | |
int v17; // eax@22 | |
double v18; // st7@22 | |
double v19; // st7@22 | |
float *v20; // eax@23 | |
int v21; // eax@24 | |
int v22; // eax@24 | |
int v23; // ecx@24 | |
int v24; // eax@27 | |
int v25; // eax@28 | |
int v26; // ecx@30 | |
int v27; // ecx@31 | |
int v28; // ecx@36 | |
int v29; // ecx@37 | |
int v30; // edx@48 | |
int v31; // eax@48 | |
int v32; // eax@50 | |
char *v33; // eax@51 | |
char *v34; // edx@51 | |
char v35; // cl@52 | |
int v36; // ecx@58 | |
void *v37; // ecx@61 | |
unsigned int v38; // ecx@62 | |
int v39; // eax@62 | |
int v40; // edx@62 | |
char *v41; // eax@64 | |
int v42; // edx@64 | |
char v43; // cl@65 | |
int v44; // eax@66 | |
int v45; // eax@66 | |
__int32 v46; // ebp@69 | |
int v47; // edx@69 | |
int v48; // edi@69 | |
int v49; // esi@69 | |
int v50; // ecx@69 | |
char *v51; // eax@71 | |
bool v52; // cf@72 | |
char v53; // dl@74 | |
int v54; // eax@76 | |
char *v55; // eax@79 | |
char *v56; // ecx@79 | |
char v57; // dl@80 | |
unsigned int v58; // eax@81 | |
const void *v59; // esi@81 | |
void *v60; // edi@81 | |
char v61; // cl@82 | |
unsigned int v62; // eax@93 | |
int v63; // esi@94 | |
unsigned int v64; // esi@96 | |
char *v65; // eax@96 | |
char v66; // cl@97 | |
char *v67; // eax@98 | |
char v68; // cl@99 | |
int v69; // edx@100 | |
int v70; // ecx@100 | |
int v71; // edx@100 | |
char v72; // cl@101 | |
int v73; // ecx@102 | |
int v74; // edx@102 | |
int v75; // ecx@102 | |
int v76; // eax@103 | |
int v77; // edx@104 | |
unsigned int v78; // edx@104 | |
char *v79; // eax@104 | |
char v80; // cl@105 | |
void *v81; // edi@106 | |
char v82; // al@107 | |
char v83; // al@109 | |
int v84; // eax@111 | |
unsigned int v85; // ecx@112 | |
char *v86; // eax@112 | |
char v87; // dl@113 | |
void *v88; // edi@117 | |
char v89; // al@118 | |
int v90; // edi@119 | |
void *v91; // edi@122 | |
char v92; // al@123 | |
int v93; // eax@125 | |
int v94; // eax@125 | |
void (__cdecl *v95)(_DWORD); // eax@127 | |
double v96; // st7@136 | |
double v97; // st6@136 | |
double v98; // st7@137 | |
int v99; // ecx@138 | |
int v100; // ebp@138 | |
char *v101; // eax@139 | |
int v102; // edx@139 | |
int v103; // ecx@141 | |
int v104; // eax@142 | |
char *v105; // esi@142 | |
char *v106; // ST64_4@142 | |
int v107; // edx@147 | |
int v108; // ebp@149 | |
int v109; // esi@149 | |
signed int v110; // edi@152 | |
signed int v111; // eax@152 | |
double v112; // ST4C_8@152 | |
int v113; // ecx@152 | |
double v114; // st7@152 | |
int v115; // esi@153 | |
int v116; // edi@156 | |
__int32 v117; // edx@165 | |
int v118; // ecx@166 | |
int v119; // eax@166 | |
int v120; // ecx@174 | |
float v121; // ecx@178 | |
float v122; // edx@178 | |
double v123; // st5@178 | |
double v124; // st4@178 | |
double v125; // st5@178 | |
double v126; // st4@180 | |
bool v127; // c0@180 | |
bool v128; // c3@180 | |
double v129; // st7@180 | |
int v130; // esi@182 | |
signed int v131; // eax@182 | |
double v132; // ST4C_8@182 | |
signed int v133; // ebp@182 | |
signed int v134; // edi@182 | |
float v135; // ST64_4@189 | |
float v136; // ST50_4@189 | |
float v137; // edx@200 | |
float v138; // eax@200 | |
float v139; // ST64_4@203 | |
long double v140; // st6@203 | |
long double v141; // st5@203 | |
double v142; // st6@203 | |
long double v143; // st6@203 | |
long double v144; // st5@203 | |
double v145; // st6@203 | |
long double v146; // st7@203 | |
long double v147; // st6@203 | |
double v148; // st7@203 | |
long double v149; // st7@209 | |
int v150; // eax@216 | |
int v151; // eax@218 | |
int v152; // ecx@218 | |
int v153; // eax@220 | |
int v154; // eax@225 | |
char v155; // cl@226 | |
int v156; // eax@227 | |
__int32 v157; // esi@227 | |
char *v158; // eax@227 | |
char *v159; // edx@227 | |
char v160; // cl@228 | |
int v161; // ecx@229 | |
int v162; // eax@229 | |
unsigned int v163; // edx@229 | |
int v164; // esi@240 | |
__int32 v165; // eax@244 | |
int v166; // esi@248 | |
int v167; // edi@252 | |
__int32 v168; // edi@258 | |
int v169; // ebx@263 | |
int v170; // esi@271 | |
int v171; // edi@274 | |
__int32 v172; // eax@279 | |
__int32 v173; // eax@280 | |
__int32 v174; // ecx@281 | |
int v175; // esi@285 | |
int v176; // edi@288 | |
int v177; // eax@293 | |
char *v178; // eax@293 | |
int v179; // edx@293 | |
char v180; // cl@294 | |
size_t v181; // edi@295 | |
void *v182; // ebx@298 | |
int v183; // eax@305 | |
float v184; // edx@308 | |
int v185; // eax@308 | |
float v186; // ecx@310 | |
float v187; // edx@310 | |
int v188; // eax@310 | |
int v189; // eax@310 | |
int v190; // ecx@311 | |
int v191; // ebx@317 | |
int v192; // eax@327 | |
int v193; // eax@337 | |
int v194; // edx@347 | |
int v195; // ecx@347 | |
signed int v196; // eax@347 | |
int v197; // eax@370 | |
int v198; // eax@381 | |
unsigned int v199; // eax@383 | |
int v200; // eax@386 | |
int v201; // eax@391 | |
int v202; // edx@393 | |
float *v203; // edi@405 | |
float *v204; // ebx@405 | |
float *v205; // esi@405 | |
int v206; // ebp@407 | |
int v207; // edx@407 | |
int v208; // ecx@408 | |
float v209; // ST64_4@410 | |
int v210; // ecx@412 | |
int v211; // edi@413 | |
int v212; // edx@414 | |
int v213; // ebx@415 | |
int v214; // esi@416 | |
int v215; // eax@416 | |
int v216; // edi@422 | |
int v217; // ebx@422 | |
signed int v218; // eax@422 | |
int v219; // eax@422 | |
double v220; // st7@422 | |
bool v221; // sf@422 | |
double v222; // st7@423 | |
bool v223; // zf@425 | |
double v224; // st6@426 | |
double v225; // st5@426 | |
double v226; // st4@426 | |
double v227; // st4@427 | |
double v228; // st4@427 | |
double v229; // st4@428 | |
double v230; // st7@430 | |
double v231; // st7@431 | |
int v232; // esi@434 | |
double v233; // st6@439 | |
float v234; // ST50_4@442 | |
double v235; // st7@442 | |
float v236; // ST4C_4@443 | |
float v237; // ST4C_4@444 | |
int v238; // ebx@445 | |
double v239; // st6@447 | |
float v240; // ST4C_4@452 | |
float v241; // ST48_4@452 | |
int v242; // eax@453 | |
int v243; // ecx@455 | |
DWORD v244; // edx@456 | |
float v245; // ST64_4@456 | |
signed int v246; // edx@456 | |
int v247; // eax@459 | |
int v248; // edx@461 | |
int v249; // eax@462 | |
int v250; // esi@463 | |
int v251; // eax@466 | |
int v252; // eax@467 | |
signed int v253; // ecx@467 | |
double v254; // st7@471 | |
double v255; // st7@474 | |
double v256; // st7@478 | |
double v257; // st7@483 | |
double v258; // st7@488 | |
__int32 v259; // ecx@496 | |
double v260; // st7@498 | |
double v261; // st7@501 | |
double v262; // st6@501 | |
double v263; // st6@502 | |
float v264; // ST64_4@506 | |
char v265; // al@507 | |
int v266; // esi@508 | |
int v267; // edi@511 | |
int v268; // ebx@516 | |
int v269; // edi@520 | |
__int32 v270; // edi@528 | |
signed int v271; // esi@528 | |
int v272; // ebp@528 | |
int v273; // eax@528 | |
int v274; // ecx@528 | |
signed int v275; // ecx@532 | |
int v276; // edx@537 | |
int v277; // eax@538 | |
int v278; // eax@542 | |
int v279; // ecx@543 | |
int v280; // ecx@544 | |
float v281; // ST50_4@551 | |
float v282; // ST48_4@551 | |
int v283; // edx@552 | |
float v284; // ST50_4@555 | |
float v285; // ST48_4@555 | |
float v286; // ST64_4@557 | |
double v287; // st7@557 | |
float v288; // ST64_4@560 | |
float v289; // ST50_4@560 | |
double v290; // qt1@560 | |
double v291; // st6@560 | |
float v292; // ST48_4@560 | |
int v293; // ecx@561 | |
int v294; // edi@563 | |
float v295; // ST64_4@564 | |
int v296; // eax@567 | |
int v297; // ecx@567 | |
int v298; // eax@569 | |
char *v299; // edx@569 | |
char v300; // cl@570 | |
int v301; // ecx@571 | |
int v302; // edx@571 | |
int v303; // eax@571 | |
char v304; // cl@574 | |
int v305; // ecx@576 | |
int v306; // eax@579 | |
unsigned int v307; // kr04_4@595 | |
int v308; // eax@595 | |
char v309; // al@596 | |
int v310; // ecx@598 | |
int v311; // ecx@601 | |
_UNKNOWN *v312; // eax@601 | |
int v313; // ecx@608 | |
int v314; // eax@608 | |
char v315; // dl@609 | |
int v316; // edi@610 | |
char v317; // dl@611 | |
int v318; // ebp@615 | |
int v319; // edi@616 | |
signed int v320; // eax@618 | |
double v321; // st7@618 | |
int v322; // esi@618 | |
int v323; // ecx@618 | |
double v324; // st7@624 | |
int v325; // eax@630 | |
int v326; // esi@631 | |
signed int v327; // eax@634 | |
void *v328; // ecx@634 | |
signed int v329; // eax@639 | |
double v330; // st7@639 | |
int v331; // edi@639 | |
signed int v332; // eax@639 | |
double v333; // st7@639 | |
int v334; // eax@644 | |
char *v335; // edx@644 | |
char v336; // cl@645 | |
int v337; // ecx@646 | |
int v338; // edx@646 | |
int v339; // eax@646 | |
char v340; // cl@649 | |
int v341; // ecx@651 | |
int v342; // eax@654 | |
char *v343; // edx@654 | |
char v344; // cl@655 | |
int v345; // ecx@656 | |
int v346; // edx@656 | |
int v347; // eax@656 | |
char v348; // cl@659 | |
int v349; // ecx@661 | |
int v350; // ecx@664 | |
int v351; // eax@667 | |
int v352; // eax@667 | |
int v353; // eax@668 | |
int v354; // eax@668 | |
int v355; // ecx@673 | |
int v356; // ecx@674 | |
int v357; // edx@674 | |
int v358; // eax@674 | |
int v359; // edi@678 | |
void *v360; // [sp+30h] [bp-A8h]@567 | |
int v361; // [sp+30h] [bp-A8h]@583 | |
int *v362; // [sp+30h] [bp-A8h]@619 | |
int v363; // [sp+30h] [bp-A8h]@625 | |
int v364; // [sp+34h] [bp-A4h]@567 | |
int v365; // [sp+34h] [bp-A4h]@583 | |
int v366; // [sp+34h] [bp-A4h]@619 | |
int v367; // [sp+34h] [bp-A4h]@625 | |
int v368; // [sp+38h] [bp-A0h]@567 | |
int v369; // [sp+38h] [bp-A0h]@583 | |
int v370; // [sp+38h] [bp-A0h]@619 | |
int v371; // [sp+38h] [bp-A0h]@625 | |
int v372; // [sp+3Ch] [bp-9Ch]@567 | |
int v373; // [sp+3Ch] [bp-9Ch]@583 | |
int v374; // [sp+3Ch] [bp-9Ch]@619 | |
int v375; // [sp+3Ch] [bp-9Ch]@625 | |
int v376; // [sp+40h] [bp-98h]@567 | |
int v377; // [sp+40h] [bp-98h]@583 | |
int v378; // [sp+40h] [bp-98h]@619 | |
int v379; // [sp+40h] [bp-98h]@625 | |
int v380; // [sp+44h] [bp-94h]@567 | |
int v381; // [sp+44h] [bp-94h]@583 | |
int v382; // [sp+44h] [bp-94h]@619 | |
int v383; // [sp+44h] [bp-94h]@625 | |
int v384; // [sp+44h] [bp-94h]@634 | |
signed int v385; // [sp+48h] [bp-90h]@567 | |
signed int v386; // [sp+48h] [bp-90h]@619 | |
signed int v387; // [sp+48h] [bp-90h]@625 | |
signed int v388; // [sp+48h] [bp-90h]@634 | |
int v389; // [sp+4Ch] [bp-8Ch]@42 | |
signed __int64 v390; // [sp+4Ch] [bp-8Ch]@163 | |
signed int v391; // [sp+4Ch] [bp-8Ch]@567 | |
signed __int64 v392; // [sp+4Ch] [bp-8Ch]@619 | |
signed __int64 v393; // [sp+4Ch] [bp-8Ch]@625 | |
signed __int64 v394; // [sp+4Ch] [bp-8Ch]@634 | |
int v395; // [sp+50h] [bp-88h]@42 | |
int v396; // [sp+50h] [bp-88h]@53 | |
int v397; // [sp+50h] [bp-88h]@162 | |
int v398; // [sp+50h] [bp-88h]@233 | |
float v399; // [sp+50h] [bp-88h]@442 | |
float v400; // [sp+50h] [bp-88h]@447 | |
int v401; // [sp+50h] [bp-88h]@592 | |
float v402; // [sp+64h] [bp-74h]@1 | |
float v403; // [sp+64h] [bp-74h]@178 | |
float v404; // [sp+64h] [bp-74h]@423 | |
float v405; // [sp+64h] [bp-74h]@441 | |
float v406; // [sp+64h] [bp-74h]@500 | |
int i; // [sp+68h] [bp-70h]@24 | |
int v408; // [sp+6Ch] [bp-6Ch]@22 | |
int v409; // [sp+70h] [bp-68h]@66 | |
int v410; // [sp+74h] [bp-64h]@69 | |
int v411; // [sp+78h] [bp-60h]@22 | |
int v412; // [sp+7Ch] [bp-5Ch]@412 | |
float v413; // [sp+80h] [bp-58h]@21 | |
LARGE_INTEGER PerformanceCount; // [sp+84h] [bp-54h]@1 | |
float v415; // [sp+8Ch] [bp-4Ch]@9 | |
int v416; // [sp+98h] [bp-40h]@55 | |
int v417; // [sp+9Ch] [bp-3Ch]@55 | |
int v418; // [sp+A0h] [bp-38h]@55 | |
int v419; // [sp+A4h] [bp-34h]@183 | |
int v420; // [sp+A8h] [bp-30h]@183 | |
int v421; // [sp+ACh] [bp-2Ch]@183 | |
float v422; // [sp+B0h] [bp-28h]@168 | |
float v423; // [sp+B4h] [bp-24h]@168 | |
float v424; // [sp+B8h] [bp-20h]@168 | |
float v425; // [sp+BCh] [bp-1Ch]@178 | |
float v426; // [sp+C0h] [bp-18h]@178 | |
float v427; // [sp+C4h] [bp-14h]@178 | |
float v428; // [sp+C8h] [bp-10h]@470 | |
float v429; // [sp+CCh] [bp-Ch]@470 | |
float v430; // [sp+D0h] [bp-8h]@470 | |
v402 = flt_28485E0; | |
QueryPerformanceCounter(&PerformanceCount); | |
*(_QWORD *)&PerformanceCount -= *(_QWORD *)&::PerformanceCount; | |
flt_28485E0 = (double)*(signed __int64 *)&PerformanceCount * flt_467D14; | |
v3 = flt_28485E0; | |
if ( v402 + 0.01999999955296516 > flt_28485E0 ) | |
{ | |
flt_28485E0 = v402; | |
return; | |
} | |
dword_2848700 = (signed int)(v3 * 1000.0); | |
flt_273C9E0 = v3 - v402; | |
sub_414A70(); | |
dword_468454 = dword_468458; | |
sub_4147E0(v4); | |
v5 = 0.5; | |
if ( sub_42DE60((int)dword_2848704, (unsigned int)dword_2848704, (signed int)&dword_28425A0, 0) ) | |
{ | |
while ( 1 ) | |
{ | |
if ( dword_28425A0 == 2 ) | |
sub_416030("Server disconnect or kick: also check latest game version"); | |
if ( dword_28425A0 == 3 ) | |
{ | |
v11 = dword_28425B0; | |
v12 = *((_DWORD *)dword_28425B0 + 2); | |
v13 = (signed int *)*((_DWORD *)dword_28425B0 + 2); | |
v14 = *v13; | |
v15 = *v13 & 0xF; | |
LODWORD(v413) = *((_DWORD *)dword_28425B0 + 2); | |
switch ( v15 ) | |
{ | |
case 1: | |
v16 = *(_BYTE *)(v12 + 1); | |
v408 = v16; | |
v16 *= 980; | |
v17 = *((_DWORD *)dword_28425B0 + 2); | |
*(_DWORD *)((char *)flt_468750 + v16) = *(_DWORD *)(v17 + 2); | |
*(_DWORD *)((char *)flt_468754 + v16) = *(_DWORD *)(v17 + 6); | |
*(int *)((char *)dword_468758 + v16) = *(_DWORD *)(v17 + 10); | |
*(float *)&v411 = sqrt(*(float *)((char *)flt_468754 + v16) * *(float *)((char *)flt_468754 + v16) + *(float *)((char *)flt_468750 + v16) * *(float *)((char *)flt_468750 + v16)); | |
v18 = *(float *)&v411; | |
*(float *)((char *)flt_468738 + v16) = -*(float *)((char *)flt_468754 + v16) / *(float *)&v411; | |
*(float *)&v411 = *(float *)((char *)flt_468750 + v16) / v18; | |
v19 = *(float *)&v411; | |
*(float *)((char *)flt_46873C + v16) = *(float *)&v411; | |
*(float *)((char *)flt_468744 + v16) = v19 * -*(float *)((char *)dword_468758 + v16); | |
*(float *)((char *)flt_468748 + v16) = *(float *)((char *)flt_468738 + v16) | |
* *(float *)((char *)dword_468758 + v16); | |
*(float *)((char *)flt_46874C + v16) = *(float *)((char *)flt_46873C + v16) | |
* *(float *)((char *)flt_468750 + v16) | |
- *(float *)((char *)flt_468738 + v16) | |
* *(float *)((char *)flt_468754 + v16); | |
goto LABEL_127; | |
case 0: | |
v20 = &flt_468720[245 * *(_BYTE *)(v12 + 1)]; | |
*(_DWORD *)v20 = *(_DWORD *)(v12 + 2); | |
*((_DWORD *)v20 + 1) = *(_DWORD *)(v12 + 6); | |
*((_DWORD *)v20 + 2) = *(_DWORD *)(v12 + 10); | |
goto LABEL_127; | |
case 2: | |
v21 = *(_BYTE *)(v12 + 1); | |
v408 = v21; | |
v22 = 245 * v21; | |
v23 = dword_4687DC[v22] != 0; | |
i = dword_4687DC[v22] != 0; | |
dword_4687DC[v22] = ((unsigned int)**((_BYTE **)dword_28425B0 + 2) >> 4) & 1; | |
dword_4687E0[v22] = ((unsigned int)**((_BYTE **)v11 + 2) >> 5) & 1; | |
dword_4687E4[v22] = ((unsigned int)**((_BYTE **)v11 + 2) >> 6) & 1; | |
dword_4687E8[v22] = (unsigned int)**((_BYTE **)v11 + 2) >> 7; | |
if ( !v23 && **((_BYTE **)v11 + 2) & 0xF0 ) | |
dword_468820[v22] = dword_2848700 + 256; | |
goto LABEL_127; | |
case 3: | |
v24 = *(_BYTE *)(v12 + 1); | |
v408 = *(_BYTE *)(v12 + 1); | |
i = ((unsigned int)**((_BYTE **)dword_28425B0 + 2) >> 6) & 1; | |
if ( i ) | |
{ | |
v25 = 245 * v24; | |
if ( !dword_4687F0[v25] ) | |
{ | |
dword_4687F0[v25] = 1; | |
if ( !dword_468814[v25] ) | |
flt_468728[v25] = flt_468728[v25] + 0.8999999761581421; | |
if ( dword_468804[v25] ) | |
{ | |
v29 = dword_273CA58; | |
dword_4684D0[v25] = dword_273CA4C; | |
dword_468620[v25] = v29; | |
dword_4685CC[v25] = v29; | |
} | |
else | |
{ | |
dword_4684D0[v25] = dword_273CA30; | |
v28 = dword_273CA3C; | |
dword_468620[v25] = dword_273CA3C; | |
dword_4685CC[v25] = v28; | |
} | |
} | |
} | |
else | |
{ | |
v25 = 245 * v24; | |
if ( dword_4687F0[v25] ) | |
{ | |
dword_4687F0[v25] = 0; | |
flt_468728[v25] = flt_468728[v25] - 0.8999999761581421; | |
if ( dword_468804[v25] ) | |
{ | |
v27 = dword_273CA54; | |
dword_4684D0[v25] = dword_273CA48; | |
dword_468620[v25] = v27; | |
dword_4685CC[v25] = v27; | |
} | |
else | |
{ | |
dword_4684D0[v25] = dword_273CA2C; | |
v26 = dword_273CA38; | |
dword_468620[v25] = dword_273CA38; | |
dword_4685CC[v25] = v26; | |
} | |
} | |
} | |
dword_4687F8[v25] = ((unsigned int)**((_BYTE **)v11 + 2) >> 4) & 1; | |
dword_4687EC[v25] = ((unsigned int)**((_BYTE **)v11 + 2) >> 5) & 1; | |
dword_4687F4[v25] = (unsigned int)**((_BYTE **)v11 + 2) >> 7; | |
goto LABEL_127; | |
case 4: | |
if ( (unsigned int)*(_BYTE *)v12 >> 4 == 1 ) | |
{ | |
v395 = *(_BYTE *)(v12 + 1); | |
v389 = 40; | |
} | |
else | |
{ | |
if ( (unsigned int)*(_BYTE *)v12 >> 4 == 2 ) | |
{ | |
v4 = *(_BYTE *)(v12 + 1); | |
v395 = *(_BYTE *)(v12 + 1); | |
v389 = 2147483647; | |
} | |
else | |
{ | |
if ( (unsigned int)*(_BYTE *)v12 >> 4 != 3 ) | |
goto LABEL_46; | |
v395 = *(_BYTE *)(v12 + 1); | |
v389 = 25; | |
} | |
} | |
sub_423F60(v4, v389, v395); | |
LABEL_46: | |
sub_414FD0(v4, 0, "wav/hitplayer.wav"); | |
LABEL_47: | |
v11 = dword_28425B0; | |
goto LABEL_127; | |
case 13: | |
v30 = (v14 >> 4) & 0x1F; | |
i = v30; | |
v31 = (*v13 >> 9) & 0x1F; | |
v408 = v31; | |
if ( v30 != v31 ) | |
++dword_468824[245 * v30]; | |
v32 = 245 * v31; | |
dword_46880C[v32] = 0; | |
if ( v30 == dword_283CDB0 ) | |
{ | |
*(_DWORD *)unk_2842480 = dword_438F68; | |
byte_284248E[0] = byte_438F76; | |
qword_2842484 = qword_438F6C; | |
v33 = (char *)&unk_468844 + v32 * 4; | |
word_284248C = word_438F74; | |
v34 = (char *)(byte_284248E - v33); | |
do | |
{ | |
v35 = *v33; | |
v33[(_DWORD)v34] = *v33; | |
++v33; | |
} | |
while ( v35 ); | |
v396 = 4; | |
goto LABEL_54; | |
} | |
goto LABEL_127; | |
case 11: | |
v416 = (v14 >> 6) & 0x1FF; | |
v417 = (v14 >> 15) & 0x1FF; | |
v418 = (v14 >> 24) & 0x3F; | |
switch ( (v14 >> 4) & 3 ) | |
{ | |
case 0: | |
sub_419E40(dword_468800[245 * *(_BYTE *)(v12 + 4)], (int)&v416); | |
*(float *)&PerformanceCount.LowPart = (double)v416 + 0.5; | |
*(float *)&PerformanceCount.HighPart = (double)v417 + 0.5; | |
v415 = (double)v418 + 0.5; | |
sub_414EB0((int)&PerformanceCount, "wav/build.wav", -700, (int)&PerformanceCount); | |
v11 = dword_28425B0; | |
break; | |
case 1: | |
sub_419DE0((int)&v416); | |
v11 = dword_28425B0; | |
break; | |
case 2: | |
i = sub_416E30((v14 >> 15) & 0x1FF, (v14 >> 24) & 0x3F, (v14 >> 6) & 0x1FF); | |
sub_419D30((int)&v416); | |
*(float *)&PerformanceCount.LowPart = (double)v416 + 0.5; | |
*(float *)&PerformanceCount.HighPart = (double)v417 + 0.5; | |
v415 = (double)v418 + 0.5; | |
sub_414EB0(v36, "wav/hitground.wav", 0, (int)&PerformanceCount); | |
if ( !i ) | |
goto LABEL_47; | |
sub_4237C0((int)&PerformanceCount, 0.25, *(_DWORD *)i, 6); | |
v11 = dword_28425B0; | |
break; | |
case 3: | |
sub_419C40((int)&v416); | |
v11 = dword_28425B0; | |
break; | |
default: | |
goto LABEL_127; | |
} | |
goto LABEL_127; | |
case 5: | |
v37 = (void *)*(_BYTE *)(v12 + 1); | |
*(float *)&v411 = *(float *)(v12 + 2) + (double)dword_2848700; | |
sub_422100(v37, *(float *)&v411); | |
goto LABEL_127; | |
case 6: | |
i = *(_BYTE *)(v12 + 1); | |
v38 = (unsigned int)**((_BYTE **)dword_28425B0 + 2) >> 4; | |
v39 = 245 * i; | |
v40 = dword_273CA00[v38]; | |
dword_4687FC[245 * i] = v38; | |
dword_4686C8[v39] = v40; | |
dword_46881C[v39] = 0; | |
goto LABEL_127; | |
case 7: | |
dword_468800[245 * *(_BYTE *)(v12 + 4)] = v14 >> 4; | |
goto LABEL_127; | |
case 14: | |
v41 = (char *)&unk_468844 + 980 * *(_BYTE *)(v12 + 1); | |
v42 = (int)unk_2842480; | |
do | |
{ | |
v43 = *v41; | |
*(_BYTE *)v42++ = *v41++; | |
} | |
while ( v43 ); | |
v44 = strlen(unk_2842480); | |
v409 = v44; | |
unk_2842480[v44] = 58; | |
strncpy((char *)&unk_2842481 + v44, (const char *)(*((_DWORD *)v11 + 2) + 2), 0x5Fu); | |
v45 = *((_DWORD *)dword_28425B0 + 2); | |
if ( (*(_BYTE *)v45 & 0xF0) == 16 ) | |
v396 = dword_468804[245 * *(_BYTE *)(v45 + 1)]; | |
else | |
v396 = dword_468804[245 * *(_BYTE *)(v45 + 1)] + 2; | |
LABEL_54: | |
sub_423410(unk_2842480, v396); | |
v11 = dword_28425B0; | |
goto LABEL_127; | |
case 10: | |
v46 = dword_283CDB0; | |
v47 = (v14 >> 4) & 0x1F; | |
v48 = v47; | |
v408 = v47; | |
v49 = (*LODWORD(v413) >> 9) & 0x1FF; | |
v50 = v49 >= 256; | |
v409 = (*LODWORD(v413) >> 9) & 0x1FF; | |
v410 = v49 >= 256; | |
if ( v47 == dword_283CDB0 && dword_28485E8 ) | |
{ | |
dword_28485E8 = 0; | |
sub_419180( | |
(const char *)&unk_468844 + 980 * dword_283CDB0, | |
dword_283CDB0, | |
v49 >= 256, | |
3, | |
0, | |
(int)&unk_7F7F7F); | |
v46 = dword_283CDB0; | |
v50 = (int)"Deuce"; | |
v51 = (char *)&unk_468844 + 980 * dword_283CDB0; | |
while ( 1 ) | |
{ | |
v52 = (unsigned __int8)*v51 < *(_BYTE *)v50; | |
if ( *v51 != *(_BYTE *)v50 ) | |
break; | |
if ( !*v51 ) | |
goto LABEL_76; | |
v53 = v51[1]; | |
v52 = (unsigned __int8)v53 < *(_BYTE *)(v50 + 1); | |
if ( v53 != *(_BYTE *)(v50 + 1) ) | |
break; | |
v51 += 2; | |
v50 += 2; | |
if ( !v53 ) | |
{ | |
LABEL_76: | |
v54 = 0; | |
goto LABEL_78; | |
} | |
} | |
v54 = -v52 - (v52 - 1); | |
LABEL_78: | |
if ( !v54 ) | |
{ | |
v55 = _ltoa(dword_283CDB0, unk_2842480, 10); | |
v56 = v55; | |
do | |
v57 = *v55++; | |
while ( v57 ); | |
v46 = dword_283CDB0; | |
v58 = v55 - v56; | |
v59 = v56; | |
v60 = (char *)&unk_468844 + 980 * dword_283CDB0 - 1; | |
do | |
{ | |
v61 = *((_BYTE *)v60 + 1); | |
v60 = (char *)v60 + 1; | |
} | |
while ( v61 ); | |
memcpy(v60, v59, v58); | |
v50 = 0; | |
} | |
goto LABEL_84; | |
} | |
if ( !dword_468810[245 * v47] ) | |
{ | |
sub_419180((const char *)(LODWORD(v413) + 4), v47, v49 >= 256, 3, 0, (int)&unk_7F7F7F); | |
v46 = dword_283CDB0; | |
LABEL_84: | |
v48 = v408; | |
v49 = v409; | |
v11 = dword_28425B0; | |
goto LABEL_85; | |
} | |
if ( v50 != dword_468804[245 * v47] ) | |
sub_417530(v47, v50); | |
LABEL_85: | |
if ( v48 == v46 ) | |
{ | |
sub_414FD0(v50, -300, "wav/switch.wav"); | |
sub_422760(); | |
v48 = v408; | |
v49 = v409; | |
v11 = dword_28425B0; | |
} | |
sub_4173C0(v48, v49, ((*LODWORD(v413) >> 18) & 0xFF) + 128, (*LODWORD(v413) >> 26) & 0x3F); | |
LABEL_127: | |
v95 = (void (__cdecl *)(_DWORD))*((_DWORD *)v11 + 4); | |
if ( v95 ) | |
v95(v11); | |
if ( !(*((_BYTE *)v11 + 4) & 4) ) | |
off_43D29C(*((_DWORD *)v11 + 2)); | |
off_43D29C(v11); | |
break; | |
case 9: | |
switch ( (v14 >> 4) & 3 ) | |
{ | |
case 0: | |
v62 = 21 * ((unsigned int)*(_BYTE *)v12 >> 6); | |
v411 = *(_BYTE *)(v12 + 1); | |
flt_283D048[v62] = (double)v411; | |
break; | |
case 1: | |
v63 = *(_BYTE *)(v12 + 1); | |
v408 = v63; | |
if ( v63 == dword_283CDB0 ) | |
{ | |
sub_414FD0(v4, -700, "wav/pickup.wav"); | |
v63 = v408; | |
} | |
v64 = 980 * v63; | |
v65 = (char *)&unk_468844 + v64; | |
do | |
{ | |
v66 = *v65; | |
v65[unk_2842480 - ((char *)&unk_468844 + v64)] = *v65; | |
++v65; | |
} | |
while ( v66 ); | |
v67 = &unk_2842480[-1]; | |
if ( dword_468804[v64 / 4] ) | |
{ | |
do | |
v72 = (v67++)[1]; | |
while ( v72 ); | |
v73 = dword_438FB0; | |
*(_DWORD *)v67 = dword_438FAC; | |
v74 = dword_438FB4; | |
*((_DWORD *)v67 + 1) = v73; | |
v75 = dword_438FB8; | |
*((_DWORD *)v67 + 2) = v74; | |
LOBYTE(v74) = byte_438FBC; | |
*((_DWORD *)v67 + 3) = v75; | |
v67[16] = v74; | |
} | |
else | |
{ | |
do | |
v68 = (v67++)[1]; | |
while ( v68 ); | |
v69 = dword_438F9C; | |
*(_DWORD *)v67 = dword_438F98; | |
v70 = dword_438FA0; | |
*((_DWORD *)v67 + 1) = v69; | |
v71 = dword_438FA4; | |
*((_DWORD *)v67 + 2) = v70; | |
LOWORD(v70) = word_438FA8; | |
*((_DWORD *)v67 + 3) = v71; | |
*((_WORD *)v67 + 8) = v70; | |
} | |
sub_423410(unk_2842480, 4); | |
v76 = 245 * v408; | |
v11 = dword_28425B0; | |
dword_468808[245 * v408] = 1; | |
dword_283D08C[21 * (dword_468804[v76] == 0)] = -4; | |
break; | |
case 2: | |
v77 = (v14 >> 6) & 0x1F; | |
v408 = v77; | |
v78 = 980 * v77; | |
v79 = (char *)&unk_468844 + v78; | |
do | |
{ | |
v80 = *v79; | |
v79[unk_2842480 - ((char *)&unk_468844 + v78)] = *v79; | |
++v79; | |
} | |
while ( v80 ); | |
v81 = &unk_2842480[-1]; | |
v409 = dword_468804[v78 / 4] == 0; | |
if ( v409 ) | |
{ | |
do | |
{ | |
v82 = *((_BYTE *)v81 + 1); | |
v81 = (char *)v81 + 1; | |
} | |
while ( v82 ); | |
memcpy(v81, " has dropped Green Intel!", 0x1Au); | |
} | |
else | |
{ | |
do | |
{ | |
v83 = *((_BYTE *)v81 + 1); | |
v81 = (char *)v81 + 1; | |
} | |
while ( v83 ); | |
memcpy(v81, " has dropped Blue Intel!", 0x19u); | |
} | |
sub_423410(unk_2842480, 4); | |
v84 = 21 * v409; | |
dword_283D08C[21 * v409] = -1; | |
v11 = dword_28425B0; | |
v411 = (*v13 >> 11) & 0x1FF; | |
flt_283D040[v84] = (double)v411 + v5; | |
v411 = *v13 >> 20; | |
flt_283D044[v84] = v5 + (double)v411; | |
v411 = *(_BYTE *)(*((_DWORD *)v11 + 2) + 4); | |
flt_283D048[v84] = (double)v411; | |
break; | |
case 3: | |
sub_414FD0(v4, -700, "wav/pickup.wav"); | |
v85 = 980 * ((*v13 >> 6) & 0x1F); | |
v408 = (*v13 >> 6) & 0x1F; | |
v86 = (char *)&unk_468844 + v85; | |
do | |
{ | |
v87 = *v86; | |
v86[unk_2842480 - ((char *)&unk_468844 + v85)] = *v86; | |
++v86; | |
} | |
while ( v87 ); | |
v409 = dword_468804[v85 / 4] == 0; | |
if ( v409 ) | |
{ | |
if ( !dword_468804[245 * dword_283CDB0] ) | |
dword_468450 = (unsigned __int64)_time64(0) + 60; | |
v88 = &unk_2842480[-1]; | |
do | |
{ | |
v89 = *((_BYTE *)v88 + 1); | |
v88 = (char *)v88 + 1; | |
} | |
while ( v89 ); | |
memcpy(v88, " has captured Green Intel!", 0x18u); | |
v90 = (int)((char *)v88 + 24); | |
*(_WORD *)v90 = *(_WORD *)"l!"; | |
*(_BYTE *)(v90 + 2) = aHasCapturedGre[26]; | |
} | |
else | |
{ | |
if ( dword_468804[245 * dword_283CDB0] ) | |
dword_468450 = (unsigned __int64)_time64(0) + 60; | |
v91 = &unk_2842480[-1]; | |
do | |
{ | |
v92 = *((_BYTE *)v91 + 1); | |
v91 = (char *)v91 + 1; | |
} | |
while ( v92 ); | |
memcpy(v91, " has captured Blue Intel!", 0x1Au); | |
} | |
sub_423410(unk_2842480, 4); | |
v93 = 245 * v408; | |
dword_468808[245 * v408] = 0; | |
dword_468824[v93] += 10; | |
++dword_702780[dword_468804[v93]]; | |
v94 = 21 * v409; | |
dword_283D08C[21 * v409] = -1; | |
v11 = dword_28425B0; | |
v411 = (*v13 >> 11) & 0x1FF; | |
flt_283D040[v94] = (double)v411 + 0.5; | |
v411 = *v13 >> 20; | |
flt_283D044[v94] = (double)v411 + 0.5; | |
v411 = *(_BYTE *)(*((_DWORD *)v11 + 2) + 4); | |
flt_283D048[v94] = (double)v411; | |
break; | |
default: | |
goto LABEL_127; | |
} | |
goto LABEL_127; | |
case 12: | |
dword_468810[245 * *(_BYTE *)(v12 + 1)] = 0; | |
goto LABEL_127; | |
default: | |
goto LABEL_127; | |
} | |
} | |
if ( !sub_42DE60(v4, (unsigned int)dword_2848704, (signed int)&dword_28425A0, 0) ) | |
break; | |
v5 = 0.5; | |
} | |
} | |
sub_424060(v4); | |
if ( dword_2848700 > dword_468448 ) | |
{ | |
sub_418270(); | |
dword_468448 = dword_2848700 + 1000; | |
} | |
sub_4234D0(); | |
sub_41DE20(flt_273C9E0, 0.0, 0.0); | |
sub_41DE20(flt_273C9E0, 0.0, 0.0); | |
v6 = 245 * dword_283CDB0; | |
v7 = dword_283CD20; | |
v8 = 2; | |
v9 = dword_468804[245 * dword_283CDB0] + 2; | |
v10 = (signed int)&flt_283D0EC; | |
do | |
{ | |
if ( v9 == v8 ) | |
{ | |
if ( dword_46880C[v6] ) | |
{ | |
*(float *)&PerformanceCount.LowPart = flt_468720[v6] - *(float *)(v10 - 4); | |
*(float *)&PerformanceCount.HighPart = flt_468724[v6] - *(float *)v10; | |
v415 = flt_468728[v6] - (*(float *)(v10 + 4) - 2.25); | |
if ( *(float *)&PerformanceCount.LowPart < 2.0 ) | |
{ | |
if ( *(float *)&PerformanceCount.LowPart > -2.0 | |
&& *(float *)&PerformanceCount.HighPart < 2.0 | |
&& *(float *)&PerformanceCount.HighPart > -2.0 | |
&& v415 < 2.0 | |
&& v415 > -2.0 ) | |
{ | |
dword_283CD1C = dword_2848700 + 500; | |
if ( v7 < 50 ) | |
v7 = 50; | |
HIDWORD(qword_283CD24) = 80; | |
dword_283CD2C = 4; | |
dword_283CF14 = 100; | |
} | |
} | |
} | |
} | |
v10 += 84; | |
++v8; | |
} | |
while ( v10 < (signed int)&unk_283D194 ); | |
i = v8; | |
dword_283CD20 = v7; | |
v96 = 0.1000000014901161; | |
v97 = -0.1000000014901161; | |
if ( v8 < dword_283CD18 ) | |
{ | |
while ( 1 ) | |
{ | |
v108 = 21 * v8; | |
v109 = dword_283D08C[21 * v8]; | |
if ( v109 != -3 ) | |
break; | |
v98 = (double)dword_2848700; | |
if ( flt_283D088[v108] < v98 ) | |
{ | |
sub_414EB0((int)&flt_283D040[v108], "wav/bounce.wav", -300, (int)&flt_283D040[v108]); | |
sub_4239F0((int)&flt_283D040[21 * i]); | |
free((void *)dword_283D090[21 * i]); | |
goto LABEL_206; | |
} | |
if ( sub_422360((int)&dword_283D070[v108], (int)&flt_283D040[v108]) ) | |
{ | |
PerformanceCount.LowPart = (DWORD)((char *)&unk_283D07C + v108 * 4); | |
*(float *)((char *)&unk_283D07C + v108 * 4 + 8) = (double)rand() / 16383.5 - 1.0; | |
*(float *)&v411 = ((double)rand() / 16383.5 - 1.0) * 3.141592741012573; | |
v149 = sin(*(float *)&v411); | |
*(float *)PerformanceCount.LowPart = cos(*(float *)&v411); | |
*(float *)((char *)&unk_283D07C + v108 * 4 + 4) = v149; | |
sub_414EB0((int)&flt_283D040[21 * i], "wav/bounce.wav", -300, (int)&flt_283D040[21 * i]); | |
v98 = flt_283D088[21 * i] - 2000.0; | |
flt_283D088[21 * i] = v98; | |
} | |
sub_41DC20(); | |
sub_41DC20(); | |
sub_41DC20(); | |
v8 = i; | |
LABEL_211: | |
++v8; | |
i = v8; | |
if ( v8 >= dword_283CD18 ) | |
goto LABEL_138; | |
v96 = 0.1000000014901161; | |
v97 = -0.1000000014901161; | |
} | |
if ( v109 == -2 ) | |
{ | |
v98 = 0.0; | |
if ( flt_283D088[v108] > 0.0 ) | |
{ | |
v139 = flt_273C9E0 * 256.0; | |
*(float *)&v411 = *(float *)&dword_283D070[v108] * v139; | |
v140 = *(float *)&v411; | |
flt_283D040[v108] = flt_283D040[v108] + *(float *)&v411; | |
v141 = v140; | |
v142 = flt_283D088[v108]; | |
*(float *)&v411 = fabs(v141); | |
flt_283D088[v108] = v142 - *(float *)&v411; | |
*(float *)&v411 = *(float *)&dword_283D074[v108] * v139; | |
v143 = *(float *)&v411; | |
flt_283D044[v108] = flt_283D044[v108] + *(float *)&v411; | |
v144 = v143; | |
v145 = flt_283D088[v108]; | |
*(float *)&v411 = fabs(v144); | |
flt_283D088[v108] = v145 - *(float *)&v411; | |
*(float *)&v411 = v139 * *(float *)&dword_283D078[v108]; | |
v146 = *(float *)&v411; | |
flt_283D048[v108] = flt_283D048[v108] + *(float *)&v411; | |
v147 = v146; | |
v148 = flt_283D088[v108]; | |
*(float *)&v411 = fabs(v147); | |
v98 = v148 - *(float *)&v411; | |
flt_283D088[v108] = v98; | |
} | |
else | |
{ | |
--dword_283CD18; | |
memcpy(&flt_283D040[v108], &flt_283D040[21 * dword_283CD18], 0x54u); | |
} | |
goto LABEL_211; | |
} | |
if ( flt_283D088[v108] < (double)dword_2848700 ) | |
{ | |
v110 = (signed int)floor(flt_283D040[v108]); | |
v111 = (signed int)floor(flt_283D044[v108]); | |
v112 = flt_283D048[v108]; | |
v417 = v111; | |
v114 = floor(v112); | |
if ( v109 == dword_283CDB0 ) | |
{ | |
v411 = ((v110 | ((v417 | ((signed int)v114 << 9)) << 9)) << 6) | 0x3B; | |
v115 = off_43D298(20); | |
if ( !v115 ) | |
{ | |
off_43D2A0(); | |
JUMPOUT(*(int *)loc_426E28); | |
} | |
v116 = off_43D298(4); | |
if ( !v116 ) | |
off_43D2A0(); | |
*(_DWORD *)(v115 + 8) = v116; | |
if ( v116 ) | |
{ | |
*(_DWORD *)v116 = v411; | |
*(_DWORD *)v115 = 0; | |
*(_DWORD *)(v115 + 4) = 1; | |
*(_DWORD *)(v115 + 12) = 4; | |
*(_DWORD *)(v115 + 16) = 0; | |
} | |
else | |
{ | |
off_43D29C(v115); | |
v115 = 0; | |
} | |
sub_42E540(v115); | |
v8 = i; | |
} | |
v397 = (int)&flt_283D040[21 * v8]; | |
if ( (signed int)v114 == 63 ) | |
{ | |
sub_414EB0(v113, "wav/waterexplode.wav", 0, v397); | |
sub_4237C0((int)&flt_283D040[21 * i], 1.5, 2140785919, 12); | |
sub_4237C0((int)&flt_283D040[21 * i], 1.0, 2137430476, 8); | |
v390 = 19313944217i64; | |
} | |
else | |
{ | |
sub_414EB0(v113, "wav/explode.wav", 0, v397); | |
sub_4237C0((int)&flt_283D040[21 * i], 1.5, 2137022560, 12); | |
sub_4237C0((int)&flt_283D040[21 * i], 1.0, 2134917184, 8); | |
v390 = 19317273344i64; | |
} | |
v98 = 0.5; | |
sub_4237C0((int)&flt_283D040[21 * i], 0.5, v390, SHIDWORD(v390)); | |
v8 = i; | |
v117 = 245 * dword_283CDB0; | |
if ( dword_46880C[245 * dword_283CDB0] ) | |
{ | |
v118 = 21 * i; | |
v119 = dword_283D08C[21 * i]; | |
if ( v119 == dword_283CDB0 || dword_468804[245 * v119] != dword_468804[v117] ) | |
{ | |
v422 = flt_468720[v117] - flt_283D040[v118]; | |
v423 = flt_468724[v117] - flt_283D044[v118]; | |
v424 = flt_468728[v117] - flt_283D048[v118]; | |
v98 = 16.0; | |
if ( v422 < 16.0 ) | |
{ | |
if ( v422 <= -16.0 || v423 >= 16.0 || v423 <= -16.0 || (v98 = v424, v424 >= 16.0) ) | |
{ | |
v98 = -16.0; | |
} | |
else | |
{ | |
if ( v98 > -16.0 ) | |
{ | |
v98 = flt_468720[v117]; | |
if ( sub_418D10( | |
flt_468720[v117], | |
flt_468724[v117], | |
flt_468728[v117], | |
flt_283D040[v118], | |
flt_283D044[v118], | |
flt_283D048[v118]) ) | |
{ | |
sub_414FD0(v120, 0, "wav/hitplayer.wav"); | |
v98 = 4096.0 / (v423 * v423 + v422 * v422 + v424 * v424); | |
sub_423F60(84 * i, (signed int)v98, dword_283D08C[21 * i]); | |
} | |
LABEL_206: | |
v8 = i; | |
} | |
} | |
} | |
} | |
} | |
--dword_283CD18; | |
memcpy(&flt_283D040[21 * v8], &flt_283D040[21 * dword_283CD18], 0x54u); | |
goto LABEL_211; | |
} | |
v121 = flt_283D044[v108]; | |
v122 = flt_283D048[v108]; | |
v123 = *(float *)&dword_283D078[v108] + flt_273C9E0; | |
v425 = flt_283D040[v108]; | |
v124 = v123; | |
v125 = flt_273C9E0; | |
v426 = v121; | |
v427 = v122; | |
*(float *)&dword_283D078[v108] = v124; | |
v403 = v125 * 32.0; | |
flt_283D040[v108] = *(float *)&dword_283D070[v108] * v403 + flt_283D040[v108]; | |
flt_283D044[v108] = *(float *)&dword_283D074[v108] * v403 + flt_283D044[v108]; | |
flt_283D048[v108] = *(float *)&dword_283D078[v108] * v403 + flt_283D048[v108]; | |
if ( *(float *)&dword_283D070[v108] > v96 || *(float *)&dword_283D070[v108] < v97 ) | |
{ | |
v129 = v403; | |
} | |
else | |
{ | |
v126 = *(float *)&dword_283D074[v108]; | |
v127 = v126 < v96; | |
v128 = v126 == v96; | |
v129 = v403; | |
if ( v127 | v128 && *(float *)&dword_283D074[v108] >= v97 ) | |
{ | |
LABEL_182: | |
v130 = 21 * v8; | |
v131 = (signed int)floor(flt_283D040[21 * v8]); | |
v132 = flt_283D044[21 * v8]; | |
v416 = v131; | |
v133 = (signed int)floor(v132); | |
v98 = floor(flt_283D048[21 * v8]); | |
v134 = (signed int)v98; | |
if ( sub_416F00(v133, (signed int)v98, v416) ) | |
{ | |
v419 = (signed int)floor(v425); | |
v420 = (signed int)floor(v426); | |
v421 = (signed int)floor(v427); | |
if ( v134 == v421 || (v416 != v419 || v133 != v420) && sub_416F00(v133, v421, v416) ) | |
{ | |
if ( v416 == v419 || (v133 != v420 || v134 != v421) && sub_416F00(v133, v134, v419) ) | |
{ | |
if ( v133 != v420 && (v416 == v419 && v134 == v421 || !sub_416F00(v420, v134, v416)) ) | |
*(float *)&dword_283D074[v130] = -*(float *)&dword_283D074[v130]; | |
} | |
else | |
{ | |
*(float *)&dword_283D070[v130] = -*(float *)&dword_283D070[v130]; | |
} | |
} | |
else | |
{ | |
*(float *)&dword_283D078[v130] = -*(float *)&dword_283D078[v130]; | |
} | |
v137 = v426; | |
v138 = v427; | |
flt_283D040[v130] = v425; | |
flt_283D044[v130] = v137; | |
flt_283D048[v130] = v138; | |
*(float *)&dword_283D070[v130] = *(float *)&dword_283D070[v130] * 0.5; | |
*(float *)&dword_283D074[v130] = *(float *)&dword_283D074[v130] * 0.5; | |
v98 = 0.5 * *(float *)&dword_283D078[v130]; | |
*(float *)&dword_283D078[v130] = v98; | |
} | |
goto LABEL_211; | |
} | |
} | |
v135 = v129 * -0.5; | |
*(float *)&v411 = *(float *)&dword_283D070[v108] * v135; | |
v136 = *(float *)&v411; | |
*(float *)&v411 = v135 * *(float *)&dword_283D074[v108]; | |
sub_41DE20(0.0, *(float *)&v411, v136); | |
v8 = i; | |
goto LABEL_182; | |
} | |
v98 = -0.1000000014901161; | |
LABEL_138: | |
sub_419310(); | |
v99 = dword_701FC0 - 1; | |
v100 = 0; | |
for ( i = dword_701FC0 - 1; v99 >= 0; i = v99 ) | |
{ | |
v101 = (char *)&unk_702018 + 60 * v99; | |
v102 = (*(_DWORD *)v101)++; | |
if ( !v102 && dword_283CD18 < 256 ) | |
{ | |
if ( sub_417640((int)&flt_283D040[21 * dword_283CD18], v99) ) | |
{ | |
sub_414EB0(v103, "wav/debris.wav", -300, (int)&flt_283D040[21 * dword_283CD18]); | |
v104 = 21 * dword_283CD18; | |
PerformanceCount.LowPart = dword_2848700 + 5000; | |
dword_283D08C[21 * dword_283CD18] = -3; | |
v105 = (char *)&unk_283D07C + v104 * 4; | |
v106 = (char *)&unk_283D07C + v104 * 4; | |
flt_283D088[v104] = (double)(signed int)PerformanceCount.LowPart; | |
*(float *)&dword_283D078[v104] = 0.0; | |
*(float *)&dword_283D074[v104] = 0.0; | |
*(float *)&dword_283D070[v104] = 0.0; | |
PerformanceCount.LowPart = rand(); | |
v411 = (int)(v105 + 4); | |
*((float *)v105 + 2) = (double)(signed int)PerformanceCount.LowPart / 16383.5 - 1.0; | |
*(float *)&PerformanceCount.LowPart = ((double)rand() / 16383.5 - 1.0) * 3.141592741012573; | |
v98 = sin(*(float *)&PerformanceCount.LowPart); | |
*(float *)v106 = cos(*(float *)&PerformanceCount.LowPart); | |
*(float *)v411 = v98; | |
++dword_283CD18; | |
} | |
v99 = i; | |
} | |
--v99; | |
} | |
sub_419E90(); | |
if ( byte_471921 ) | |
{ | |
byte_471921 = 0; | |
if ( dword_468440 ) | |
{ | |
v107 = 0; | |
dword_468440 = 0; | |
goto LABEL_215; | |
} | |
PostMessageA(hWnd, 0x10u, 0, 0); | |
} | |
v107 = dword_468440; | |
LABEL_215: | |
if ( dword_470008 == dword_47000C ) | |
{ | |
LOBYTE(v150) = 0; | |
} | |
else | |
{ | |
v150 = dword_467DC0[dword_470008]; | |
dword_470008 = (unsigned __int8)(dword_470008 + 1); | |
} | |
v151 = (unsigned __int8)v150; | |
v152 = v151; | |
i = v151; | |
if ( v107 ) | |
{ | |
if ( v151 ) | |
{ | |
v153 = strlen(word_283CEC0); | |
v408 = v153; | |
if ( v152 == 8 ) | |
{ | |
if ( v153 > 1 ) | |
*(__int16 *)((char *)&word_283CEBE + v153) = 95; | |
} | |
else | |
{ | |
if ( v152 == 13 ) | |
{ | |
if ( v153 > 1 ) | |
{ | |
*((_BYTE *)&word_283CEBE + v153 + 1) = 0; | |
unk_2842480[0] = 16 * v107 | 0xE; | |
v154 = 0; | |
do | |
{ | |
v155 = word_283CEC0[v154]; | |
*((_BYTE *)&unk_2842481 + v154++) = v155; | |
} | |
while ( v155 ); | |
v156 = sub_42EEC0(unk_2842480, strlen(word_283CEC0) + 2, 1); | |
sub_42E540(v156); | |
v157 = 245 * dword_283CDB0; | |
v158 = (char *)&unk_468844 + 980 * dword_283CDB0; | |
v159 = (char *)(unk_2842480 - v158); | |
do | |
{ | |
v160 = *v158; | |
v159[(_DWORD)v158] = *v158; | |
++v158; | |
} | |
while ( v160 ); | |
v161 = strlen(unk_2842480); | |
v162 = (int)word_283CEC0; | |
v409 = v161; | |
unk_2842480[v161] = 58; | |
v163 = v161 + &unk_2842481 - (_UNKNOWN *)word_283CEC0; | |
do | |
{ | |
LOBYTE(v161) = *(_BYTE *)v162; | |
*(_BYTE *)(v162 + v163) = *(_BYTE *)v162; | |
++v162; | |
} | |
while ( (_BYTE)v161 ); | |
byte_28424DF = 0; | |
if ( word_283CEC0[0] != 47 ) | |
{ | |
if ( dword_468440 == 1 ) | |
v398 = dword_468804[v157]; | |
else | |
v398 = dword_468804[v157] + 2; | |
sub_423410(unk_2842480, v398); | |
} | |
sub_414FD0(v161, -700, "wav/chat.wav"); | |
} | |
dword_468440 = 0; | |
} | |
else | |
{ | |
if ( v153 < 80 ) | |
{ | |
*((_BYTE *)&word_283CEBE + v153 + 1) = v152; | |
word_283CEC0[v153] = 95; | |
word_283CEC0[v153 + 1] = 0; | |
} | |
} | |
} | |
} | |
goto LABEL_404; | |
} | |
v164 = dword_28485E8; | |
if ( !dword_28485E8 ) | |
{ | |
if ( v151 == 116 ) | |
{ | |
dword_468440 = 1; | |
goto LABEL_244; | |
} | |
if ( v151 == 121 ) | |
{ | |
dword_468440 = 2; | |
LABEL_244: | |
v165 = 245 * dword_283CDB0; | |
*(_WORD *)word_283CEC0 = 95; | |
if ( dword_4687DC[245 * dword_283CDB0] || dword_4687E0[v165] || dword_4687E4[v165] || dword_4687E8[v165] ) | |
{ | |
dword_4687E8[v165] = 0; | |
dword_4687E4[v165] = 0; | |
dword_4687E0[v165] = 0; | |
dword_4687DC[v165] = 0; | |
i = 2; | |
v166 = off_43D298(20); | |
if ( !v166 ) | |
{ | |
off_43D2A0(); | |
JUMPOUT(*(int *)loc_4278F0); | |
} | |
v167 = off_43D298(1); | |
if ( !v167 ) | |
off_43D2A0(); | |
*(_DWORD *)(v166 + 8) = v167; | |
if ( v167 ) | |
{ | |
*(_BYTE *)v167 = i; | |
*(_DWORD *)v166 = 0; | |
*(_DWORD *)(v166 + 4) = 1; | |
*(_DWORD *)(v166 + 12) = 1; | |
*(_DWORD *)(v166 + 16) = 0; | |
} | |
else | |
{ | |
off_43D29C(v166); | |
v166 = 0; | |
} | |
sub_42E540(v166); | |
} | |
v168 = 245 * dword_283CDB0; | |
if ( dword_4687F8[245 * dword_283CDB0] || dword_4687EC[v168] || dword_4687F0[v168] || dword_4687F4[v168] ) | |
{ | |
i = 3; | |
if ( dword_4687F0[v168] ) | |
{ | |
v169 = 0; | |
if ( sub_423250((int)&dword_468480[v168]) ) | |
{ | |
dword_4687F0[v168] = 0; | |
} | |
else | |
{ | |
if ( !dword_4687F8[v168] && !dword_4687EC[v168] ) | |
{ | |
if ( !dword_4687F4[v168] ) | |
goto LABEL_404; | |
v169 = 0; | |
} | |
i = 67; | |
} | |
} | |
else | |
{ | |
v169 = 0; | |
} | |
v170 = off_43D298(20); | |
if ( v170 == v169 ) | |
{ | |
off_43D2A0(); | |
JUMPOUT(*(int *)loc_4279E4); | |
} | |
v171 = off_43D298(1); | |
if ( v171 == v169 ) | |
off_43D2A0(); | |
*(_DWORD *)(v170 + 8) = v171; | |
if ( v171 == v169 ) | |
{ | |
off_43D29C(v170); | |
v170 = 0; | |
} | |
else | |
{ | |
*(_BYTE *)v171 = i; | |
*(_DWORD *)v170 = v169; | |
*(_DWORD *)(v170 + 4) = 1; | |
*(_DWORD *)(v170 + 12) = 1; | |
*(_DWORD *)(v170 + 16) = v169; | |
} | |
sub_42E540(v170); | |
v172 = 245 * dword_283CDB0; | |
dword_4687F4[245 * dword_283CDB0] = v169; | |
dword_4687EC[v172] = v169; | |
dword_4687F8[v172] = v169; | |
} | |
goto LABEL_404; | |
} | |
} | |
v173 = dword_283CDB0; | |
if ( !byte_471950 || (v174 = 245 * dword_283CDB0, !dword_468804[245 * dword_283CDB0]) ) | |
{ | |
if ( !byte_471942 || (v174 = 245 * dword_283CDB0, dword_468804[245 * dword_283CDB0] == 1) ) | |
goto LABEL_305; | |
} | |
if ( dword_28485E8 ) | |
{ | |
v177 = dword_468840[v174]; | |
unk_2842480[0] = 16 * byte_471942 | 8; | |
unk_2842481 = v177; | |
strncpy((char *)&qword_2842484 + 1, (const char *)&unk_468844 + v174 * 4, 0xFu); | |
v178 = (char *)&unk_468844 + 980 * dword_283CDB0; | |
v179 = (int)(v178 + 1); | |
do | |
v180 = *v178++; | |
while ( v180 ); | |
v181 = (size_t)&v178[-v179 + 6]; | |
v175 = off_43D298(20); | |
if ( !v175 ) | |
{ | |
off_43D2A0(); | |
JUMPOUT(*(int *)loc_427B83); | |
} | |
v182 = (void *)off_43D298(v181); | |
if ( !v182 ) | |
off_43D2A0(); | |
*(_DWORD *)(v175 + 8) = v182; | |
if ( !v182 ) | |
{ | |
off_43D29C(v175); | |
v175 = 0; | |
goto LABEL_304; | |
} | |
memmove(v182, unk_2842480, v181); | |
*(_DWORD *)(v175 + 4) = 1; | |
*(_DWORD *)(v175 + 12) = v181; | |
LABEL_303: | |
*(_DWORD *)(v175 + 16) = 0; | |
*(_DWORD *)v175 = 0; | |
goto LABEL_304; | |
} | |
sub_423F60(v174 * 4, 2147483647, dword_283CDB0); | |
unk_2842480[0] = 16 * byte_471942 | 8; | |
v175 = off_43D298(20); | |
if ( !v175 ) | |
{ | |
off_43D2A0(); | |
JUMPOUT(*(int *)loc_427AD1); | |
} | |
v176 = off_43D298(1); | |
if ( !v176 ) | |
off_43D2A0(); | |
*(_DWORD *)(v175 + 8) = v176; | |
if ( v176 ) | |
{ | |
*(_BYTE *)v176 = unk_2842480[0]; | |
*(_DWORD *)(v175 + 4) = 1; | |
*(_DWORD *)(v175 + 12) = 1; | |
goto LABEL_303; | |
} | |
off_43D29C(v175); | |
v175 = 0; | |
LABEL_304: | |
sub_42E540(v175); | |
v173 = dword_283CDB0; | |
v164 = dword_28485E8; | |
byte_471950 = 0; | |
byte_471942 = 0; | |
LABEL_305: | |
v183 = 245 * v173; | |
if ( !dword_46880C[v183] || v164 ) | |
goto LABEL_404; | |
if ( dword_2848700 <= dword_28425B8 ) | |
{ | |
if ( dword_2848700 > dword_28425B4 ) | |
{ | |
v186 = flt_468750[v183]; | |
v187 = flt_468754[v183]; | |
v188 = dword_468758[v183]; | |
unk_2842480[0] = 1; | |
unk_2842481 = LODWORD(v186); | |
*(_DWORD *)((char *)&qword_2842484 + 1) = LODWORD(v187); | |
*(_DWORD *)((char *)&qword_2842484 + 5) = v188; | |
v189 = sub_42EEC0(unk_2842480, 0xDu, 2); | |
sub_42E540(v189); | |
dword_28425B4 = dword_2848700 + 100; | |
} | |
} | |
else | |
{ | |
unk_2842481 = __PAIR__(LODWORD(flt_468724[v183]), LODWORD(flt_468720[v183])); | |
v184 = flt_468728[v183]; | |
unk_2842480[0] = 0; | |
*(_DWORD *)((char *)&qword_2842484 + 5) = LODWORD(v184); | |
v185 = sub_42EEC0(unk_2842480, 0xDu, 2); | |
sub_42E540(v185); | |
dword_28425B8 = dword_2848700 + 1000; | |
} | |
sub_423BC0(); | |
if ( byte_47196A ) | |
{ | |
byte_47196A = 0; | |
dword_273C9D8 = (dword_273C9D8 - 1) & ((dword_273C9D8 - 1 <= 0) - 1); | |
sub_414760(); | |
sprintf(word_283CEC0, "Volume: %i", dword_273C9D8); | |
sub_423410(word_283CEC0, 4); | |
} | |
if ( byte_47196E ) | |
{ | |
byte_47196E = 0; | |
++dword_273C9D8; | |
if ( dword_273C9D8 >= 10 ) | |
dword_273C9D8 = 10; | |
sub_414760(); | |
sprintf(word_283CEC0, "Volume: %i", dword_273C9D8); | |
sub_423410(word_283CEC0, 4); | |
} | |
v191 = dword_2848700; | |
if ( byte_471952 ) | |
{ | |
byte_471952 = 0; | |
if ( dword_28465C0 ) | |
{ | |
dword_28465C0 = 0; | |
} | |
else | |
{ | |
if ( dword_468444 < dword_2848700 ) | |
{ | |
dword_468444 = dword_2848700 + 10000; | |
sub_4226D0(); | |
} | |
dword_28465C0 = 1; | |
} | |
} | |
if ( dword_468464 ) | |
{ | |
if ( dword_468464 < 0 ) | |
{ | |
if ( dword_2848708 ) | |
{ | |
v192 = dword_2848708 - 1; | |
dword_2848708 = v192; | |
if ( v192 != 4 ) | |
{ | |
if ( v192 != 3 ) | |
{ | |
if ( v192 == 2 ) | |
{ | |
LABEL_334: | |
if ( !dword_283CD20 ) | |
dword_2848708 = 1; | |
} | |
LABEL_346: | |
dword_46881C[245 * dword_283CDB0] = 0; | |
goto LABEL_365; | |
} | |
LABEL_331: | |
if ( !qword_283CD24 ) | |
{ | |
dword_2848708 = 2; | |
goto LABEL_334; | |
} | |
goto LABEL_346; | |
} | |
} | |
else | |
{ | |
dword_2848708 = 4; | |
} | |
if ( dword_283CD2C ) | |
goto LABEL_346; | |
dword_2848708 = 3; | |
goto LABEL_331; | |
} | |
if ( dword_2848708 == 4 ) | |
{ | |
LABEL_345: | |
dword_2848708 = 0; | |
goto LABEL_346; | |
} | |
v193 = dword_2848708 + 1; | |
dword_2848708 = v193; | |
if ( v193 == 2 ) | |
{ | |
if ( dword_283CD20 ) | |
goto LABEL_346; | |
dword_2848708 = 3; | |
} | |
else | |
{ | |
if ( v193 != 3 ) | |
{ | |
if ( v193 != 4 ) | |
goto LABEL_346; | |
LABEL_344: | |
if ( dword_283CD2C ) | |
goto LABEL_346; | |
goto LABEL_345; | |
} | |
} | |
if ( qword_283CD24 ) | |
goto LABEL_346; | |
dword_2848708 = 4; | |
goto LABEL_344; | |
} | |
v194 = HIDWORD(qword_283CD24); | |
v195 = qword_283CD24; | |
v196 = 2; | |
i = 2; | |
while ( 1 ) | |
{ | |
if ( !byte_471920[v196] ) | |
goto LABEL_361; | |
if ( v196 - 2 == dword_2848708 ) | |
goto LABEL_360; | |
if ( v196 < 4 ) | |
break; | |
if ( v196 == 4 ) | |
{ | |
v100 = 0; | |
if ( dword_283CD20 ) | |
goto LABEL_364; | |
} | |
else | |
{ | |
if ( v196 == 5 ) | |
{ | |
v100 = 0; | |
if ( qword_283CD24 ) | |
goto LABEL_364; | |
} | |
else | |
{ | |
if ( v196 != 6 ) | |
{ | |
LABEL_360: | |
v100 = 0; | |
goto LABEL_361; | |
} | |
v100 = 0; | |
if ( dword_283CD2C ) | |
goto LABEL_364; | |
} | |
} | |
LABEL_361: | |
++v196; | |
if ( v196 >= 7 ) | |
{ | |
i = v196; | |
goto LABEL_366; | |
} | |
} | |
v100 = 0; | |
LABEL_364: | |
i = v196; | |
v190 = 980 * dword_283CDB0; | |
dword_2848708 = v196 - 2; | |
dword_46881C[245 * dword_283CDB0] = v100; | |
LABEL_365: | |
dword_283CD1C = v191 + 500; | |
dword_28485E4 = v100; | |
dword_273CA7C = v100; | |
sub_414FD0(v190, -300, "wav/switch.wav"); | |
v194 = HIDWORD(qword_283CD24); | |
v195 = qword_283CD24; | |
v191 = dword_2848700; | |
LABEL_366: | |
if ( byte_471933 && v194 != v100 && v195 < 10 && dword_2848708 == 3 ) | |
{ | |
v197 = dword_273CA7C; | |
if ( dword_273CA7C == v100 ) | |
{ | |
dword_273CA7C = v191 + 2500; | |
dword_283CD1C = v191 + 2500; | |
dword_28485E4 = v100; | |
sub_414FD0(v195, -300, "wav/semireload.wav"); | |
v191 = dword_2848700; | |
goto LABEL_377; | |
} | |
} | |
else | |
{ | |
v197 = dword_273CA7C; | |
if ( dword_273CA7C == v100 ) | |
goto LABEL_377; | |
} | |
if ( v197 <= v191 ) | |
{ | |
dword_273CA7C = v100; | |
i = v195; | |
LODWORD(qword_283CD24) = 10; | |
if ( v195 + v194 <= 10 ) | |
LODWORD(qword_283CD24) = v195 + v194; | |
HIDWORD(qword_283CD24) = (v195 + v194 - 10) & ((v195 + v194 - 10 < v100) - 1); | |
} | |
LABEL_377: | |
if ( dword_2848708 == 2 && dword_283CD1C <= v191 ) | |
{ | |
if ( byte_4719E8 ) | |
{ | |
if ( dword_283CD30 >= v100 ) | |
v198 = ((_BYTE)dword_283CD30 - 8) & 0x3F; | |
else | |
v198 = 3; | |
goto LABEL_383; | |
} | |
if ( byte_4719F0 ) | |
{ | |
if ( dword_283CD30 >= v100 ) | |
v200 = ((_BYTE)dword_283CD30 + 8) & 0x3F; | |
else | |
v200 = 3; | |
v195 = dword_283CF20[v200]; | |
dword_283CD30 = v200; | |
dword_283CD14 = v195; | |
dword_283CD1C = v191 + 200; | |
goto LABEL_403; | |
} | |
if ( !byte_4719EB ) | |
{ | |
if ( byte_4719ED ) | |
{ | |
if ( dword_283CD30 >= v100 ) | |
{ | |
v195 = (((_BYTE)dword_283CD30 + 1) & 7) - (dword_283CD30 & 7); | |
v198 = v195 + dword_283CD30; | |
} | |
else | |
{ | |
v198 = 3; | |
} | |
LABEL_383: | |
dword_283CD30 = v198; | |
v199 = dword_283CF20[v198]; | |
dword_283CD1C = v191 + 200; | |
} | |
else | |
{ | |
if ( !(dword_468458 & 2) | |
|| dword_468454 & 2 | |
|| (sub_418730( | |
(int)&flt_468750[245 * dword_283CDB0], | |
(int)&flt_468720[245 * dword_283CDB0], | |
(int)&v419, | |
(int)&v413, | |
(int)&i), | |
LODWORD(v413) == v100) ) | |
goto LABEL_404; | |
dword_283CD30 = -1; | |
v199 = (unsigned int)&unk_FFFFFF & *LODWORD(v413); | |
v195 = dword_2848700 + 200; | |
dword_283CD1C = dword_2848700 + 200; | |
} | |
dword_283CD14 = v199; | |
goto LABEL_403; | |
} | |
if ( dword_283CD30 >= v100 ) | |
{ | |
v195 = dword_283CD30 & 7; | |
v201 = (((_BYTE)dword_283CD30 - 1) & 7) - v195 + dword_283CD30; | |
} | |
else | |
{ | |
v201 = 3; | |
} | |
v202 = dword_283CF20[v201]; | |
dword_283CD30 = v201; | |
dword_283CD14 = v202; | |
dword_283CD1C = v191 + 200; | |
LABEL_403: | |
sub_414FD0(v195, -300, "wav/switch.wav"); | |
} | |
LABEL_404: | |
if ( !sub_4156A0((int)&i, (int)&v408) ) | |
return; | |
sub_420120(v408, i); | |
v203 = &flt_468744[245 * dword_283CDB0]; | |
v204 = &flt_468720[245 * dword_283CDB0]; | |
v205 = &flt_468750[245 * dword_283CDB0]; | |
sub_41AB80( | |
(int)&flt_468750[245 * dword_283CDB0], | |
(int)&flt_468744[245 * dword_283CDB0], | |
(int)&flt_468720[245 * dword_283CDB0], | |
(int)&flt_468738[245 * dword_283CDB0], | |
dword_4716E4 >> 1, | |
dword_471F28 >> 1, | |
dword_4716E4 >> (dword_28485E4 == 0)); | |
if ( dword_470048 ) | |
{ | |
((void (__stdcall *)(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD))*(void (__stdcall **)(int, float, float, float, signed int))(*(_DWORD *)dword_470048 + 56))( | |
dword_470048, | |
*v204, | |
v204[1], | |
v204[2], | |
1); | |
v98 = *v205; | |
((void (__stdcall *)(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD))*(void (__stdcall **)(int, float, float, float, float, float, float, signed int))(*(_DWORD *)dword_470048 + 52))( | |
dword_470048, | |
*v205, | |
v205[1], | |
v205[2], | |
*v203, | |
v203[1], | |
v203[2], | |
1); | |
(*(void (__stdcall **)(int))(*(_DWORD *)dword_470048 + 68))(dword_470048); | |
} | |
sub_41EDC0(v98); | |
++dword_46844C; | |
sub_419990((dword_46844C & 0x1F) - 16); | |
v206 = 0; | |
v207 = 0; | |
i = 0; | |
do | |
{ | |
v208 = 245 * v207; | |
if ( dword_468810[245 * v207] != v206 && v207 != dword_283CDB0 ) | |
{ | |
v209 = flt_468720[245 * dword_283CDB0] - flt_468720[v208]; | |
*(float *)&v411 = flt_468724[245 * dword_283CDB0] - flt_468724[v208]; | |
v98 = *(float *)&v411 * *(float *)&v411 + v209 * v209; | |
if ( v98 <= 16384.0 ) | |
{ | |
dword_468830[v208] = 1; | |
*(float *)&PerformanceCount.LowPart = flt_468728[v208] + 1.0; | |
v98 = flt_468720[v208]; | |
sub_41D7C0( | |
flt_468720[v208], | |
flt_468724[v208], | |
*(float *)&PerformanceCount.LowPart, | |
(int)&v408, | |
(int)&v409, | |
(int)&v410, | |
(int)&v412); | |
v210 = v408; | |
if ( v408 >= dword_4716E4 | |
|| (v211 = v410, v410 < v206) | |
|| (v212 = v409, v409 >= dword_471F28) | |
|| (v213 = v412, v412 < v206) ) | |
{ | |
v247 = 245 * i; | |
dword_46882C[245 * i] = v206; | |
dword_468828[v247] = v206; | |
} | |
else | |
{ | |
v214 = 245 * i; | |
v215 = dword_4716E4 >> 1; | |
dword_468828[245 * i] = 1; | |
dword_46882C[v214] = v210 < v215 && v211 > v215 && v212 < dword_471F28 >> 1 && v213 > dword_471F28 >> 1; | |
v216 = (signed int)flt_468724[v214]; | |
v217 = (signed int)flt_468720[v214]; | |
v218 = sub_416EA0((signed int)flt_468728[v214], v216, v217); | |
v219 = sub_416DE0(v216, v218, v217); | |
v220 = flt_46873C[v214]; | |
v221 = (LODWORD(flt_468754[v214]) ^ LODWORD(flt_468738[v214])) < 0; | |
v409 = *(_BYTE *)(v219 + 3); | |
LODWORD(qword_702768) = v409 | ((v409 | (v409 << 8)) << 8); | |
if ( v221 ) | |
{ | |
v404 = v220; | |
v222 = -flt_468738[v214]; | |
} | |
else | |
{ | |
v404 = -v220; | |
v222 = flt_468738[v214]; | |
} | |
v223 = dword_46880C[v214] == 0; | |
*(float *)&v411 = v222; | |
if ( v223 ) | |
{ | |
dword_468624[v214] = LODWORD(flt_468720[v214]); | |
dword_468624[v214 + 1] = LODWORD(flt_468724[v214]); | |
dword_468624[v214 + 2] = LODWORD(flt_468728[v214]); | |
flt_468630[v214] = flt_468738[v214] * -0.1000000014901161; | |
flt_468634[v214] = -0.1000000014901161 * flt_46873C[v214]; | |
flt_46863C[v214] = v404 * 0.1000000014901161; | |
v98 = 0.1000000014901161 * *(float *)&v411; | |
flt_468640[v214] = v98; | |
sub_41BDA0((int)&dword_468624[v214], v98, a1, a2, a3, 1); | |
v206 = 0; | |
} | |
else | |
{ | |
flt_468528[v214] = flt_468720[v214]; | |
flt_46852C[v214] = flt_468724[v214]; | |
flt_468530[v214] = flt_468728[v214] + 0.300000011920929; | |
dword_468480[v214] = LODWORD(flt_468528[v214]); | |
dword_468484[v214] = LODWORD(flt_46852C[v214]); | |
dword_468488[v214] = LODWORD(flt_468530[v214]); | |
dword_4684D4[v214] = LODWORD(flt_468528[v214]); | |
dword_4684D8[v214] = LODWORD(flt_46852C[v214]); | |
dword_4684DC[v214] = LODWORD(flt_468530[v214]); | |
dword_468678[v214] = LODWORD(flt_468528[v214]); | |
dword_46867C[v214] = LODWORD(flt_46852C[v214]); | |
dword_468680[v214] = LODWORD(flt_468530[v214]); | |
flt_46857C[v214] = flt_468720[v214] - flt_468738[v214] * 0.25; | |
flt_4685D0[v214] = flt_468738[v214] * 0.25 + flt_468720[v214]; | |
flt_468580[v214] = flt_468724[v214] - flt_46873C[v214] * 0.25; | |
flt_4685D4[v214] = 0.25 * flt_46873C[v214] + flt_468724[v214]; | |
v224 = v404; | |
v225 = *(float *)&v411; | |
v226 = flt_468728[v214]; | |
if ( dword_4687F0[v214] ) | |
{ | |
*(float *)&PerformanceCount.LowPart = v226 + 0.4000000059604645; | |
v227 = *(float *)&PerformanceCount.LowPart; | |
dword_4684DC[v214] = PerformanceCount.LowPart; | |
*(float *)&dword_468680[v214] = v227; | |
flt_46857C[v214] = flt_46857C[v214] - v224 * 0.300000011920929; | |
flt_4685D0[v214] = flt_4685D0[v214] - v224 * 0.300000011920929; | |
flt_468580[v214] = flt_468580[v214] - v225 * 0.300000011920929; | |
flt_4685D4[v214] = flt_4685D4[v214] - v225 * 0.300000011920929; | |
*(float *)&PerformanceCount.LowPart = flt_468728[v214] + 0.699999988079071; | |
v228 = *(float *)&PerformanceCount.LowPart; | |
} | |
else | |
{ | |
*(float *)&PerformanceCount.LowPart = v226 + 0.5; | |
v229 = *(float *)&PerformanceCount.LowPart; | |
dword_4684DC[v214] = PerformanceCount.LowPart; | |
*(float *)&dword_468680[v214] = v229; | |
*(float *)&PerformanceCount.LowPart = flt_468728[v214] + 1.100000023841858; | |
v228 = *(float *)&PerformanceCount.LowPart; | |
} | |
flt_4685D8[v214] = v228; | |
flt_468584[v214] = v228; | |
flt_468534[v214] = flt_468738[v214] * -0.1000000014901161; | |
flt_468538[v214] = -0.1000000014901161 * flt_46873C[v214]; | |
dword_46848C[v214] = LODWORD(flt_468534[v214]); | |
dword_468490[v214] = LODWORD(flt_468538[v214]); | |
dword_468494[v214] = LODWORD(flt_46853C[v214]); | |
dword_4684E0[v214] = LODWORD(flt_468534[v214]); | |
dword_4684E4[v214] = LODWORD(flt_468538[v214]); | |
dword_4684E8[v214] = LODWORD(flt_46853C[v214]); | |
dword_468588[v214] = LODWORD(flt_468534[v214]); | |
dword_46858C[v214] = LODWORD(flt_468538[v214]); | |
dword_468590[v214] = LODWORD(flt_46853C[v214]); | |
dword_4685DC[v214] = LODWORD(flt_468534[v214]); | |
dword_4685E0[v214] = LODWORD(flt_468538[v214]); | |
dword_4685E4[v214] = LODWORD(flt_46853C[v214]); | |
flt_468498[v214] = v224 * 0.1000000014901161; | |
flt_46849C[v214] = v225 * 0.1000000014901161; | |
dword_468594[v214] = LODWORD(flt_468498[v214]); | |
dword_468598[v214] = LODWORD(flt_46849C[v214]); | |
dword_46859C[v214] = LODWORD(flt_4684A0[v214]); | |
dword_4685E8[v214] = LODWORD(flt_468498[v214]); | |
dword_4685EC[v214] = LODWORD(flt_46849C[v214]); | |
dword_4685F0[v214] = LODWORD(flt_4684A0[v214]); | |
flt_468540[v214] = flt_468750[v214] * 0.1000000014901161; | |
flt_468544[v214] = flt_468754[v214] * 0.1000000014901161; | |
flt_468548[v214] = *(float *)&dword_468758[v214] * 0.1000000014901161; | |
dword_4684EC[v214] = LODWORD(flt_468540[v214]); | |
dword_4684F0[v214] = LODWORD(flt_468544[v214]); | |
dword_4684F4[v214] = LODWORD(flt_468548[v214]); | |
dword_4685A0[v214] = LODWORD(flt_4684A4[v214]); | |
dword_4685A4[v214] = LODWORD(flt_4684A8[v214]); | |
dword_4685A8[v214] = LODWORD(flt_4684AC[v214]); | |
dword_4685F4[v214] = LODWORD(flt_4684A4[v214]); | |
dword_4685F8[v214] = LODWORD(flt_4684A8[v214]); | |
dword_4685FC[v214] = LODWORD(flt_4684AC[v214]); | |
flt_46854C[v214] = flt_468744[v214] * 0.1000000014901161; | |
flt_468550[v214] = flt_468748[v214] * 0.1000000014901161; | |
flt_468554[v214] = 0.1000000014901161 * flt_46874C[v214]; | |
dword_4684F8[v214] = LODWORD(flt_46854C[v214]); | |
dword_4684FC[v214] = LODWORD(flt_468550[v214]); | |
dword_468500[v214] = LODWORD(flt_468554[v214]); | |
if ( dword_468808[v214] ) | |
{ | |
*(float *)((char *)&unk_4686CC + v214 * 4) = flt_468720[v214] - v224 * 0.300000011920929; | |
flt_4686D0[v214] = flt_468724[v214] - 0.300000011920929 * v225; | |
v230 = flt_468728[v214]; | |
if ( dword_4687F0[v214] ) | |
v231 = v230 + 0.5; | |
else | |
v231 = v230 + 1.0; | |
flt_4686D4[v214] = v231; | |
dword_4686D8[v214] = dword_46848C[v214]; | |
dword_4686DC[v214] = dword_468490[v214]; | |
dword_4686E0[v214] = dword_468494[v214]; | |
dword_4686E4[v214] = LODWORD(flt_468498[v214]); | |
dword_4686E8[v214] = LODWORD(flt_46849C[v214]); | |
dword_4686EC[v214] = LODWORD(flt_4684A0[v214]); | |
dword_4686F0[v214] = LODWORD(flt_4684A4[v214]); | |
dword_4686F4[v214] = LODWORD(flt_4684A8[v214]); | |
dword_4686F8[v214] = LODWORD(flt_4684AC[v214]); | |
sub_41BDA0((int)((char *)&unk_4686CC + v214 * 4), v231, a1, a2, a3, 1); | |
} | |
v232 = 245 * i; | |
if ( flt_46872C[245 * i] > 0.0099999998 | |
|| flt_46872C[v232] < -0.0099999998 | |
|| (v98 = -0.0099999998, flt_468730[v232] > 0.0099999998) | |
|| flt_468730[v232] < -0.0099999998 ) | |
{ | |
v223 = dword_4687F0[v232] == 0; | |
PerformanceCount.LowPart = dword_2848700 & 0x1FF; | |
*(float *)&v411 = (double)(signed int)PerformanceCount.LowPart - 255.5; | |
if ( v223 ) | |
v233 = 0.01600000075995922; | |
else | |
v233 = 0.02800000086426735; | |
v405 = (flt_468750[v232] * flt_46872C[v232] + flt_468754[v232] * flt_468730[v232]) | |
* v233 | |
* *(float *)&v411; | |
*(float *)&v411 = *(float *)&v411 | |
* v233 | |
* (flt_468738[v232] * flt_46872C[v232] + flt_46873C[v232] * flt_468730[v232]); | |
if ( (dword_2848700 & 0x3FF) <= 511 ) | |
{ | |
v236 = -v405; | |
sub_41DE20(0.0, v236, *(float *)&v411); | |
v399 = -*(float *)&v411; | |
v235 = v405; | |
} | |
else | |
{ | |
v234 = -*(float *)&v411; | |
sub_41DE20(0.0, v405, v234); | |
v399 = *(float *)&v411; | |
v235 = -v405; | |
} | |
v237 = v235; | |
v98 = 0.0; | |
sub_41DE20(0.0, v237, v399); | |
} | |
v238 = dword_46881C[245 * i]; | |
if ( dword_2848700 < v238 ) | |
{ | |
switch ( dword_4687FC[245 * i] ) | |
{ | |
case 0: | |
v98 = 0.0; | |
v400 = 0.0; | |
*(float *)&PerformanceCount.LowPart = (double)(dword_2848700 - v238 + 1000) * -0.001000000047497451; | |
v239 = *(float *)&PerformanceCount.LowPart; | |
goto LABEL_452; | |
case 1: | |
v98 = 0.0; | |
v400 = 0.0; | |
*(float *)&PerformanceCount.LowPart = (double)(v238 - dword_2848700) * -0.003000000026077032; | |
v239 = *(float *)&PerformanceCount.LowPart; | |
goto LABEL_452; | |
case 2: | |
v98 = 0.0; | |
v400 = 0.0; | |
*(float *)&PerformanceCount.LowPart = (double)(v238 - dword_2848700) * -0.001000000047497451; | |
v239 = *(float *)&PerformanceCount.LowPart; | |
goto LABEL_452; | |
case 3: | |
v98 = 0.0; | |
v400 = 0.0; | |
*(float *)&PerformanceCount.LowPart = (double)(v238 - dword_2848700) * 0.0005000000237487257; | |
v239 = *(float *)&PerformanceCount.LowPart; | |
goto LABEL_452; | |
case 4: | |
v98 = 0.0; | |
v400 = 0.0; | |
*(float *)&PerformanceCount.LowPart = (double)(dword_2848700 - v238 + 3000) * 0.0005000000237487257; | |
v239 = *(float *)&PerformanceCount.LowPart; | |
LABEL_452: | |
v240 = v239; | |
v241 = v98; | |
sub_41DE20(v241, v240, v400); | |
break; | |
default: | |
break; | |
} | |
} | |
v242 = 245 * i; | |
dword_468684[245 * i] = dword_4684E0[245 * i]; | |
dword_468688[v242] = dword_4684E4[v242]; | |
dword_46868C[v242] = dword_4684E8[v242]; | |
dword_468690[v242] = dword_4684EC[v242]; | |
dword_468694[v242] = dword_4684F0[v242]; | |
dword_468698[v242] = dword_4684F4[v242]; | |
dword_46869C[v242] = dword_4684F8[v242]; | |
dword_4686A0[v242] = dword_4684FC[v242]; | |
dword_4686A4[v242] = dword_468500[v242]; | |
if ( dword_4687FC[v242] <= 1 ) | |
{ | |
*(float *)&dword_468684[v242] = *(float *)&dword_468684[v242] * 1.5; | |
*(float *)&dword_468688[v242] = *(float *)&dword_468688[v242] * 1.5; | |
*(float *)&dword_46868C[v242] = *(float *)&dword_46868C[v242] * 1.5; | |
*(float *)&dword_468690[v242] = *(float *)&dword_468690[v242] * 1.5; | |
*(float *)&dword_468694[v242] = *(float *)&dword_468694[v242] * 1.5; | |
*(float *)&dword_468698[v242] = *(float *)&dword_468698[v242] * 1.5; | |
*(float *)&dword_46869C[v242] = *(float *)&dword_46869C[v242] * 1.5; | |
*(float *)&dword_4686A0[v242] = *(float *)&dword_4686A0[v242] * 1.5; | |
v98 = 1.5 * *(float *)&dword_4686A4[v242]; | |
*(float *)&dword_4686A4[v242] = v98; | |
} | |
sub_41BDA0((int)&flt_468528[v242], v98, a1, a2, a3, 1); | |
sub_41BDA0((int)&dword_468480[245 * i], v98, a1, a2, a3, 1); | |
sub_41BDA0((int)&dword_4684D4[245 * i], v98, a1, a2, a3, 1); | |
sub_41BDA0((int)&flt_46857C[245 * i], v98, a1, a2, a3, 1); | |
sub_41BDA0((int)&flt_4685D0[245 * i], v98, a1, a2, a3, 1); | |
v243 = 245 * i; | |
if ( dword_4687FC[245 * i] == 2 ) | |
{ | |
PerformanceCount.LowPart = LOBYTE(dword_468800[v243]); | |
v244 = BYTE1(dword_468800[v243]); | |
v245 = (double)v409 / 127.0; | |
PerformanceCount.LowPart = (signed int)((double)(signed int)PerformanceCount.LowPart * v245); | |
LOBYTE(qword_702768) = PerformanceCount.LowPart; | |
PerformanceCount.LowPart = v244; | |
v246 = BYTE2(dword_468800[v243]); | |
PerformanceCount.LowPart = (signed int)((double)(signed int)PerformanceCount.LowPart * v245); | |
BYTE1(qword_702768) = PerformanceCount.LowPart; | |
v98 = v245 * (double)v246; | |
PerformanceCount.LowPart = (signed int)v98; | |
BYTE2(qword_702768) = (signed int)v98; | |
sub_41BDA0((int)&dword_468678[v243], v98, a1, a2, a3, 1); | |
LODWORD(qword_702768) = &unk_7F7F7F; | |
v206 = 0; | |
} | |
else | |
{ | |
sub_41BDA0((int)&dword_468678[v243], v98, a1, a2, a3, 1); | |
v206 = 0; | |
} | |
} | |
} | |
} | |
else | |
{ | |
dword_468830[v208] = v206; | |
dword_46882C[v208] = v206; | |
dword_468828[v208] = v206; | |
} | |
} | |
v207 = i + 1; | |
i = v207; | |
} | |
while ( v207 != 32 ); | |
v248 = dword_283CD18 - 1; | |
LODWORD(qword_702768) = &unk_7F7F7F; | |
i = dword_283CD18 - 1; | |
if ( dword_283CD18 - 1 >= v206 ) | |
{ | |
do | |
{ | |
v249 = 21 * v248; | |
if ( dword_283D08C[21 * v248] > -4 ) | |
{ | |
v250 = (int)&flt_283D040[v249]; | |
if ( sub_41A070((int)&flt_283D040[v249]) ) | |
{ | |
sub_41BDA0(v250, v98, a1, a2, a3, 1); | |
v248 = i; | |
} | |
} | |
--v248; | |
i = v248; | |
} | |
while ( v248 >= 0 ); | |
} | |
LOBYTE(v251) = 0; | |
i = 0; | |
if ( dword_4681CC > v206 ) | |
{ | |
do | |
{ | |
v252 = (unsigned __int8)(dword_4681C8 + (_BYTE)v251); | |
v408 = v252; | |
v252 *= 32; | |
v253 = *(int *)((char *)dword_28465FC + v252); | |
PerformanceCount.LowPart = *(int *)((char *)dword_28465F8 + v252) - dword_2848700 + 500; | |
*(float *)&PerformanceCount.LowPart = (double)(signed int)PerformanceCount.LowPart * 0.000199999994947575; | |
sub_41D440( | |
*(float *)((char *)dword_28465E0 + v252), | |
*(float *)((char *)dword_28465E4 + v252), | |
COERCE_SIGNED_INT(*(float *)((char *)dword_28465E8 + v252)), | |
*(float *)&PerformanceCount.LowPart, | |
v253); | |
v251 = i + 1; | |
i = v251; | |
} | |
while ( v251 < dword_4681CC ); | |
} | |
if ( dword_28485E8 || !dword_46880C[245 * dword_283CDB0] ) | |
goto LABEL_614; | |
v422 = 0.0; | |
v423 = 0.0; | |
v424 = -0.1; | |
v425 = 1.0; | |
v429 = 1.0; | |
*(float *)&v418 = 1.0; | |
v426 = 0.0; | |
v427 = 0.0; | |
v428 = 0.0; | |
v430 = 0.0; | |
*(float *)&v416 = 0.0; | |
*(float *)&v417 = 0.0; | |
flt_283CC4C = -0.001; | |
flt_283CC50 = 0.0; | |
flt_283CC54 = 0.0; | |
flt_283CC58 = 0.0; | |
flt_283CC5C = 0.0; | |
flt_283CC60 = 0.001; | |
flt_283CC68 = 0.001; | |
flt_283CC64 = 0.0; | |
flt_283CC6C = 0.0; | |
*(float *)&PerformanceCount.LowPart = flt_28485E0 + flt_28485E0; | |
sub_41DE20(*(float *)&PerformanceCount.LowPart, 0.0, 0.0); | |
sub_41AB80((int)&v416, (int)&v428, (int)&v422, (int)&v425, dword_4716E4 >> 1, dword_471F28 >> 1, dword_4716E4 >> 1); | |
if ( dword_2848708 ) | |
{ | |
flt_283CC40 = -0.090000004; | |
flt_283CC44 = -0.059999999; | |
v254 = 0.0; | |
} | |
else | |
{ | |
flt_283CC40 = -0.045000002; | |
flt_283CC44 = -0.025; | |
v254 = -0.050000001; | |
} | |
flt_283CC48 = v254; | |
dword_283CC90 = dword_273CA14; | |
sub_41BDA0((int)&flt_283CC40, v254, a1, a2, a3, 0); | |
if ( dword_2848708 == 1 ) | |
{ | |
flt_283CC40 = -0.039999999; | |
flt_283CC44 = -0.025; | |
v255 = -0.050000001; | |
} | |
else | |
{ | |
flt_283CC40 = -0.079999998; | |
flt_283CC44 = -0.059999999; | |
v255 = 0.0; | |
} | |
flt_283CC48 = v255; | |
dword_283CC90 = dword_273CA18; | |
sub_41BDA0((int)&flt_283CC40, v255, a1, a2, a3, 0); | |
if ( dword_283CD20 ) | |
{ | |
if ( dword_2848708 == 2 ) | |
{ | |
flt_283CC40 = -0.035; | |
flt_283CC44 = -0.025; | |
v256 = -0.050000001; | |
} | |
else | |
{ | |
flt_283CC40 = -0.07; | |
flt_283CC44 = -0.059999999; | |
v256 = 0.0; | |
} | |
flt_283CC48 = v256; | |
dword_283CC90 = dword_273CA1C; | |
LODWORD(qword_702768) = dword_283CD14; | |
sub_41BDA0((int)&flt_283CC40, v256, a1, a2, a3, 0); | |
LODWORD(qword_702768) = &unk_7F7F7F; | |
} | |
if ( qword_283CD24 ) | |
{ | |
if ( dword_2848708 == 3 ) | |
{ | |
flt_283CC40 = -0.025; | |
flt_283CC44 = -0.025; | |
v257 = -0.050000001; | |
} | |
else | |
{ | |
flt_283CC40 = -0.050000001; | |
flt_283CC44 = -0.059999999; | |
v257 = 0.0; | |
} | |
flt_283CC48 = v257; | |
dword_283CC90 = dword_273CA20; | |
sub_41BDA0((int)&flt_283CC40, v257, a1, a2, a3, 0); | |
} | |
if ( dword_283CD2C ) | |
{ | |
if ( dword_2848708 == 4 ) | |
{ | |
flt_283CC40 = -0.015; | |
flt_283CC44 = -0.025; | |
v258 = -0.050000001; | |
} | |
else | |
{ | |
flt_283CC40 = -0.029999999; | |
flt_283CC44 = -0.059999999; | |
v258 = 0.0; | |
} | |
flt_283CC48 = v258; | |
dword_283CC90 = dword_273CA24; | |
sub_41BDA0((int)&flt_283CC40, v258, a1, a2, a3, 0); | |
} | |
if ( dword_468808[245 * dword_283CDB0] ) | |
{ | |
flt_283CC40 = -0.039999999; | |
flt_283CC44 = 0.0; | |
flt_283CC48 = -0.050000001; | |
if ( dword_468804[245 * dword_283CDB0] ) | |
dword_283CC90 = dword_273CA60; | |
else | |
dword_283CC90 = dword_273CA64; | |
sub_41BDA0((int)&flt_283CC40, -0.050000001, a1, a2, a3, 0); | |
} | |
v259 = 245 * dword_283CDB0; | |
flt_283CC40 = 0.05000000074505806 - (double)dword_46845C * 0.0003999999898951501; | |
flt_283CC44 = 0.05000000074505806 - 0.0003999999898951501 * (double)dword_468460; | |
if ( dword_468814[245 * dword_283CDB0] ) | |
flt_283CC44 = flt_283CC44 - flt_468734[v259] * 0.02999999932944775; | |
*(float *)&PerformanceCount.LowPart = fabs(flt_46872C[v259]); | |
v413 = fabs(flt_468730[v259]); | |
v260 = *(float *)&PerformanceCount.LowPart; | |
if ( v413 >= (double)*(float *)&PerformanceCount.LowPart ) | |
v260 = v413; | |
v406 = v260; | |
if ( v406 <= 0.0099999998 ) | |
{ | |
v261 = 0.000244140625; | |
v263 = 0.0; | |
flt_283CC48 = 0.0; | |
} | |
else | |
{ | |
PerformanceCount.LowPart = dword_2848700 & 0x1FF; | |
v261 = 0.000244140625; | |
flt_283CC48 = v406 * ((double)(signed int)PerformanceCount.LowPart - 255.5); | |
v262 = flt_283CC48; | |
if ( (dword_2848700 & 0x3FF) <= 511 ) | |
{ | |
flt_283CC48 = v262 * -0.000244140625; | |
v263 = 0.0; | |
} | |
else | |
{ | |
flt_283CC48 = v262 * 0.000244140625; | |
v263 = 0.0; | |
} | |
} | |
v408 = dword_283CD1C - dword_2848700; | |
if ( dword_283CD1C - dword_2848700 > 0 ) | |
{ | |
v264 = (double)v408 * 0.00048828125; | |
flt_283CC40 = flt_283CC40 + v264; | |
flt_283CC44 = v264 + flt_283CC44; | |
goto LABEL_527; | |
} | |
v265 = dword_2848708; | |
if ( dword_4687FC[v259] == dword_2848708 ) | |
{ | |
v268 = dword_283CD14; | |
if ( dword_468800[v259] == dword_283CD14 ) | |
goto LABEL_528; | |
dword_468800[v259] = dword_283CD14; | |
i = 16 * v268 | 7; | |
v266 = off_43D298(20); | |
if ( !v266 ) | |
{ | |
off_43D2A0(); | |
JUMPOUT(*(int *)loc_42954C); | |
} | |
v269 = off_43D298(4); | |
if ( !v269 ) | |
off_43D2A0(); | |
*(_DWORD *)(v266 + 8) = v269; | |
if ( !v269 ) | |
{ | |
off_43D29C(v266); | |
v266 = 0; | |
goto LABEL_526; | |
} | |
*(_DWORD *)v269 = i; | |
*(_DWORD *)(v266 + 4) = 1; | |
*(_DWORD *)(v266 + 12) = 4; | |
LABEL_525: | |
*(_DWORD *)v266 = 0; | |
*(_DWORD *)(v266 + 16) = 0; | |
goto LABEL_526; | |
} | |
dword_4687FC[v259] = dword_2848708; | |
unk_2842480[0] = 16 * v265 | 6; | |
v266 = off_43D298(20); | |
if ( !v266 ) | |
{ | |
off_43D2A0(); | |
JUMPOUT(*(int *)loc_4294C7); | |
} | |
v267 = off_43D298(1); | |
if ( !v267 ) | |
off_43D2A0(); | |
*(_DWORD *)(v266 + 8) = v267; | |
if ( v267 ) | |
{ | |
*(_BYTE *)v267 = unk_2842480[0]; | |
*(_DWORD *)(v266 + 4) = 1; | |
*(_DWORD *)(v266 + 12) = 1; | |
goto LABEL_525; | |
} | |
off_43D29C(v266); | |
v266 = 0; | |
LABEL_526: | |
sub_42E540(v266); | |
v261 = 0.000244140625; | |
v263 = 0.0; | |
LABEL_527: | |
LOWORD(v268) = dword_283CD14; | |
LABEL_528: | |
flt_283CC4C = -0.0099999998; | |
v270 = 245 * dword_283CDB0; | |
flt_283CC50 = v263; | |
flt_283CC54 = v263; | |
flt_283CC58 = v263; | |
flt_283CC5C = v263; | |
flt_283CC60 = 0.0099999998; | |
flt_283CC68 = 0.0099999998; | |
flt_283CC64 = v263; | |
flt_283CC6C = v263; | |
v271 = (signed int)flt_468728[245 * dword_283CDB0]; | |
v272 = (signed int)flt_468720[245 * dword_283CDB0] + ((signed int)flt_468724[245 * dword_283CDB0] << 9); | |
v273 = dword_4F1F80[v272]; | |
v274 = dword_4F1F80[v272]; | |
if ( v271 <= *(_BYTE *)(v274 + 1) ) | |
{ | |
LABEL_532: | |
v275 = *(_BYTE *)(v274 + 1); | |
} | |
else | |
{ | |
while ( *(_BYTE *)v274 ) | |
{ | |
v274 += 4 * *(_BYTE *)v274; | |
if ( v271 < *(_BYTE *)(v274 + 3) ) | |
break; | |
if ( v271 <= *(_BYTE *)(v274 + 1) ) | |
goto LABEL_532; | |
} | |
v275 = (signed int)flt_468728[245 * dword_283CDB0]; | |
} | |
if ( v275 < *(_BYTE *)(v273 + 1) ) | |
{ | |
LABEL_537: | |
v276 = *(_BYTE *)(v273 + 3); | |
if ( v275 >= v276 ) | |
v277 = 0; | |
else | |
v277 = v273 + 4 * (v275 - v276); | |
} | |
else | |
{ | |
while ( v275 > *(_BYTE *)(v273 + 2) && *(_BYTE *)v273 ) | |
{ | |
v273 += 4 * *(_BYTE *)v273; | |
if ( v275 < *(_BYTE *)(v273 + 1) ) | |
goto LABEL_537; | |
} | |
v277 = v273 + 4 * (v275 - *(_BYTE *)(v273 + 1)) + 4; | |
} | |
v278 = *(_BYTE *)(v277 + 3); | |
v409 = v278; | |
switch ( dword_2848708 ) | |
{ | |
case 0: | |
v279 = dword_46881C[v270]; | |
if ( v279 ) | |
{ | |
v280 = v279 - dword_2848700; | |
if ( v280 < 600 ) | |
{ | |
if ( v280 < 300 ) | |
{ | |
if ( v280 < 100 ) | |
{ | |
v408 = 3 * v280; | |
i = 4 * v280; | |
} | |
else | |
{ | |
v408 = 300; | |
i = 400; | |
} | |
} | |
else | |
{ | |
v408 = 600 - v280; | |
i = 400; | |
} | |
} | |
else | |
{ | |
v408 = 0; | |
i = 1000 - v280; | |
} | |
*(float *)&PerformanceCount.LowPart = (double)v408; | |
flt_283CC40 = flt_283CC40 - 0.00006103515625 * *(float *)&PerformanceCount.LowPart; | |
v413 = (double)i; | |
flt_283CC44 = 0.000030517578125 * v413 + flt_283CC44; | |
flt_283CC48 = v261 * *(float *)&PerformanceCount.LowPart + flt_283CC48; | |
*(float *)&PerformanceCount.LowPart = v413 * -0.0009765625; | |
v281 = *(float *)&PerformanceCount.LowPart; | |
v261 = v263; | |
*(float *)&PerformanceCount.LowPart = v413 / -320.0; | |
v282 = v263; | |
sub_41DE20(v282, *(float *)&PerformanceCount.LowPart, v281); | |
v278 = v409; | |
} | |
v283 = dword_273CA14; | |
goto LABEL_553; | |
case 1: | |
i = dword_46881C[v270] - dword_2848700; | |
if ( i <= 0 ) | |
{ | |
v283 = dword_273CA18; | |
} | |
else | |
{ | |
v413 = (double)i; | |
flt_283CC40 = flt_283CC40 - 0.00006103515625 * v413; | |
flt_283CC48 = v261 * v413 + flt_283CC48; | |
v284 = v263; | |
v261 = v263; | |
*(float *)&PerformanceCount.LowPart = v413 * -0.0009765625; | |
v285 = v263; | |
sub_41DE20(v285, *(float *)&PerformanceCount.LowPart, v284); | |
v278 = v409; | |
v283 = dword_273CA18; | |
} | |
LABEL_553: | |
dword_283CC90 = v283; | |
LODWORD(qword_702768) = v278 | ((v278 | (v278 << 8)) << 8); | |
sub_41BDA0((int)&flt_283CC40, v261, a1, a2, a3, 0); | |
break; | |
case 2: | |
dword_283CC90 = dword_273CA1C; | |
v286 = (double)v409 / 127.0; | |
LOBYTE(qword_702768) = (signed int)((double)(unsigned __int8)v268 * v286); | |
BYTE1(qword_702768) = (signed int)((double)BYTE1(v268) * v286); | |
v287 = v286 * (double)BYTE2(dword_283CD14); | |
PerformanceCount.LowPart = (signed int)v287; | |
BYTE2(qword_702768) = (signed int)v287; | |
sub_41BDA0((int)&flt_283CC40, v287, a1, a2, a3, 0); | |
break; | |
case 3: | |
if ( dword_28485E4 ) | |
break; | |
i = dword_46881C[v270] - dword_2848700; | |
if ( i > 0 ) | |
{ | |
v413 = (double)i; | |
v288 = 0.000030517578125 * v413; | |
flt_283CC40 = flt_283CC40 + v288; | |
flt_283CC44 = flt_283CC44 + v288; | |
flt_283CC48 = flt_283CC48 - v288; | |
v289 = v263; | |
v290 = v263; | |
v291 = v261 * v413; | |
v261 = v290; | |
*(float *)&PerformanceCount.LowPart = v291; | |
v292 = v290; | |
sub_41DE20(v292, *(float *)&PerformanceCount.LowPart, v289); | |
v278 = v409; | |
} | |
v293 = dword_273CA20; | |
goto LABEL_562; | |
case 4: | |
v294 = dword_46881C[v270]; | |
if ( v294 ) | |
{ | |
PerformanceCount.LowPart = dword_2848700 - v294 + 3000; | |
v295 = (double)(signed int)PerformanceCount.LowPart * 0.0001220703125; | |
flt_283CC40 = flt_283CC40 + v295; | |
v261 = flt_283CC44 - v295; | |
flt_283CC44 = v261; | |
} | |
v293 = dword_273CA24; | |
LABEL_562: | |
dword_283CC90 = v293; | |
LODWORD(qword_702768) = v278 | ((v278 | (v278 << 8)) << 8); | |
sub_41BDA0((int)&flt_283CC40, v261, a1, a2, a3, 0); | |
break; | |
default: | |
break; | |
} | |
LODWORD(qword_702768) = &unk_7F7F7F; | |
if ( dword_28485E4 ) | |
{ | |
v296 = dword_4716E4; | |
v391 = 85 * dword_471F28; | |
v385 = dword_4716E4 << 6; | |
v380 = dword_471F28 << 16; | |
v376 = (int)&unk_1900000; | |
v372 = (int)&unk_C80000; | |
v368 = 400; | |
v364 = 1600; | |
v360 = dword_283CD10; | |
v297 = 400; | |
} | |
else | |
{ | |
v391 = 65536; | |
v385 = 65536; | |
v380 = dword_471F28 << 15; | |
v296 = dword_4716E4; | |
v376 = 524288; | |
v372 = 524288; | |
v368 = 16; | |
v364 = 64; | |
v360 = dword_273CA78; | |
v297 = 16; | |
} | |
sub_41D960(v296 << 15, v297, (int)v360, v364, v368, v372, v376, v380, v385, v391, 0xFFFFFFFFu); | |
sprintf(unk_2842480, "%d", dword_283CF14); | |
v298 = (int)unk_2842480; | |
v299 = &unk_2842480[1]; | |
do | |
v300 = *(_BYTE *)v298++; | |
while ( v300 ); | |
v301 = v298 - (_DWORD)v299; | |
v302 = 12 * (v298 - (_DWORD)v299); | |
v303 = 0; | |
v408 = v301; | |
v409 = v302; | |
i = 0; | |
if ( v301 > 0 ) | |
{ | |
while ( 1 ) | |
{ | |
v304 = unk_2842480[v303]; | |
if ( (unsigned __int8)v304 < 0x30u || (unsigned __int8)v304 > 0x39u ) | |
v305 = 10; | |
else | |
v305 = (unsigned __int8)v304 - 48; | |
v410 = v305; | |
sub_41D960( | |
(dword_4716E4 + 2 * (24 * v303 - v302)) << 15, | |
32, | |
(int)*(&dword_2842440 + v305), | |
96, | |
24, | |
0, | |
2097152, | |
(dword_471F28 - 4) << 16, | |
65536, | |
65536, | |
~(66050 * (100 - dword_283CF14))); | |
v303 = i + 1; | |
i = v303; | |
if ( v303 >= v408 ) | |
break; | |
v302 = v409; | |
} | |
} | |
v306 = dword_2848708; | |
if ( dword_2848708 ) | |
{ | |
if ( dword_2848708 == 2 ) | |
{ | |
v408 = (dword_471F28 - 64) << 16; | |
i = (dword_4716E4 - 64) << 16; | |
sub_41D960( | |
(dword_4716E4 - 64) << 16, | |
64, | |
(int)&unk_28425C0, | |
256, | |
64, | |
0, | |
0, | |
(dword_471F28 - 64) << 16, | |
65536, | |
65536, | |
0xFFFFFFFFu); | |
if ( dword_283CD30 >= 0 ) | |
{ | |
if ( (dword_2848700 & 0x1FF) < 255 ) | |
{ | |
v381 = v408 + ((dword_283CD30 & 0xFFFFFFF8) << 16); | |
v377 = 0; | |
v373 = 0; | |
v369 = 8; | |
v365 = 32; | |
v361 = (int)dword_2848600; | |
} | |
else | |
{ | |
v381 = v408 + ((dword_283CD30 & 0xFFFFFFF8) << 16); | |
v377 = 0; | |
v373 = 0; | |
v369 = 8; | |
v365 = 32; | |
v361 = (int)dword_283CDC0; | |
} | |
sub_41D960(i + ((dword_283CD30 & 7) << 19), 8, v361, v365, v369, v373, v377, v381, 65536, 65536, 0xFFFFFFFFu); | |
} | |
v409 = dword_4716E4 - 64; | |
v306 = dword_2848708; | |
} | |
else | |
{ | |
v409 = dword_4716E4 - 4; | |
} | |
if ( v306 == 3 ) | |
{ | |
sprintf(unk_2842480, "%d-%d", qword_283CD24); | |
} | |
else | |
{ | |
if ( v306 == 2 || v306 == 1 ) | |
v401 = dword_283CD20; | |
else | |
v401 = dword_283CD2C; | |
sprintf(unk_2842480, "%d", v401); | |
} | |
v307 = strlen(unk_2842480); | |
v308 = v307 - 1; | |
for ( i = v307 - 1; v308 >= 0; i = v308 ) | |
{ | |
v309 = unk_2842480[v308]; | |
if ( (unsigned __int8)v309 < 0x30u || (unsigned __int8)v309 > 0x39u ) | |
v310 = 10; | |
else | |
v310 = (unsigned __int8)v309 - 48; | |
v410 = v310; | |
sub_41D960( | |
v409 << 16, | |
32, | |
(int)*(&dword_2842440 + v310), | |
96, | |
24, | |
1572864, | |
2097152, | |
(dword_471F28 - 4) << 16, | |
65536, | |
65536, | |
0xFFFFFFFFu); | |
v409 -= 24; | |
v308 = i - 1; | |
} | |
} | |
v311 = 0; | |
i = 0; | |
v312 = (_UNKNOWN *)dword_46882C; | |
while ( !*((_DWORD *)v312 - 7) | |
|| v311 == dword_283CDB0 | |
|| !*(_DWORD *)v312 | |
|| *((_DWORD *)v312 - 10) != dword_468804[245 * dword_283CDB0] ) | |
{ | |
v312 = (char *)v312 + 980; | |
++v311; | |
if ( v312 == &unk_4702AC ) | |
{ | |
i = v311; | |
goto LABEL_614; | |
} | |
} | |
v223 = dword_468804[245 * v311] == 0; | |
i = v311; | |
v313 = (int)((char *)&unk_468844 + 980 * v311); | |
v314 = v313; | |
if ( v223 ) | |
{ | |
do | |
v315 = *(_BYTE *)v314++; | |
while ( v315 ); | |
v316 = 255; | |
} | |
else | |
{ | |
do | |
v317 = *(_BYTE *)v314++; | |
while ( v317 ); | |
v316 = 65280; | |
} | |
sub_41B8D0( | |
(unsigned int)(dword_4716E4 - 6 * (v314 - (v313 + 1))) >> 1, | |
v316, | |
dword_471F28 - (dword_471F28 >> 2), | |
v313); | |
LABEL_614: | |
if ( !dword_28465C0 ) | |
goto LABEL_640; | |
v408 = dword_471F28 << 15; | |
i = dword_4716E4 << 15; | |
sub_41D960( | |
dword_4716E4 << 15, | |
512, | |
(int)dword_273CB60, | |
2048, | |
512, | |
(int)&unk_1000000, | |
(int)&unk_1000000, | |
dword_471F28 << 15, | |
65536, | |
65536, | |
0); | |
v318 = 0; | |
v412 = 0; | |
while ( 2 ) | |
{ | |
v319 = 21 * v318; | |
if ( dword_283D08C[21 * v318] > -4 && v318 != (dword_468804[245 * dword_283CDB0] == 0) + 2 ) | |
{ | |
v320 = (signed int)flt_283D040[v319]; | |
v321 = flt_283D044[v319]; | |
v322 = i + ((v320 - 256) << 16); | |
v409 = i + ((v320 - 256) << 16); | |
v323 = v408 + (((signed int)v321 - 256) << 16); | |
v410 = v408 + (((signed int)v321 - 256) << 16); | |
switch ( v318 ) | |
{ | |
case 0: | |
v392 = -4294901760i64; | |
v386 = 65536; | |
v382 = v408 + (((signed int)v321 - 256) << 16); | |
v378 = 229376; | |
v374 = 229376; | |
v370 = 7; | |
v366 = 28; | |
v362 = &dword_2848800; | |
goto LABEL_623; | |
case 1: | |
v392 = -4294901760i64; | |
v386 = 65536; | |
v382 = v408 + (((signed int)v321 - 256) << 16); | |
v378 = 229376; | |
v374 = 229376; | |
v370 = 7; | |
v366 = 28; | |
v362 = &dword_283CB60; | |
goto LABEL_623; | |
case 2: | |
v392 = -4294901760i64; | |
v386 = 65536; | |
v382 = v408 + (((signed int)v321 - 256) << 16); | |
v378 = 229376; | |
v374 = 229376; | |
v370 = 7; | |
v366 = 28; | |
v362 = &dword_273CA80; | |
goto LABEL_623; | |
case 3: | |
v392 = -4294901760i64; | |
v386 = 65536; | |
v382 = v408 + (((signed int)v321 - 256) << 16); | |
v378 = 229376; | |
v374 = 229376; | |
v370 = 7; | |
v366 = 28; | |
v362 = &dword_2848720; | |
LABEL_623: | |
sub_41D960(v322, 7, (int)v362, v366, v370, v374, v378, v382, v386, v392, HIDWORD(v392)); | |
v323 = v410; | |
v322 = v409; | |
break; | |
default: | |
break; | |
} | |
v324 = flt_283D048[21 * v412] - flt_468728[245 * dword_283CDB0]; | |
if ( v324 > 10.0 ) | |
{ | |
v393 = -4294901760i64; | |
v387 = 65536; | |
v383 = v323 + 262144; | |
v379 = 0; | |
v375 = 229376; | |
v371 = 7; | |
v367 = 28; | |
v363 = (int)&unk_283CCA0; | |
goto LABEL_628; | |
} | |
if ( v324 < -10.0 ) | |
{ | |
v393 = -4294901760i64; | |
v387 = 65536; | |
v383 = v323 - 458752; | |
v379 = 0; | |
v375 = 229376; | |
v371 = 7; | |
v367 = 28; | |
v363 = (int)&unk_283CD40; | |
LABEL_628: | |
sub_41D960(v322, 4, v363, v367, v371, v375, v379, v383, v387, v393, HIDWORD(v393)); | |
} | |
} | |
v318 = v412 + 1; | |
v412 = v318; | |
if ( v318 < 4 ) | |
continue; | |
break; | |
} | |
v410 = _time64(0); | |
v325 = 0; | |
v409 = 0; | |
while ( 2 ) | |
{ | |
v326 = 245 * v325; | |
if ( dword_468810[245 * v325] && v325 != dword_283CDB0 ) | |
{ | |
if ( dword_468804[v326] == dword_468804[245 * dword_283CDB0] ) | |
{ | |
v394 = -4294901760i64; | |
v388 = 65536; | |
v384 = v408 + (((signed int)flt_468724[v326] - 256) << 16); | |
v327 = (signed int)flt_468720[v326]; | |
v328 = dword_28487FC; | |
goto LABEL_637; | |
} | |
if ( v410 < dword_468450 ) | |
{ | |
v394 = -4294901760i64; | |
v388 = 65536; | |
v384 = v408 + (((signed int)flt_468724[v326] - 256) << 16); | |
v327 = (signed int)flt_468720[v326]; | |
v328 = dword_283CF18; | |
LABEL_637: | |
sub_41D960(i + ((v327 - 256) << 16), 7, (int)v328, 28, 7, 229376, 229376, v384, v388, v394, HIDWORD(v394)); | |
v325 = v409; | |
} | |
} | |
++v325; | |
v409 = v325; | |
if ( v325 != 32 ) | |
continue; | |
break; | |
} | |
v329 = (signed int)flt_468720[245 * dword_283CDB0]; | |
v330 = flt_468724[245 * dword_283CDB0]; | |
v331 = v329 + (dword_4716E4 >> 1) - 256; | |
i = v329 + (dword_4716E4 >> 1) - 256; | |
v332 = (signed int)v330; | |
v333 = flt_468754[245 * dword_283CDB0] * 8.0; | |
v408 = v332 + (dword_471F28 >> 1) - 256; | |
sub_41A570( | |
v332 + (dword_471F28 >> 1) - 256, | |
v331, | |
(signed int)(8.0 * flt_468750[245 * dword_283CDB0] + (double)i), | |
(signed int)(v333 + (double)v408)); | |
sub_41D960(i << 16, 7, (int)dword_273C9DC, 28, 7, 229376, 229376, v408 << 16, 65536, 65536, 0xFFFFFFFFu); | |
LABEL_640: | |
if ( dword_28485E8 ) | |
{ | |
i = (dword_4716E4 >> 1) - 129; | |
v408 = dword_471F28 - 80; | |
sub_41B8D0(i, (int)&unk_FFFFFF, dword_471F28 - 80, (int)"Controls..."); | |
v408 += 10; | |
sub_41B8D0(i, 255, v408, (int)"Press B to go Blue"); | |
v408 += 10; | |
sub_41B8D0(i, 65280, v408, (int)"Press G to go Green"); | |
v408 += 10; | |
sub_41B8D0(i, (int)&unk_FFFFFF, v408, (int)"Movement:W,S,A,D Jump:SPACE Crouch:CTRL"); | |
v408 += 10; | |
sub_41B8D0(i, (int)&unk_FFFFFF, v408, (int)"Walk:SHIFT Fire:L.MOUSE Gunsight:R.MOUSE"); | |
v408 += 10; | |
sub_41B8D0(i, (int)&unk_FFFFFF, v408, (int)"Reload:R Scores:TAB Allchat:T Teamchat:Y"); | |
v408 += 10; | |
sub_41B8D0(i, (int)&unk_FFFFFF, v408, (int)"Color Select:ARROWS Color Sample:R.MOUSE"); | |
v408 += 10; | |
sub_41B8D0(i, (int)&unk_FFFFFF, v408, (int)"Weapons:1-5 or MOUSEWHEEL Map:M Quit:ESC"); | |
goto LABEL_644; | |
} | |
if ( byte_47192F && !dword_468440 ) | |
{ | |
LABEL_644: | |
sprintf(unk_2842480, "%d", dword_702780[0]); | |
v334 = (int)unk_2842480; | |
v335 = &unk_2842480[1]; | |
do | |
v336 = *(_BYTE *)v334++; | |
while ( v336 ); | |
v337 = v334 - (_DWORD)v335; | |
v338 = 12 * (v334 - (_DWORD)v335); | |
v339 = 0; | |
v408 = v337; | |
v409 = v338; | |
i = 0; | |
if ( v337 > 0 ) | |
{ | |
while ( 1 ) | |
{ | |
v340 = unk_2842480[v339]; | |
if ( (unsigned __int8)v340 < 0x30u || (unsigned __int8)v340 > 0x39u ) | |
v341 = 10; | |
else | |
v341 = (unsigned __int8)v340 - 48; | |
v410 = v341; | |
sub_41D960( | |
(dword_4716E4 + 4 * (24 * v339 - v338)) << 14, | |
32, | |
(int)*(&dword_2842440 + v341), | |
96, | |
24, | |
0, | |
0, | |
dword_471F28 << 13, | |
65536, | |
65536, | |
0xFF0000FFu); | |
v339 = i + 1; | |
i = v339; | |
if ( v339 >= v408 ) | |
break; | |
v338 = v409; | |
} | |
} | |
sprintf(unk_2842480, "%d", dword_702784); | |
v342 = (int)unk_2842480; | |
v343 = &unk_2842480[1]; | |
do | |
v344 = *(_BYTE *)v342++; | |
while ( v344 ); | |
v345 = v342 - (_DWORD)v343; | |
v346 = 12 * (v342 - (_DWORD)v343); | |
v347 = 0; | |
v408 = v345; | |
v409 = v346; | |
i = 0; | |
if ( v345 > 0 ) | |
{ | |
while ( 1 ) | |
{ | |
v348 = unk_2842480[v347]; | |
if ( (unsigned __int8)v348 < 0x30u || (unsigned __int8)v348 > 0x39u ) | |
v349 = 10; | |
else | |
v349 = (unsigned __int8)v348 - 48; | |
v410 = v349; | |
sub_41D960( | |
49152 * dword_4716E4 + ((24 * v347 - v346) << 16), | |
32, | |
(int)*(&dword_2842440 + v349), | |
96, | |
24, | |
0, | |
0, | |
dword_471F28 << 13, | |
65536, | |
65536, | |
0xFF00FF00u); | |
v347 = i + 1; | |
i = v347; | |
if ( v347 >= v408 ) | |
break; | |
v346 = v409; | |
} | |
} | |
v350 = 0; | |
i = 0; | |
v409 = dword_471F28 >> 2; | |
v408 = dword_471F28 >> 2; | |
do | |
{ | |
if ( dword_468810[245 * v350] ) | |
{ | |
if ( dword_468804[245 * v350] ) | |
{ | |
v410 = dword_4716E4 - (dword_4716E4 >> 2); | |
v353 = (int)_itoa(v350, unk_2842480, 10); | |
sub_41B8D0(v410 - 57, 65280, v409, v353); | |
sub_41B8D0(v410 - 39, 65280, v409, (int)((char *)&unk_468844 + 980 * i)); | |
v354 = (int)_itoa(dword_468824[245 * i], unk_2842480, 10); | |
sub_41B8D0(v410 + 57, 65280, v409, v354); | |
v409 += 10; | |
} | |
else | |
{ | |
v410 = dword_4716E4 >> 2; | |
v351 = (int)_itoa(v350, unk_2842480, 10); | |
sub_41B8D0(v410 - 57, 255, v408, v351); | |
sub_41B8D0(v410 - 39, 255, v408, (int)((char *)&unk_468844 + 980 * i)); | |
v352 = (int)_itoa(dword_468824[245 * i], unk_2842480, 10); | |
sub_41B8D0(v410 + 57, 255, v408, v352); | |
v408 += 10; | |
} | |
v350 = i; | |
} | |
++v350; | |
i = v350; | |
} | |
while ( v350 != 32 ); | |
} | |
v408 = dword_471F28 - 100; | |
if ( dword_468440 ) | |
sub_41B8D0(12, (int)&unk_FFFFFF, dword_471F28 - 100, (int)word_283CEC0); | |
v355 = 0; | |
i = 0; | |
do | |
{ | |
v356 = 26 * v355; | |
v357 = v408 + 10; | |
v358 = (int)((char *)&unk_4681D0 + v356 * 4); | |
v408 += 10; | |
if ( (char *)&unk_4681D0 + v356 * 4 ) | |
{ | |
if ( dword_2848700 <= dword_468234[v356] ) | |
{ | |
switch ( dword_468230[v356] ) | |
{ | |
case 0: | |
v359 = (int)&unk_CCCCFF; | |
goto LABEL_683; | |
case 1: | |
v359 = (int)&unk_CCFFCC; | |
goto LABEL_683; | |
case 2: | |
v359 = 255; | |
goto LABEL_683; | |
case 3: | |
v359 = 65280; | |
goto LABEL_683; | |
case 4: | |
v359 = (int)&unk_FF0000; | |
LABEL_683: | |
sub_41B8D0(12, v359, v357, v358); | |
break; | |
default: | |
break; | |
} | |
} | |
else | |
{ | |
*(_BYTE *)v358 = 0; | |
} | |
} | |
v355 = i + 1; | |
i = v355; | |
} | |
while ( v355 < 6 ); | |
if ( dword_46FFFC ) | |
{ | |
dword_46FFFC = 0; | |
(*(void (__stdcall **)(int, int))(*(_DWORD *)dword_46FFE8 + 128))(dword_46FFE8, dword_467D44); | |
} | |
sub_414C40(); | |
} | |
// 426E28: using guessed type int(); | |
// 4278F0: using guessed type int(); | |
// 4279E4: using guessed type int(); | |
// 427AD1: using guessed type int(); | |
// 427B83: using guessed type int(); | |
// 4294C7: using guessed type int(); | |
// 42954C: using guessed type int(); | |
// 438F68: using guessed type int dword_438F68; | |
// 438F6C: using guessed type __int64 qword_438F6C; | |
// 438F74: using guessed type __int16 word_438F74; | |
// 438F76: using guessed type char byte_438F76; | |
// 438F98: using guessed type int dword_438F98; | |
// 438F9C: using guessed type int dword_438F9C; | |
// 438FA0: using guessed type int dword_438FA0; | |
// 438FA4: using guessed type int dword_438FA4; | |
// 438FA8: using guessed type __int16 word_438FA8; | |
// 438FAC: using guessed type int dword_438FAC; | |
// 438FB0: using guessed type int dword_438FB0; | |
// 438FB4: using guessed type int dword_438FB4; | |
// 438FB8: using guessed type int dword_438FB8; | |
// 438FBC: using guessed type char byte_438FBC; | |
// 43D298: using guessed type int (__cdecl *off_43D298)(_DWORD); | |
// 43D29C: using guessed type int (__cdecl *off_43D29C)(_DWORD); | |
// 43D2A0: using guessed type int (*off_43D2A0)(void); | |
// 467D14: using guessed type float flt_467D14; | |
// 467D44: using guessed type int dword_467D44; | |
// 467DC0: using guessed type int dword_467DC0[]; | |
// 4681C8: using guessed type int dword_4681C8; | |
// 4681CC: using guessed type int dword_4681CC; | |
// 468230: using guessed type int dword_468230[]; | |
// 468234: using guessed type int dword_468234[]; | |
// 468440: using guessed type int dword_468440; | |
// 468444: using guessed type int dword_468444; | |
// 468448: using guessed type int dword_468448; | |
// 46844C: using guessed type int dword_46844C; | |
// 468450: using guessed type int dword_468450; | |
// 468454: using guessed type int dword_468454; | |
// 468458: using guessed type int dword_468458; | |
// 46845C: using guessed type int dword_46845C; | |
// 468460: using guessed type int dword_468460; | |
// 468464: using guessed type int dword_468464; | |
// 468480: using guessed type int dword_468480[]; | |
// 468484: using guessed type int dword_468484[]; | |
// 468488: using guessed type int dword_468488[]; | |
// 46848C: using guessed type int dword_46848C[]; | |
// 468490: using guessed type int dword_468490[]; | |
// 468494: using guessed type int dword_468494[]; | |
// 468498: using guessed type float flt_468498[]; | |
// 46849C: using guessed type float flt_46849C[]; | |
// 4684A0: using guessed type float flt_4684A0[]; | |
// 4684A4: using guessed type float flt_4684A4[]; | |
// 4684A8: using guessed type float flt_4684A8[]; | |
// 4684AC: using guessed type float flt_4684AC[]; | |
// 4684D0: using guessed type int dword_4684D0[]; | |
// 4684D4: using guessed type int dword_4684D4[]; | |
// 4684D8: using guessed type int dword_4684D8[]; | |
// 4684DC: using guessed type int dword_4684DC[]; | |
// 4684E0: using guessed type int dword_4684E0[]; | |
// 4684E4: using guessed type int dword_4684E4[]; | |
// 4684E8: using guessed type int dword_4684E8[]; | |
// 4684EC: using guessed type int dword_4684EC[]; | |
// 4684F0: using guessed type int dword_4684F0[]; | |
// 4684F4: using guessed type int dword_4684F4[]; | |
// 4684F8: using guessed type int dword_4684F8[]; | |
// 4684FC: using guessed type int dword_4684FC[]; | |
// 468500: using guessed type int dword_468500[]; | |
// 468528: using guessed type float flt_468528[]; | |
// 46852C: using guessed type float flt_46852C[]; | |
// 468530: using guessed type float flt_468530[]; | |
// 468534: using guessed type float flt_468534[]; | |
// 468538: using guessed type float flt_468538[]; | |
// 46853C: using guessed type float flt_46853C[]; | |
// 468540: using guessed type float flt_468540[]; | |
// 468544: using guessed type float flt_468544[]; | |
// 468548: using guessed type float flt_468548[]; | |
// 46854C: using guessed type float flt_46854C[]; | |
// 468550: using guessed type float flt_468550[]; | |
// 468554: using guessed type float flt_468554[]; | |
// 46857C: using guessed type float flt_46857C[]; | |
// 468580: using guessed type float flt_468580[]; | |
// 468584: using guessed type float flt_468584[]; | |
// 468588: using guessed type int dword_468588[]; | |
// 46858C: using guessed type int dword_46858C[]; | |
// 468590: using guessed type int dword_468590[]; | |
// 468594: using guessed type int dword_468594[]; | |
// 468598: using guessed type int dword_468598[]; | |
// 46859C: using guessed type int dword_46859C[]; | |
// 4685A0: using guessed type int dword_4685A0[]; | |
// 4685A4: using guessed type int dword_4685A4[]; | |
// 4685A8: using guessed type int dword_4685A8[]; | |
// 4685CC: using guessed type int dword_4685CC[]; | |
// 4685D0: using guessed type float flt_4685D0[]; | |
// 4685D4: using guessed type float flt_4685D4[]; | |
// 4685D8: using guessed type float flt_4685D8[]; | |
// 4685DC: using guessed type int dword_4685DC[]; | |
// 4685E0: using guessed type int dword_4685E0[]; | |
// 4685E4: using guessed type int dword_4685E4[]; | |
// 4685E8: using guessed type int dword_4685E8[]; | |
// 4685EC: using guessed type int dword_4685EC[]; | |
// 4685F0: using guessed type int dword_4685F0[]; | |
// 4685F4: using guessed type int dword_4685F4[]; | |
// 4685F8: using guessed type int dword_4685F8[]; | |
// 4685FC: using guessed type int dword_4685FC[]; | |
// 468620: using guessed type int dword_468620[]; | |
// 468624: using guessed type int dword_468624[]; | |
// 468630: using guessed type float flt_468630[]; | |
// 468634: using guessed type float flt_468634[]; | |
// 46863C: using guessed type float flt_46863C[]; | |
// 468640: using guessed type float flt_468640[]; | |
// 468678: using guessed type int dword_468678[]; | |
// 46867C: using guessed type int dword_46867C[]; | |
// 468680: using guessed type int dword_468680[]; | |
// 468684: using guessed type int dword_468684[]; | |
// 468688: using guessed type int dword_468688[]; | |
// 46868C: using guessed type int dword_46868C[]; | |
// 468690: using guessed type int dword_468690[]; | |
// 468694: using guessed type int dword_468694[]; | |
// 468698: using guessed type int dword_468698[]; | |
// 46869C: using guessed type int dword_46869C[]; | |
// 4686A0: using guessed type int dword_4686A0[]; | |
// 4686A4: using guessed type int dword_4686A4[]; | |
// 4686C8: using guessed type int dword_4686C8[]; | |
// 4686D0: using guessed type float flt_4686D0[]; | |
// 4686D4: using guessed type float flt_4686D4[]; | |
// 4686D8: using guessed type int dword_4686D8[]; | |
// 4686DC: using guessed type int dword_4686DC[]; | |
// 4686E0: using guessed type int dword_4686E0[]; | |
// 4686E4: using guessed type int dword_4686E4[]; | |
// 4686E8: using guessed type int dword_4686E8[]; | |
// 4686EC: using guessed type int dword_4686EC[]; | |
// 4686F0: using guessed type int dword_4686F0[]; | |
// 4686F4: using guessed type int dword_4686F4[]; | |
// 4686F8: using guessed type int dword_4686F8[]; | |
// 468720: using guessed type float flt_468720[]; | |
// 468724: using guessed type float flt_468724[]; | |
// 468728: using guessed type float flt_468728[]; | |
// 46872C: using guessed type float flt_46872C[]; | |
// 468730: using guessed type float flt_468730[]; | |
// 468734: using guessed type float flt_468734[]; | |
// 468738: using guessed type float flt_468738[]; | |
// 46873C: using guessed type float flt_46873C[]; | |
// 468744: using guessed type float flt_468744[]; | |
// 468748: using guessed type float flt_468748[]; | |
// 46874C: using guessed type float flt_46874C[]; | |
// 468750: using guessed type float flt_468750[]; | |
// 468754: using guessed type float flt_468754[]; | |
// 468758: using guessed type int dword_468758[]; | |
// 4687DC: using guessed type int dword_4687DC[]; | |
// 4687E0: using guessed type int dword_4687E0[]; | |
// 4687E4: using guessed type int dword_4687E4[]; | |
// 4687E8: using guessed type int dword_4687E8[]; | |
// 4687EC: using guessed type int dword_4687EC[]; | |
// 4687F0: using guessed type int dword_4687F0[]; | |
// 4687F4: using guessed type int dword_4687F4[]; | |
// 4687F8: using guessed type int dword_4687F8[]; | |
// 4687FC: using guessed type int dword_4687FC[]; | |
// 468800: using guessed type int dword_468800[]; | |
// 468804: using guessed type int dword_468804[]; | |
// 468808: using guessed type int dword_468808[]; | |
// 46880C: using guessed type int dword_46880C[]; | |
// 468810: using guessed type int dword_468810[]; | |
// 468814: using guessed type int dword_468814[]; | |
// 46881C: using guessed type int dword_46881C[]; | |
// 468820: using guessed type int dword_468820[]; | |
// 468824: using guessed type int dword_468824[]; | |
// 468828: using guessed type int dword_468828[]; | |
// 46882C: using guessed type int dword_46882C[]; | |
// 468830: using guessed type int dword_468830[]; | |
// 468840: using guessed type int dword_468840[]; | |
// 46FFE8: using guessed type int dword_46FFE8; | |
// 46FFFC: using guessed type int dword_46FFFC; | |
// 470008: using guessed type int dword_470008; | |
// 47000C: using guessed type int dword_47000C; | |
// 470048: using guessed type int dword_470048; | |
// 471921: using guessed type char byte_471921; | |
// 47192F: using guessed type char byte_47192F; | |
// 471933: using guessed type char byte_471933; | |
// 471942: using guessed type char byte_471942; | |
// 471950: using guessed type char byte_471950; | |
// 471952: using guessed type char byte_471952; | |
// 47196A: using guessed type char byte_47196A; | |
// 47196E: using guessed type char byte_47196E; | |
// 4719E8: using guessed type char byte_4719E8; | |
// 4719EB: using guessed type char byte_4719EB; | |
// 4719ED: using guessed type char byte_4719ED; | |
// 4719F0: using guessed type char byte_4719F0; | |
// 471F28: using guessed type int dword_471F28; | |
// 4F1F80: using guessed type int dword_4F1F80[]; | |
// 701FC0: using guessed type int dword_701FC0; | |
// 702768: using guessed type __int64 qword_702768; | |
// 702780: using guessed type int dword_702780[]; | |
// 702784: using guessed type int dword_702784; | |
// 273C9D8: using guessed type int dword_273C9D8; | |
// 273C9E0: using guessed type float flt_273C9E0; | |
// 273CA00: using guessed type int dword_273CA00[]; | |
// 273CA14: using guessed type int dword_273CA14; | |
// 273CA18: using guessed type int dword_273CA18; | |
// 273CA1C: using guessed type int dword_273CA1C; | |
// 273CA20: using guessed type int dword_273CA20; | |
// 273CA24: using guessed type int dword_273CA24; | |
// 273CA2C: using guessed type int dword_273CA2C; | |
// 273CA30: using guessed type int dword_273CA30; | |
// 273CA38: using guessed type int dword_273CA38; | |
// 273CA3C: using guessed type int dword_273CA3C; | |
// 273CA48: using guessed type int dword_273CA48; | |
// 273CA4C: using guessed type int dword_273CA4C; | |
// 273CA54: using guessed type int dword_273CA54; | |
// 273CA58: using guessed type int dword_273CA58; | |
// 273CA60: using guessed type int dword_273CA60; | |
// 273CA64: using guessed type int dword_273CA64; | |
// 273CA7C: using guessed type int dword_273CA7C; | |
// 273CA80: using guessed type int dword_273CA80; | |
// 273CB60: using guessed type int dword_273CB60[]; | |
// 283CB60: using guessed type int dword_283CB60; | |
// 283CC40: using guessed type float flt_283CC40; | |
// 283CC44: using guessed type float flt_283CC44; | |
// 283CC48: using guessed type float flt_283CC48; | |
// 283CC4C: using guessed type float flt_283CC4C; | |
// 283CC50: using guessed type float flt_283CC50; | |
// 283CC54: using guessed type float flt_283CC54; | |
// 283CC58: using guessed type float flt_283CC58; | |
// 283CC5C: using guessed type float flt_283CC5C; | |
// 283CC60: using guessed type float flt_283CC60; | |
// 283CC64: using guessed type float flt_283CC64; | |
// 283CC68: using guessed type float flt_283CC68; | |
// 283CC6C: using guessed type float flt_283CC6C; | |
// 283CC90: using guessed type int dword_283CC90; | |
// 283CD14: using guessed type int dword_283CD14; | |
// 283CD18: using guessed type int dword_283CD18; | |
// 283CD1C: using guessed type int dword_283CD1C; | |
// 283CD20: using guessed type int dword_283CD20; | |
// 283CD24: using guessed type __int64 qword_283CD24; | |
// 283CD2C: using guessed type int dword_283CD2C; | |
// 283CD30: using guessed type int dword_283CD30; | |
// 283CDC0: using guessed type int dword_283CDC0[]; | |
// 283CEBE: using guessed type __int16 word_283CEBE; | |
// 283CF14: using guessed type int dword_283CF14; | |
// 283CF20: using guessed type int dword_283CF20[]; | |
// 283D040: using guessed type float flt_283D040[]; | |
// 283D044: using guessed type float flt_283D044[]; | |
// 283D048: using guessed type float flt_283D048[]; | |
// 283D070: using guessed type int dword_283D070[]; | |
// 283D074: using guessed type int dword_283D074[]; | |
// 283D078: using guessed type int dword_283D078[]; | |
// 283D088: using guessed type float flt_283D088[]; | |
// 283D08C: using guessed type int dword_283D08C[]; | |
// 283D090: using guessed type int dword_283D090[]; | |
// 283D0EC: using guessed type float flt_283D0EC; | |
// 2842484: using guessed type __int64; | |
// 284248C: using guessed type __int16 word_284248C; | |
// 28424DF: using guessed type char byte_28424DF; | |
// 28425A0: using guessed type int dword_28425A0; | |
// 28425B4: using guessed type int dword_28425B4; | |
// 28425B8: using guessed type int dword_28425B8; | |
// 28465C0: using guessed type int dword_28465C0; | |
// 28465E0: using guessed type int dword_28465E0[]; | |
// 28465E4: using guessed type int dword_28465E4[]; | |
// 28465E8: using guessed type int dword_28465E8[]; | |
// 28465F8: using guessed type int dword_28465F8[]; | |
// 28465FC: using guessed type int dword_28465FC[]; | |
// 28485E0: using guessed type float flt_28485E0; | |
// 28485E4: using guessed type int dword_28485E4; | |
// 28485E8: using guessed type int dword_28485E8; | |
// 2848600: using guessed type int dword_2848600[]; | |
// 2848700: using guessed type int dword_2848700; | |
// 2848708: using guessed type int dword_2848708; | |
// 2848720: using guessed type int dword_2848720; | |
// 2848800: using guessed type int dword_2848800; | |
//----- (0042A860) -------------------------------------------------------- | |
int __cdecl sub_42A860() | |
{ | |
int v0; // ecx@45 | |
__int32 v1; // esi@45 | |
int result; // eax@45 | |
int v3; // ebp@1 | |
int v4; // ecx@1 | |
void *v5; // eax@6 | |
int v6; // edx@6 | |
int v7; // ecx@6 | |
int v8; // edi@10 | |
int v9; // esi@10 | |
void (__stdcall *v10)(_DWORD, _DWORD); // edx@11 | |
void (__cdecl *v11)(_DWORD); // ecx@17 | |
void *v12; // esi@17 | |
signed int v13; // ecx@25 | |
int v14; // edx@25 | |
int v15; // ecx@25 | |
int v16; // ecx@25 | |
void *v17; // esi@31 | |
void (__cdecl *v18)(_DWORD); // ecx@31 | |
int v19; // eax@39 | |
__int16 v20; // dx@44 | |
char *v21; // eax@44 | |
int v22; // [sp+10h] [bp-14h]@9 | |
FILE *v23; // [sp+14h] [bp-10h]@1 | |
int v24; // [sp+18h] [bp-Ch]@9 | |
int v25; // [sp+1Ch] [bp-8h]@45 | |
int v26; // [sp+20h] [bp-4h]@45 | |
v3 = 0; | |
sub_414760(); | |
v23 = fopen("lastmap.vxl", "wb"); | |
if ( !v23 ) | |
sub_416030("Couldn't open lastmap.vxl"); | |
dword_283CDB0 = -1; | |
if ( sub_42DE60(v4, (unsigned int)dword_2848704, (signed int)&dword_28425A0, 2500) > 0 ) | |
{ | |
while ( 1 ) | |
{ | |
sub_414A70(); | |
if ( byte_471921 ) | |
sub_416030("Quit map transfer"); | |
if ( dword_28425A0 != 3 ) | |
sub_416030("Server Disconnect: timeout, quit, or version mismatch"); | |
v5 = dword_28425B0; | |
v6 = *((_DWORD *)dword_28425B0 + 2); | |
v7 = *(_BYTE *)v6 & 0xF; | |
if ( v7 == 8 ) | |
break; | |
if ( v7 == 12 ) | |
{ | |
if ( !(*(_BYTE *)v6 & 0x10) ) | |
{ | |
v13 = *(_DWORD *)v6; | |
v14 = (*(_DWORD *)v6 >> 5) & 0x1F; | |
dword_702780[0] = (v13 >> 10) & 0x3FF; | |
v15 = *((_DWORD *)dword_28425B0 + 2); | |
dword_283CDB0 = v14; | |
dword_702784 = (*(_DWORD *)v15 >> 20) & 0x3FF; | |
v16 = *((_DWORD *)dword_28425B0 + 2); | |
if ( *(_DWORD *)v16 & 0x40000000 ) | |
{ | |
dword_283D0E0 = -4; | |
dword_468808[245 * *(_BYTE *)(*((_DWORD *)dword_28425B0 + 2) + 4)] = 1; | |
} | |
else | |
{ | |
v24 = *(_BYTE *)(v16 + 4) | ((*(_BYTE *)(v16 + 5) & 1) << 8); | |
flt_283D094 = (double)v24 + 0.5; | |
v22 = ((unsigned int)*(_BYTE *)(*((_DWORD *)dword_28425B0 + 2) + 5) >> 1) | ((*(_BYTE *)(*((_DWORD *)dword_28425B0 + 2) + 6) & 3) << 7); | |
flt_283D098 = (double)v22 + 0.5; | |
v24 = (unsigned __int8)(*(_BYTE *)(*((_DWORD *)dword_28425B0 + 2) + 6) >> 2); | |
flt_283D09C = (double)v24; | |
} | |
if ( (**((_DWORD **)v5 + 2) >> 31) & 1 ) | |
{ | |
dword_283D08C[0] = -4; | |
dword_468808[245 * *(_BYTE *)(*((_DWORD *)v5 + 2) + 7)] = 1; | |
} | |
else | |
{ | |
v24 = *(_BYTE *)(*((_DWORD *)v5 + 2) + 7) | ((*(_BYTE *)(*((_DWORD *)v5 + 2) + 8) & 1) << 8); | |
flt_283D040[0] = (double)v24 + 0.5; | |
v22 = ((unsigned int)*(_BYTE *)(*((_DWORD *)v5 + 2) + 8) >> 1) | ((*(_BYTE *)(*((_DWORD *)v5 + 2) + 9) & 3) << 7); | |
flt_283D044[0] = (double)v22 + 0.5; | |
v24 = (unsigned __int8)(*(_BYTE *)(*((_DWORD *)v5 + 2) + 9) >> 2); | |
flt_283D048[0] = (double)v24; | |
} | |
v24 = *(_BYTE *)(*((_DWORD *)v5 + 2) + 10) | ((*(_BYTE *)(*((_DWORD *)v5 + 2) + 11) & 1) << 8); | |
v17 = v5; | |
flt_283D0E8 = (double)v24 + 0.5; | |
v24 = ((unsigned int)*(_BYTE *)(*((_DWORD *)v5 + 2) + 11) >> 1) | ((*(_BYTE *)(*((_DWORD *)v5 + 2) + 12) & 3) << 7); | |
flt_283D0EC = (double)v24 + 0.5; | |
v24 = (unsigned __int8)(*(_BYTE *)(*((_DWORD *)v5 + 2) + 12) >> 2); | |
flt_283D0F0 = (double)v24; | |
v24 = *(_BYTE *)(*((_DWORD *)v5 + 2) + 13) | ((*(_BYTE *)(*((_DWORD *)v5 + 2) + 14) & 1) << 8); | |
flt_283D13C = (double)v24 + 0.5; | |
v22 = ((unsigned int)*(_BYTE *)(*((_DWORD *)v5 + 2) + 14) >> 1) | ((*(_BYTE *)(*((_DWORD *)v5 + 2) + 15) & 3) << 7); | |
flt_283D140 = (double)v22 + 0.5; | |
v24 = (unsigned __int8)(*(_BYTE *)(*((_DWORD *)v5 + 2) + 15) >> 2); | |
flt_283D144 = (double)v24; | |
v18 = (void (__cdecl *)(_DWORD))*((_DWORD *)v5 + 4); | |
if ( v18 ) | |
v18(v5); | |
if ( !(*((_BYTE *)v17 + 4) & 4) ) | |
off_43D29C(*((_DWORD *)v17 + 2)); | |
off_43D29C(v17); | |
goto LABEL_22; | |
} | |
dword_468810[245 * *(_BYTE *)(v6 + 1)] = 0; | |
} | |
else | |
{ | |
if ( v7 == 15 ) | |
{ | |
fwrite((const void *)(v6 + 1), *((_DWORD *)dword_28425B0 + 3) - 1, 1u, v23); | |
++v3; | |
if ( sub_4156A0((int)&v22, (int)&v24) ) | |
{ | |
sub_420120(v24, v22); | |
v8 = dword_4716E4 >> 1; | |
v9 = dword_471F28 >> 1; | |
v22 = (dword_4716E4 >> 1) - 256; | |
sub_41A570(dword_471F28 >> 1, (dword_4716E4 >> 1) - 256, (dword_4716E4 >> 1) - 256 + v3, dword_471F28 >> 1); | |
sub_41B8D0(v8 - 64, -1, v9 - 10, (int)"Downloading Map (Esc to Quit)"); | |
if ( dword_46FFFC ) | |
{ | |
v10 = *(void (__stdcall **)(_DWORD, _DWORD))(*(_DWORD *)dword_46FFE8 + 128); | |
dword_46FFFC = 0; | |
v10(dword_46FFE8, dword_467D44); | |
} | |
sub_414C40(); | |
} | |
goto LABEL_16; | |
} | |
} | |
LABEL_17: | |
v11 = (void (__cdecl *)(_DWORD))*((_DWORD *)v5 + 4); | |
v12 = v5; | |
if ( v11 ) | |
v11(v5); | |
if ( !(*((_BYTE *)v12 + 4) & 4) ) | |
off_43D29C(*((_DWORD *)v12 + 2)); | |
off_43D29C(v12); | |
if ( sub_42DE60((int)dword_2848704, (unsigned int)dword_2848704, (signed int)&dword_28425A0, 2500) <= 0 ) | |
goto LABEL_22; | |
} | |
sub_419180( | |
(const char *)(v6 + 6), | |
(*(_DWORD *)v6 >> 4) & 0x1F, | |
(*(_DWORD *)v6 >> 9) & 1, | |
(*(_DWORD *)v6 >> 10) & 7, | |
(*(_DWORD *)v6 >> 13) & 0x7FF, | |
*(_BYTE *)(v6 + 3) | ((*(_BYTE *)(v6 + 4) | (*(_BYTE *)(v6 + 5) << 8)) << 8)); | |
LABEL_16: | |
v5 = dword_28425B0; | |
goto LABEL_17; | |
} | |
LABEL_22: | |
fclose(v23); | |
if ( dword_283CDB0 < 0 ) | |
sub_416030("Server Timeout: version mismatch or map transfer fail"); | |
if ( sub_418540() ) | |
sub_416030("Couldn't get IP address"); | |
sub_42BB50((int)&v24, unk_2842480); | |
dword_468840[245 * dword_283CDB0] = v24; | |
v19 = (int)fopen("lastmap.vxl", "rb"); | |
if ( v19 && sub_4197D0(v19) < 0 ) | |
sub_416030("Couldn't load map file"); | |
if ( sub_4224D0("name") ) | |
{ | |
strncpy((char *)&unk_468844 + 980 * dword_283CDB0, unk_2842480, 0xFu); | |
byte_468853[980 * dword_283CDB0] = 0; | |
} | |
else | |
{ | |
v20 = *(_WORD *)"e"; | |
v21 = (char *)&unk_468844 + 980 * dword_283CDB0; | |
*(_DWORD *)v21 = *(_DWORD *)"Deuce"; | |
*((_WORD *)v21 + 2) = v20; | |
} | |
sub_414DF0(); | |
dword_2848700 = (signed int)(flt_28485E0 * 1000.0); | |
dword_28425B8 = dword_2848700 + 1000; | |
dword_28425B4 = dword_2848700 + 100; | |
sub_414FD0(dword_2848700 + 1000, 0, "wav/intro.wav"); | |
v26 = v0; | |
v25 = (int)unk_2842480; | |
v1 = 245 * dword_283CDB0; | |
dword_28485E8 = 1; | |
flt_468720[245 * dword_283CDB0] = 256.0; | |
flt_468724[v1] = 511.0; | |
result = dword_5F1780[flt_468720[v1]]; | |
v26 = *(_BYTE *)(result + 1); | |
flt_468728[v1] = (double)v26 - 16.0; | |
flt_468738[v1] = 1.0; | |
flt_46873C[v1] = 0.0; | |
flt_468740[v1] = 0.0; | |
flt_468744[v1] = 0.0; | |
flt_468748[v1] = 0.0; | |
flt_46874C[v1] = 1.0; | |
flt_468750[v1] = 0.0; | |
flt_468754[v1] = -1.0; | |
*(float *)&dword_468758[v1] = 0.0; | |
dword_468804[v1] = -1; | |
dword_46880C[v1] = 0; | |
return result; | |
} | |
// 43D29C: using guessed type int (__cdecl *off_43D29C)(_DWORD); | |
// 467D44: using guessed type int dword_467D44; | |
// 468720: using guessed type float flt_468720[]; | |
// 468724: using guessed type float flt_468724[]; | |
// 468728: using guessed type float flt_468728[]; | |
// 468738: using guessed type float flt_468738[]; | |
// 46873C: using guessed type float flt_46873C[]; | |
// 468740: using guessed type float flt_468740[]; | |
// 468744: using guessed type float flt_468744[]; | |
// 468748: using guessed type float flt_468748[]; | |
// 46874C: using guessed type float flt_46874C[]; | |
// 468750: using guessed type float flt_468750[]; | |
// 468754: using guessed type float flt_468754[]; | |
// 468758: using guessed type int dword_468758[]; | |
// 468804: using guessed type int dword_468804[]; | |
// 468808: using guessed type int dword_468808[]; | |
// 46880C: using guessed type int dword_46880C[]; | |
// 468810: using guessed type int dword_468810[]; | |
// 468840: using guessed type int dword_468840[]; | |
// 46FFE8: using guessed type int dword_46FFE8; | |
// 46FFFC: using guessed type int dword_46FFFC; | |
// 471921: using guessed type char byte_471921; | |
// 471F28: using guessed type int dword_471F28; | |
// 5F1780: using guessed type int dword_5F1780[]; | |
// 702780: using guessed type int dword_702780[]; | |
// 702784: using guessed type int dword_702784; | |
// 283D040: using guessed type float flt_283D040[]; | |
// 283D044: using guessed type float flt_283D044[]; | |
// 283D048: using guessed type float flt_283D048[]; | |
// 283D08C: using guessed type int dword_283D08C[]; | |
// 283D094: using guessed type float flt_283D094; | |
// 283D098: using guessed type float flt_283D098; | |
// 283D09C: using guessed type float flt_283D09C; | |
// 283D0E0: using guessed type int dword_283D0E0; | |
// 283D0E8: using guessed type float flt_283D0E8; | |
// 283D0EC: using guessed type float flt_283D0EC; | |
// 283D0F0: using guessed type float flt_283D0F0; | |
// 283D13C: using guessed type float flt_283D13C; | |
// 283D140: using guessed type float flt_283D140; | |
// 283D144: using guessed type float flt_283D144; | |
// 28425A0: using guessed type int dword_28425A0; | |
// 28425B4: using guessed type int dword_28425B4; | |
// 28425B8: using guessed type int dword_28425B8; | |
// 28485E0: using guessed type float flt_28485E0; | |
// 28485E8: using guessed type int dword_28485E8; | |
// 2848700: using guessed type int dword_2848700; | |
//----- (0042AE10) -------------------------------------------------------- | |
int __cdecl sub_42AE10() | |
{ | |
signed int v0; // edi@1 | |
int v1; // ebp@1 | |
char v2; // al@2 | |
signed int i; // esi@2 | |
char v4; // bl@5 | |
char v5; // al@5 | |
void *v6; // eax@5 | |
unsigned int v7; // ecx@6 | |
int v8; // edx@7 | |
unsigned int v9; // ecx@12 | |
int v10; // edx@13 | |
char v11; // dl@17 | |
int v12; // eax@19 | |
double v13; // st7@19 | |
v0 = 0; | |
*(_DWORD *)unk_2842480 = dword_438AC0; | |
LOBYTE(qword_2842484) = byte_438AC4; | |
v1 = 0; | |
dword_283CD18 = 0; | |
do | |
{ | |
v2 = byte_438970[v1]; | |
for ( i = 4; v2 != 44; ++i ) | |
{ | |
++v1; | |
unk_2842480[i] = v2; | |
v2 = byte_438970[v1]; | |
} | |
if ( strchr(unk_2842480, 95) ) | |
{ | |
v4 = byte_284247F[i]; | |
v5 = byte_438ACC; | |
*(_DWORD *)((char *)&unk_284247E + i) = dword_438AC8; | |
byte_2842482[i] = v5; | |
v6 = sub_420290(unk_2842480); | |
dword_273CA00[v0] = (int)v6; | |
if ( v4 == 66 ) | |
{ | |
v7 = 0; | |
if ( *((_DWORD *)v6 + 6) ) | |
{ | |
do | |
{ | |
v8 = *(_DWORD *)(dword_273CA00[v0] + 28); | |
if ( !((unsigned int)&unk_FFFFFF & *(_DWORD *)(v8 + 8 * v7)) ) | |
*(_DWORD *)(v8 + 8 * v7) = *(_DWORD *)(v8 + 8 * v7) & 0xFF38386C | 0x38386C; | |
++v7; | |
} | |
while ( v7 < *(_DWORD *)(dword_273CA00[v0] + 24) ); | |
} | |
} | |
else | |
{ | |
if ( v4 == 71 ) | |
{ | |
v9 = 0; | |
if ( *((_DWORD *)v6 + 6) ) | |
{ | |
do | |
{ | |
v10 = *(_DWORD *)(dword_273CA00[v0] + 28); | |
if ( !((unsigned int)&unk_FFFFFF & *(_DWORD *)(v10 + 8 * v9)) ) | |
*(_DWORD *)(v10 + 8 * v9) = *(_DWORD *)(v10 + 8 * v9) & 0xFF286C28 | 0x286C28; | |
++v9; | |
} | |
while ( v9 < *(_DWORD *)(dword_273CA00[v0] + 24) ); | |
} | |
} | |
} | |
} | |
else | |
{ | |
v11 = byte_438ACC; | |
*(_DWORD *)&unk_2842480[i] = dword_438AC8; | |
*((_BYTE *)&qword_2842484 + i) = v11; | |
dword_273CA00[v0] = (int)sub_420290(unk_2842480); | |
} | |
switch ( v0 ) | |
{ | |
case 0: | |
*(float *)(dword_273CA00[0] + 12) = *(float *)(dword_273CA00[0] + 12) + 3.0; | |
v12 = dword_273CA00[0]; | |
v13 = *(float *)(dword_273CA00[0] + 16) - 6.0; | |
goto LABEL_25; | |
case 1: | |
*(float *)(dword_273CA04 + 12) = *(float *)(dword_273CA04 + 12) + 3.0; | |
v12 = dword_273CA04; | |
v13 = *(float *)(dword_273CA04 + 16) - 6.0; | |
goto LABEL_25; | |
case 2: | |
*(float *)(dword_273CA08 + 12) = *(float *)(dword_273CA08 + 12) + 4.0; | |
v12 = dword_273CA08; | |
goto LABEL_24; | |
case 3: | |
*(float *)(dword_273CA0C + 12) = *(float *)(dword_273CA0C + 12) + 4.0; | |
v12 = dword_273CA0C; | |
v13 = *(float *)(dword_273CA0C + 16) - 11.0; | |
goto LABEL_25; | |
case 4: | |
*(float *)(dword_273CA10 + 12) = *(float *)(dword_273CA10 + 12) + 4.0; | |
v12 = dword_273CA10; | |
LABEL_24: | |
v13 = *(float *)(v12 + 16) - 8.0; | |
LABEL_25: | |
*(float *)(v12 + 16) = v13; | |
break; | |
default: | |
break; | |
} | |
++v0; | |
++v1; | |
} | |
while ( v0 < 29 ); | |
if ( *(_DWORD *)dword_273CA28 != 6 | |
|| *(_DWORD *)(dword_273CA28 + 4) != 6 | |
|| *(_DWORD *)(dword_273CA28 + 8) != 6 | |
|| *(_DWORD *)dword_273CA44 != 6 | |
|| *(_DWORD *)(dword_273CA44 + 4) != 6 | |
|| *(_DWORD *)(dword_273CA44 + 8) != 6 ) | |
sub_416030("head model has the wrong dimensions"); | |
if ( *(_DWORD *)dword_273CA2C != 8 | |
|| *(_DWORD *)(dword_273CA2C + 4) != 4 | |
|| *(_DWORD *)(dword_273CA2C + 8) != 9 | |
|| *(_DWORD *)dword_273CA48 != 8 | |
|| *(_DWORD *)(dword_273CA48 + 4) != 4 | |
|| *(_DWORD *)(dword_273CA48 + 8) != 9 ) | |
sub_416030("torso model has the wrong dimensions"); | |
if ( *(_DWORD *)dword_273CA30 != 8 | |
|| *(_DWORD *)(dword_273CA30 + 4) != 8 | |
|| *(_DWORD *)(dword_273CA30 + 8) != 7 | |
|| *(_DWORD *)dword_273CA4C != 8 | |
|| *(_DWORD *)(dword_273CA4C + 4) != 8 | |
|| *(_DWORD *)(dword_273CA4C + 8) != 7 ) | |
sub_416030("torsoc model has the wrong dimensions"); | |
if ( *(_DWORD *)dword_273CA34 != 12 | |
|| *(_DWORD *)(dword_273CA34 + 4) != 10 | |
|| *(_DWORD *)(dword_273CA34 + 8) != 6 | |
|| *(_DWORD *)dword_273CA50 != 12 | |
|| *(_DWORD *)(dword_273CA50 + 4) != 10 | |
|| *(_DWORD *)(dword_273CA50 + 8) != 6 ) | |
sub_416030("arms model has the wrong dimensions"); | |
if ( *(_DWORD *)dword_273CA38 != 3 | |
|| *(_DWORD *)(dword_273CA38 + 4) != 5 | |
|| *(_DWORD *)(dword_273CA38 + 8) != 12 | |
|| *(_DWORD *)dword_273CA54 != 3 | |
|| *(_DWORD *)(dword_273CA54 + 4) != 5 | |
|| *(_DWORD *)(dword_273CA54 + 8) != 12 ) | |
sub_416030("leg model has the wrong dimensions"); | |
if ( *(_DWORD *)dword_273CA3C != 3 | |
|| *(_DWORD *)(dword_273CA3C + 4) != 7 | |
|| *(_DWORD *)(dword_273CA3C + 8) != 8 | |
|| *(_DWORD *)dword_273CA58 != 3 | |
|| *(_DWORD *)(dword_273CA58 + 4) != 7 | |
|| *(_DWORD *)(dword_273CA58 + 8) != 8 ) | |
sub_416030("legc model has the wrong dimensions"); | |
sub_422650(); | |
return 0; | |
} | |
// 438AC0: using guessed type int dword_438AC0; | |
// 438AC4: using guessed type char byte_438AC4; | |
// 438AC8: using guessed type int dword_438AC8; | |
// 438ACC: using guessed type char byte_438ACC; | |
// 273CA00: using guessed type int dword_273CA00[]; | |
// 273CA04: using guessed type int dword_273CA04; | |
// 273CA08: using guessed type int dword_273CA08; | |
// 273CA0C: using guessed type int dword_273CA0C; | |
// 273CA10: using guessed type int dword_273CA10; | |
// 273CA28: using guessed type int dword_273CA28; | |
// 273CA2C: using guessed type int dword_273CA2C; | |
// 273CA30: using guessed type int dword_273CA30; | |
// 273CA34: using guessed type int dword_273CA34; | |
// 273CA38: using guessed type int dword_273CA38; | |
// 273CA3C: using guessed type int dword_273CA3C; | |
// 273CA44: using guessed type int dword_273CA44; | |
// 273CA48: using guessed type int dword_273CA48; | |
// 273CA4C: using guessed type int dword_273CA4C; | |
// 273CA50: using guessed type int dword_273CA50; | |
// 273CA54: using guessed type int dword_273CA54; | |
// 273CA58: using guessed type int dword_273CA58; | |
// 283CD18: using guessed type int dword_283CD18; | |
// 2842484: using guessed type __int64 qword_2842484; | |
//----- (0042B1E0) -------------------------------------------------------- | |
signed int __cdecl sub_42B1E0(const char **a1) | |
{ | |
char *v1; // eax@1 | |
char *v2; // esi@1 | |
FILE *v3; // eax@1 | |
FILE *v4; // esi@1 | |
__int32 v5; // edi@3 | |
void *v6; // ebp@3 | |
__int32 v7; // eax@13 | |
_UNKNOWN *v8; // eax@28 | |
const char *v9; // esi@33 | |
const char *v11; // eax@38 | |
char v12; // cl@39 | |
unsigned int v13; // eax@41 | |
int v14; // eax@43 | |
int v15; // eax@43 | |
void *v16; // eax@45 | |
int v17; // eax@46 | |
int v18; // eax@48 | |
int v19; // eax@50 | |
int v20; // eax@52 | |
int v21; // eax@54 | |
int v22; // eax@56 | |
signed int v23; // eax@58 | |
__int32 v24; // [sp+14h] [bp-19Ch]@6 | |
void *v25; // [sp+18h] [bp-198h]@6 | |
HKEY phkResult; // [sp+1Ch] [bp-194h]@6 | |
struct WSAData WSAData; // [sp+20h] [bp-190h]@30 | |
v1 = strrchr(unk_2842480, 92); | |
v2 = v1; | |
*v1 = 0; | |
SetCurrentDirectoryA(unk_2842480); | |
v3 = fopen(v2 + 1, "rb"); | |
v4 = v3; | |
if ( !v3 ) | |
sub_416030("Could not open current executable"); | |
fseek(v3, 0, 2); | |
v5 = ftell(v4); | |
fseek(v4, 0, 0); | |
v6 = malloc(v5 + 1); | |
if ( v5 != fread(v6, 1u, v5, v4) ) | |
{ | |
free(v6); | |
sub_416030("Could not open current executable"); | |
} | |
fclose(v4); | |
v25 = v6; | |
v24 = v5; | |
if ( RegOpenKeyA(HKEY_CLASSES_ROOT, ".CT", &phkResult) ) | |
hostlong = sub_42EF50((int)&v24); | |
else | |
hostlong = 268642439; | |
free(v6); | |
if ( sub_4224D0("xres") ) | |
dword_4716E4 = atol(unk_2842480); | |
else | |
dword_4716E4 = 1024; | |
if ( sub_4224D0("yres") ) | |
v7 = atol(unk_2842480); | |
else | |
v7 = 768; | |
dword_471F28 = v7; | |
if ( dword_4716E4 > 1280 ) | |
dword_4716E4 = 1280; | |
if ( v7 > 1024 ) | |
dword_471F28 = 1024; | |
if ( sub_4224D0("vol") && (atol(unk_2842480) < 0 || atol(unk_2842480) <= 10) ) | |
{ | |
if ( atol(unk_2842480) >= 0 ) | |
dword_273C9D8 = atol(unk_2842480); | |
else | |
dword_273C9D8 = 0; | |
} | |
else | |
{ | |
dword_273C9D8 = 10; | |
} | |
if ( sub_41EC70() < 0 ) | |
return -1; | |
if ( sub_42AE10() ) | |
return -1; | |
sub_41AB50(); | |
dword_6F5FA4 = 1; | |
LODWORD(qword_702768) = &unk_7F7F7F; | |
v8 = (_UNKNOWN *)dword_468810; | |
do | |
{ | |
*(_DWORD *)v8 = 0; | |
v8 = (char *)v8 + 980; | |
} | |
while ( v8 != &unk_470290 ); | |
if ( WSAStartup(0x101u, &WSAData) ) | |
return -1; | |
if ( (_BYTE)WSAData.wVersion != 1 || HIBYTE(WSAData.wVersion) != 1 ) | |
{ | |
WSACleanup(); | |
return -1; | |
} | |
timeBeginPeriod(1u); | |
v9 = *a1; | |
if ( !*a1 ) | |
goto LABEL_64; | |
if ( !strcmp(*a1, "client.exe") ) | |
goto LABEL_64; | |
v11 = *a1; | |
do | |
v12 = *v11++; | |
while ( v12 ); | |
if ( v11 - (v9 + 1) < 7 ) | |
LABEL_64: | |
sub_416030("Error: Visit ace-spades.com to join games or try a different server"); | |
strncpy(unk_2842480, v9 + 6, 0xBu); | |
v13 = strlen(unk_2842480); | |
if ( byte_284247F[v13] == 47 ) | |
byte_284247F[v13] = 0; | |
v14 = atoi(unk_2842480); | |
LOBYTE(v15) = sub_419FC0(v14); | |
if ( v15 ) | |
sub_416030("Server Connection Failed: It's either full or misconfigured"); | |
v16 = malloc(((27 * dword_4716E4 * dword_471F28 >> 1) + 7) & 0xFFFFFFF8); | |
dword_46FFD0 = v16; | |
if ( !v16 ) | |
return -1; | |
dword_46FFCC = (unsigned int)((char *)v16 + 7) & 0xFFFFFFF8; | |
dword_2842440 = 0; | |
v17 = (int)fopen("png/knumb.png", "rb"); | |
if ( v17 ) | |
sub_422060(v17, &dword_2842440, 24, 352); | |
dword_2842444 = (int)((char *)dword_2842440 + 3072); | |
dword_2842448 = (int)((char *)dword_2842440 + 6144); | |
dword_284244C = (int)((char *)dword_2842440 + 9216); | |
dword_2842450 = (int)((char *)dword_2842440 + 12288); | |
dword_2842454 = (int)((char *)dword_2842440 + 15360); | |
dword_2842458 = (int)((char *)dword_2842440 + 18432); | |
dword_284245C = (int)((char *)dword_2842440 + 21504); | |
dword_2842460 = (int)((char *)dword_2842440 + 24576); | |
dword_2842464 = (int)((char *)dword_2842440 + 27648); | |
dword_2842468 = (int)((char *)dword_2842440 + 30720); | |
dword_283CD10 = 0; | |
v18 = (int)fopen("png/semi.png", "rb"); | |
if ( v18 ) | |
sub_422060(v18, &dword_283CD10, 400, 400); | |
v25 = dword_283CD10; | |
v24 = 640000; | |
dword_283D020 = sub_42EF50((int)&v24); | |
dword_273CA78 = 0; | |
v19 = (int)fopen("png/target.png", "rb"); | |
if ( v19 ) | |
sub_422060(v19, &dword_273CA78, 16, 16); | |
dword_273C9DC = 0; | |
v20 = (int)fopen("png/icon.png", "rb"); | |
if ( v20 ) | |
sub_422060(v20, &dword_273C9DC, 7, 7); | |
dword_28487FC = 0; | |
v21 = (int)fopen("png/icon.png", "rb"); | |
if ( v21 ) | |
sub_422060(v21, &dword_28487FC, 7, 7); | |
dword_283CF18 = 0; | |
v22 = (int)fopen("png/icon.png", "rb"); | |
if ( v22 ) | |
sub_422060(v22, &dword_283CF18, 7, 7); | |
v23 = 12; | |
do | |
{ | |
*(_DWORD *)((char *)dword_273C9DC + v23 - 12) = *(_DWORD *)((char *)dword_273C9DC + v23 - 12) & 0xFF00FFFF | 0xFFFF; | |
*(_DWORD *)((char *)dword_283CF18 + v23 - 12) = (unsigned int)&unk_FF0000 | *(_DWORD *)((char *)dword_283CF18 | |
+ v23 | |
- 12) & 0xFFFF0000; | |
*(_DWORD *)((char *)dword_273C9DC + v23 - 8) = *(_DWORD *)((char *)dword_273C9DC + v23 - 8) & 0xFF00FFFF | 0xFFFF; | |
*(_DWORD *)((char *)dword_283CF18 + v23 - 8) = (unsigned int)&unk_FF0000 | *(_DWORD *)((char *)dword_283CF18 | |
+ v23 | |
- 8) & 0xFFFF0000; | |
*(_DWORD *)((char *)dword_273C9DC + v23 - 4) = *(_DWORD *)((char *)dword_273C9DC + v23 - 4) & 0xFF00FFFF | 0xFFFF; | |
*(_DWORD *)((char *)dword_283CF18 + v23 - 4) = (unsigned int)&unk_FF0000 | *(_DWORD *)((char *)dword_283CF18 | |
+ v23 | |
- 4) & 0xFFFF0000; | |
*(_DWORD *)((char *)dword_273C9DC + v23) = *(_DWORD *)((char *)dword_273C9DC + v23) & 0xFF00FFFF | 0xFFFF; | |
*(_DWORD *)((char *)dword_283CF18 + v23) = (unsigned int)&unk_FF0000 | *(_DWORD *)((char *)dword_283CF18 + v23) & 0xFFFF0000; | |
*(_DWORD *)((char *)dword_273C9DC + v23 + 4) = *(_DWORD *)((char *)dword_273C9DC + v23 + 4) & 0xFF00FFFF | 0xFFFF; | |
*(_DWORD *)((char *)dword_283CF18 + v23 + 4) = (unsigned int)&unk_FF0000 | *(_DWORD *)((char *)dword_283CF18 | |
+ v23 | |
+ 4) & 0xFFFF0000; | |
*(_DWORD *)((char *)dword_273C9DC + v23 + 8) = *(_DWORD *)((char *)dword_273C9DC + v23 + 8) & 0xFF00FFFF | 0xFFFF; | |
*(_DWORD *)((char *)dword_283CF18 + v23 + 8) = (unsigned int)&unk_FF0000 | *(_DWORD *)((char *)dword_283CF18 | |
+ v23 | |
+ 8) & 0xFFFF0000; | |
*(_DWORD *)((char *)dword_273C9DC + v23 + 12) = *(_DWORD *)((char *)dword_273C9DC + v23 + 12) & 0xFF00FFFF | 0xFFFF; | |
*(_DWORD *)((char *)dword_283CF18 + v23 + 12) = (unsigned int)&unk_FF0000 | *(_DWORD *)((char *)dword_283CF18 | |
+ v23 | |
+ 12) & 0xFFFF0000; | |
v23 += 28; | |
} | |
while ( v23 < 208 ); | |
sub_4227E0(); | |
return 0; | |
} | |
// 468810: using guessed type int dword_468810[]; | |
// 46FFCC: using guessed type int dword_46FFCC; | |
// 471F28: using guessed type int dword_471F28; | |
// 6F5FA4: using guessed type int dword_6F5FA4; | |
// 702768: using guessed type __int64 qword_702768; | |
// 273C9D8: using guessed type int dword_273C9D8; | |
// 283D020: using guessed type int dword_283D020; | |
// 2842444: using guessed type int dword_2842444; | |
// 2842448: using guessed type int dword_2842448; | |
// 284244C: using guessed type int dword_284244C; | |
// 2842450: using guessed type int dword_2842450; | |
// 2842454: using guessed type int dword_2842454; | |
// 2842458: using guessed type int dword_2842458; | |
// 284245C: using guessed type int dword_284245C; | |
// 2842460: using guessed type int dword_2842460; | |
// 2842464: using guessed type int dword_2842464; | |
// 2842468: using guessed type int dword_2842468; | |
//----- (0042B860) -------------------------------------------------------- | |
signed int __usercall sub_42B860<eax>(unsigned int a1<ecx>, SOCKET a2<edi>, int a3<esi>) | |
{ | |
int v3; // eax@1 | |
int v4; // eax@5 | |
signed int result; // eax@6 | |
struct timeval timeout; // [sp+8h] [bp-21Ch]@1 | |
fd_set writefds; // [sp+10h] [bp-214h]@1 | |
fd_set readfds; // [sp+118h] [bp-10Ch]@1 | |
v3 = *(_DWORD *)a3; | |
timeout.tv_sec = a1 / 0x3E8; | |
timeout.tv_usec = 1000 * a1 % 0x3E8; | |
readfds.fd_count = 0; | |
writefds.fd_count = 0; | |
if ( v3 & 1 ) | |
{ | |
writefds.fd_array[0] = a2; | |
writefds.fd_count = 1; | |
} | |
if ( v3 & 2 ) | |
{ | |
readfds.fd_array[0] = a2; | |
readfds.fd_count = 1; | |
} | |
v4 = select(a2 + 1, &readfds, &writefds, 0, &timeout); | |
if ( v4 >= 0 ) | |
{ | |
*(_DWORD *)a3 = 0; | |
if ( v4 ) | |
{ | |
if ( _WSAFDIsSet(a2, &writefds) ) | |
*(_DWORD *)a3 |= 1u; | |
if ( _WSAFDIsSet(a2, &readfds) ) | |
*(_DWORD *)a3 |= 2u; | |
} | |
result = 0; | |
} | |
else | |
{ | |
result = -1; | |
} | |
return result; | |
} | |
//----- (0042B920) -------------------------------------------------------- | |
DWORD __usercall sub_42B920<eax>(int a1<esi>, SOCKET s, LPWSABUF lpBuffers) | |
{ | |
int v3; // eax@2 | |
DWORD result; // eax@4 | |
u_short v5; // ST20_2@8 | |
DWORD Flags; // [sp+4h] [bp-20h]@1 | |
int v7; // [sp+8h] [bp-1Ch]@1 | |
DWORD NumberOfBytesRecvd; // [sp+Ch] [bp-18h]@1 | |
char v9; // [sp+10h] [bp-14h]@1 | |
u_short netshort[2]; // [sp+12h] [bp-12h]@8 | |
v7 = 16; | |
Flags = 0; | |
if ( WSARecvFrom( | |
s, | |
lpBuffers, | |
1u, | |
&NumberOfBytesRecvd, | |
&Flags, | |
(struct sockaddr *)(a1 != 0 ? (int)&v9 : 0), | |
(LPINT)(a1 != 0 ? (int)&v7 : 0), | |
0, | |
0) == -1 ) | |
{ | |
v3 = WSAGetLastError() - 10035; | |
if ( v3 && v3 != 19 ) | |
return -1; | |
result = 0; | |
} | |
else | |
{ | |
if ( Flags & 0x8000 ) | |
return -1; | |
if ( a1 ) | |
{ | |
v5 = netshort[0]; | |
*(_DWORD *)a1 = *(_DWORD *)&netshort[1]; | |
*(_WORD *)(a1 + 4) = ntohs(v5); | |
} | |
result = NumberOfBytesRecvd; | |
} | |
return result; | |
} | |
//----- (0042B9C0) -------------------------------------------------------- | |
DWORD __usercall sub_42B9C0<eax>(int a1<eax>, SOCKET s, LPWSABUF lpBuffers, DWORD dwBufferCount) | |
{ | |
int *v4; // esi@1 | |
u_short v5; // cx@2 | |
u_short v6; // ax@2 | |
int v7; // edx@2 | |
DWORD result; // eax@4 | |
DWORD NumberOfBytesSent; // [sp+4h] [bp-14h]@3 | |
int v10; // [sp+8h] [bp-10h]@2 | |
int v11; // [sp+Ch] [bp-Ch]@2 | |
int v12; // [sp+10h] [bp-8h]@2 | |
int v13; // [sp+14h] [bp-4h]@2 | |
v4 = (int *)a1; | |
if ( a1 ) | |
{ | |
v5 = *(_WORD *)(a1 + 4); | |
v10 = 0; | |
v11 = 0; | |
v12 = 0; | |
v13 = 0; | |
LOWORD(v10) = 2; | |
v6 = htons(v5); | |
v7 = *v4; | |
HIWORD(v10) = v6; | |
v11 = v7; | |
} | |
if ( WSASendTo( | |
s, | |
lpBuffers, | |
dwBufferCount, | |
&NumberOfBytesSent, | |
0, | |
(const struct sockaddr *)(v4 != 0 ? (int)&v10 : 0), | |
v4 != 0 ? 0x10 : 0, | |
0, | |
0) == -1 ) | |
result = -(WSAGetLastError() != 10035); | |
else | |
result = NumberOfBytesSent; | |
return result; | |
} | |
//----- (0042BA70) -------------------------------------------------------- | |
int __fastcall sub_42BA70(SOCKET s, int optval, int optvala) | |
{ | |
int v4; // [sp-Ch] [bp-10h]@3 | |
const char *v5; // [sp-8h] [bp-Ch]@3 | |
int v6; // [sp-4h] [bp-8h]@3 | |
int v7; // [sp+0h] [bp-4h]@1 | |
v7 = s; | |
switch ( optval ) | |
{ | |
case 0: | |
v7 = optvala; | |
return (ioctlsocket(s, -2147195266, (u_long *)&v7) != -1) - 1; | |
case 1: | |
v6 = 4; | |
v5 = (const char *)&optvala; | |
v4 = 32; | |
return (setsockopt(s, 65535, v4, v5, v6) != -1) - 1; | |
case 2: | |
v6 = 4; | |
v5 = (const char *)&optvala; | |
v4 = 4098; | |
break; | |
case 3: | |
v6 = 4; | |
v5 = (const char *)&optvala; | |
v4 = 4097; | |
break; | |
case 4: | |
v6 = 4; | |
v5 = (const char *)&optvala; | |
v4 = 4; | |
break; | |
} | |
return (setsockopt(s, 65535, v4, v5, v6) != -1) - 1; | |
} | |
//----- (0042BB50) -------------------------------------------------------- | |
unsigned __int32 __usercall sub_42BB50<eax>(int a1<edi>, const char *a2<esi>) | |
{ | |
struct hostent *v2; // eax@1 | |
unsigned __int32 result; // eax@3 | |
v2 = gethostbyname(a2); | |
if ( v2 && v2->h_addrtype == 2 ) | |
{ | |
*(_DWORD *)a1 = **(_DWORD **)v2->h_addr_list; | |
result = 0; | |
} | |
else | |
{ | |
result = inet_addr(a2); | |
if ( result != -1 ) | |
{ | |
*(_DWORD *)a1 = result; | |
result = 0; | |
} | |
} | |
return result; | |
} | |
//----- (0042BC30) -------------------------------------------------------- | |
int __usercall sub_42BC30<eax>(int a1<edi>, int a2<esi>, int a3) | |
{ | |
unsigned int v3; // eax@1 | |
unsigned int v4; // eax@7 | |
int result; // eax@8 | |
*(_DWORD *)(a2 + 48) = ntohl(*(_DWORD *)(a1 + 4)); | |
*(_DWORD *)(a2 + 52) = ntohl(*(_DWORD *)(a1 + 8)); | |
v3 = *(_DWORD *)(a2 + 48); | |
if ( v3 || *(_DWORD *)(a3 + 16) ) | |
{ | |
if ( v3 >= *(_DWORD *)(a3 + 16) ) | |
v3 = *(_DWORD *)(a3 + 16); | |
*(_DWORD *)(a2 + 164) = v3 >> 16 << 12; | |
} | |
else | |
{ | |
*(_DWORD *)(a2 + 164) = 32768; | |
} | |
v4 = *(_DWORD *)(a2 + 164); | |
if ( v4 >= 0x1000 ) | |
{ | |
if ( v4 > 0x8000 ) | |
*(_DWORD *)(a2 + 164) = 32768; | |
result = 0; | |
} | |
else | |
{ | |
*(_DWORD *)(a2 + 164) = 4096; | |
result = 0; | |
} | |
return result; | |
} | |
//----- (0042BCD0) -------------------------------------------------------- | |
signed int __usercall sub_42BCD0<eax>(int a1<edx>, int a2<ebp>, int a3) | |
{ | |
int v3; // ebx@1 | |
int v4; // ecx@1 | |
unsigned int v5; // esi@4 | |
int v6; // eax@4 | |
int v7; // esi@5 | |
bool v8; // zf@10 | |
unsigned int v9; // esi@20 | |
int v10; // esi@32 | |
int v11; // ecx@34 | |
int v12; // ecx@35 | |
int v13; // esi@37 | |
signed int result; // eax@43 | |
int v15; // [sp+8h] [bp-644h]@2 | |
int v16; // [sp+Ch] [bp-640h]@1 | |
int v17; // [sp+10h] [bp-63Ch]@7 | |
unsigned __int16 v18; // [sp+14h] [bp-638h]@7 | |
signed int v19; // [sp+18h] [bp-634h]@1 | |
signed int v20; // [sp+1Ch] [bp-630h]@1 | |
unsigned int v21; // [sp+20h] [bp-62Ch]@25 | |
int v22; // [sp+24h] [bp-628h]@1 | |
signed int v23; // [sp+28h] [bp-624h]@1 | |
const void *v24; // [sp+2Ch] [bp-620h]@25 | |
int v25; // [sp+30h] [bp-61Ch]@18 | |
int v26; // [sp+38h] [bp-614h]@1 | |
int v27; // [sp+38h] [bp-614h]@18 | |
v3 = a3; | |
v22 = a3 + 2132; | |
v20 = 0; | |
v19 = 0; | |
v16 = a3 + 48 * *(_DWORD *)(a3 + 1608) + 72; | |
v4 = *(_DWORD *)(a1 + 200); | |
v23 = 1; | |
v26 = v4; | |
if ( v4 != a1 + 200 ) | |
{ | |
v15 = a2 + 8; | |
while ( 1 ) | |
{ | |
v5 = *(_BYTE *)(v4 + 33); | |
v6 = v4; | |
if ( v5 >= *(_DWORD *)(a1 + 44) ) | |
v7 = 0; | |
else | |
v7 = *(_DWORD *)(a1 + 40) + 56 * v5; | |
v17 = v7; | |
v18 = *(_WORD *)(v4 + 8) >> 12; | |
if ( v7 ) | |
{ | |
if ( v19 ) | |
goto LABEL_16; | |
if ( *(_WORD *)(v4 + 30) < 1u ) | |
{ | |
v8 = (*(_WORD *)(v4 + 8) & 0xFFF) == 0; | |
if ( (*(_WORD *)(v4 + 8) & 0xFFF) < 0 ) | |
v8 = (((*(_WORD *)(v4 + 8) & 0xFFF) - 1) | 0xFFFFF000) == -1; | |
if ( v8 ) | |
{ | |
if ( *(_WORD *)(v7 + 2 * (v18 + 15) % 16 + 6) >= 0x1000u | |
|| ((255 << v18) | (255 >> -(char)v18)) & *(_WORD *)(v7 + 4) ) | |
{ | |
v4 = v26; | |
v19 = 1; | |
LABEL_16: | |
v26 = *(_DWORD *)v4; | |
goto LABEL_40; | |
} | |
v4 = v26; | |
} | |
} | |
} | |
v25 = v4 + 80; | |
v27 = *(_DWORD *)(v4 + 80); | |
if ( v27 ) | |
{ | |
if ( v20 ) | |
goto LABEL_24; | |
v9 = (unsigned int)(*(_DWORD *)(a1 + 108) * *(_DWORD *)(a1 + 164)) >> 5; | |
if ( v9 <= *(_DWORD *)(a1 + 160) ) | |
v9 = *(_DWORD *)(a1 + 160); | |
if ( *(_DWORD *)(a1 + 168) + (unsigned int)*(_WORD *)(v4 + 28) > v9 ) | |
break; | |
} | |
v24 = (const void *)(v4 + 32); | |
v21 = dword_43D268[*(_BYTE *)(v4 + 32) & 0xF]; | |
v23 = 0; | |
if ( v16 >= (unsigned int)(v3 + 1608) | |
|| v15 >= (unsigned int)v22 | |
|| *(_DWORD *)(a1 + 160) - *(_DWORD *)(v3 + 64) < v21 | |
|| v27 | |
&& (unsigned __int16)(*(_WORD *)(a1 + 160) - *(_WORD *)(v3 + 64)) < (unsigned __int16)(v21 + *(_WORD *)(v4 + 28)) ) | |
{ | |
*(_DWORD *)(v3 + 60) = 1; | |
goto LABEL_43; | |
} | |
v26 = *(_DWORD *)v4; | |
if ( v17 && *(_WORD *)(v6 + 30) < 1u ) | |
{ | |
v10 = v17; | |
*(_WORD *)(v10 + 4) |= 1 << v18; | |
++*(_WORD *)(v10 + 2 * v18 + 6); | |
} | |
++*(_WORD *)(v6 + 30); | |
if ( !*(_DWORD *)(v6 + 16) ) | |
{ | |
v11 = *(_DWORD *)(a1 + 152) + 4 * *(_DWORD *)(a1 + 156); | |
*(_DWORD *)(v6 + 16) = v11; | |
*(_DWORD *)(v6 + 20) = 32 * v11; | |
} | |
v12 = a1 + 184; | |
if ( *(_DWORD *)v12 == v12 ) | |
*(_DWORD *)(a1 + 80) = *(_DWORD *)(v6 + 16) + *(_DWORD *)(v3 + 48); | |
**(_DWORD **)(v6 + 4) = *(_DWORD *)v6; | |
*(_DWORD *)(*(_DWORD *)v6 + 4) = *(_DWORD *)(v6 + 4); | |
v13 = *(_DWORD *)(a1 + 188); | |
*(_DWORD *)v6 = v12; | |
*(_DWORD *)(v6 + 4) = v13; | |
*(_DWORD *)v13 = v6; | |
*(_DWORD *)(a1 + 188) = v6; | |
*(_DWORD *)(v6 + 12) = *(_DWORD *)(v3 + 48); | |
*(_DWORD *)a2 = v21; | |
*(_DWORD *)(a2 + 4) = v16; | |
*(_DWORD *)(v3 + 64) += v21; | |
*(_WORD *)(v3 + 68) |= 0x8000u; | |
memcpy((void *)v16, v24, 0x30u); | |
if ( *(_DWORD *)v25 ) | |
{ | |
v15 += 8; | |
a2 += 8; | |
*(_DWORD *)(a2 + 4) = *(_DWORD *)(v6 + 24) + *(_DWORD *)(*(_DWORD *)v25 + 8); | |
*(_DWORD *)a2 = *(_WORD *)(v6 + 28); | |
*(_DWORD *)(v3 + 64) += *(_WORD *)(v6 + 28); | |
*(_DWORD *)(a1 + 168) += *(_WORD *)(v6 + 28); | |
} | |
++*(_DWORD *)(a1 + 92); | |
v16 += 48; | |
a2 += 8; | |
v15 += 8; | |
LABEL_40: | |
if ( v26 == a1 + 200 ) | |
goto LABEL_43; | |
v4 = v26; | |
} | |
v20 = 1; | |
LABEL_24: | |
v26 = *(_DWORD *)v4; | |
goto LABEL_40; | |
} | |
LABEL_43: | |
result = v23; | |
*(_DWORD *)v22 = (a2 - v3 - 1612) >> 3; | |
*(_DWORD *)(v3 + 1608) = (v16 - v3 - 72) / 48; | |
return result; | |
} | |
// 43D268: using guessed type int dword_43D268[]; | |
//----- (0042C020) -------------------------------------------------------- | |
unsigned int __cdecl sub_42C020(int a1, u_long hostlong) | |
{ | |
int v2; // esi@1 | |
int v3; // ecx@1 | |
int v4; // edx@1 | |
int v5; // ebp@1 | |
int v6; // ebx@1 | |
int v7; // ecx@4 | |
int v8; // eax@7 | |
int v9; // edi@7 | |
bool v10; // zf@9 | |
int v11; // edx@10 | |
int v12; // edi@11 | |
void (__cdecl *v13)(_DWORD); // eax@12 | |
int v14; // ecx@19 | |
int v15; // eax@20 | |
int v16; // ecx@20 | |
signed int v17; // edx@26 | |
unsigned int result; // eax@26 | |
int v19; // [sp+Ch] [bp-18h]@1 | |
int v20; // [sp+10h] [bp-14h]@2 | |
int v21; // [sp+14h] [bp-10h]@1 | |
int v22; // [sp+18h] [bp-Ch]@1 | |
int v23; // [sp+1Ch] [bp-8h]@6 | |
v2 = a1; | |
v3 = *(_DWORD *)(a1 + 2132); | |
v4 = a1 + 48 * *(_DWORD *)(a1 + 1608) + 72; | |
v22 = a1 + 2132; | |
v5 = *(_DWORD *)(hostlong + 208); | |
v19 = a1 + 48 * *(_DWORD *)(a1 + 1608) + 72; | |
v6 = a1 + 8 * v3 + 1612; | |
v21 = v5; | |
if ( v5 != hostlong + 208 ) | |
{ | |
v20 = a1 + 8 * v3 + 1620; | |
while ( 1 ) | |
{ | |
v7 = dword_43D268[*(_BYTE *)(v5 + 32) & 0xF]; | |
if ( v4 >= (unsigned int)(v2 + 1608) | |
|| v20 >= (unsigned int)v22 | |
|| (v23 = *(_DWORD *)(hostlong + 160) - *(_DWORD *)(v2 + 64), v23 < (unsigned int)v7) | |
|| (v8 = v21, (v9 = *(_DWORD *)(v21 + 80)) != 0) && (v4 = v19, v23 < (unsigned int)(v7 + *(_DWORD *)(v9 + 12))) ) | |
{ | |
*(_DWORD *)(v2 + 60) = 1; | |
goto LABEL_26; | |
} | |
v10 = *(_DWORD *)(v21 + 80) == 0; | |
v21 = *(_DWORD *)v21; | |
if ( v10 ) | |
goto LABEL_19; | |
v11 = ((unsigned __int8)*(_DWORD *)(hostlong + 116) + 7) & 0x1F; | |
*(_DWORD *)(hostlong + 116) = v11; | |
if ( (unsigned int)v11 <= *(_DWORD *)(hostlong + 108) ) | |
break; | |
--**(_DWORD **)(v8 + 80); | |
v12 = *(_DWORD *)(v8 + 80); | |
if ( !*(_DWORD *)v12 ) | |
{ | |
v13 = *(void (__cdecl **)(_DWORD))(v12 + 16); | |
if ( v13 ) | |
v13(v12); | |
if ( !(*(_BYTE *)(v12 + 4) & 4) ) | |
off_43D29C(*(_DWORD *)(v12 + 8)); | |
off_43D29C(v12); | |
} | |
**(_DWORD **)(v5 + 4) = *(_DWORD *)v5; | |
*(_DWORD *)(*(_DWORD *)v5 + 4) = *(_DWORD *)(v5 + 4); | |
off_43D29C(v5); | |
LABEL_23: | |
v4 = v19; | |
if ( v21 == hostlong + 208 ) | |
goto LABEL_26; | |
v5 = v21; | |
} | |
v4 = v19; | |
LABEL_19: | |
*(_DWORD *)v6 = v7; | |
*(_DWORD *)(v6 + 4) = v4; | |
*(_DWORD *)(v2 + 64) += v7; | |
memcpy((void *)v4, (const void *)(v5 + 32), 0x30u); | |
**(_DWORD **)(v5 + 4) = *(_DWORD *)v5; | |
*(_DWORD *)(*(_DWORD *)v5 + 4) = *(_DWORD *)(v5 + 4); | |
v14 = *(_DWORD *)(v8 + 80); | |
if ( v14 ) | |
{ | |
v20 += 8; | |
*(_DWORD *)(v6 + 12) = *(_DWORD *)(v14 + 8); | |
v15 = *(_DWORD *)(*(_DWORD *)(v8 + 80) + 12); | |
v6 += 8; | |
*(_DWORD *)v6 = v15; | |
*(_DWORD *)(a1 + 64) += v15; | |
v16 = *(_DWORD *)(hostlong + 196); | |
*(_DWORD *)(v5 + 4) = v16; | |
*(_DWORD *)v5 = hostlong + 192; | |
*(_DWORD *)v16 = v5; | |
*(_DWORD *)(hostlong + 196) = v5; | |
} | |
else | |
{ | |
off_43D29C(v5); | |
} | |
v19 += 48; | |
v2 = a1; | |
v6 += 8; | |
v20 += 8; | |
goto LABEL_23; | |
} | |
LABEL_26: | |
v17 = (signed int)((unsigned __int64)(715827883i64 * (v4 - v2 - 72)) >> 32) >> 3; | |
result = v17 + ((unsigned int)v17 >> 31); | |
*(_DWORD *)(v2 + 1608) = result; | |
*(_DWORD *)v22 = (v6 - v2 - 1612) >> 3; | |
if ( *(_DWORD *)(hostlong + 36) == 6 ) | |
{ | |
result = hostlong + 200; | |
if ( *(_DWORD *)result == result ) | |
{ | |
result = hostlong + 208; | |
if ( *(_DWORD *)result == result ) | |
{ | |
result = hostlong + 184; | |
if ( *(_DWORD *)result == result ) | |
result = sub_42EC70(hostlong, *(_DWORD *)(hostlong + 360)); | |
} | |
} | |
} | |
return result; | |
} | |
// 43D268: using guessed type int dword_43D268[]; | |
// 43D29C: using guessed type int (__cdecl *off_43D29C)(_DWORD); | |
//----- (0042C290) -------------------------------------------------------- | |
int __cdecl sub_42C290(int a1, int a2) | |
{ | |
int v2; // ebp@1 | |
int v3; // edi@1 | |
int v4; // esi@1 | |
int v5; // ecx@1 | |
int v6; // ebx@1 | |
int v7; // eax@7 | |
bool v8; // zf@8 | |
int v9; // edx@9 | |
int result; // eax@13 | |
int v11; // [sp+10h] [bp-4h]@1 | |
int v12; // [sp+18h] [bp+4h]@7 | |
v2 = a1; | |
v3 = a1 + 48 * *(_DWORD *)(a1 + 1608) + 72; | |
v4 = *(_DWORD *)(a2 + 176); | |
v5 = a1 + 2132; | |
v11 = a1 + 2132; | |
v6 = a1 + 8 * *(_DWORD *)(a1 + 2132) + 1612; | |
if ( v4 != a2 + 176 ) | |
{ | |
while ( v3 < (unsigned int)(v2 + 1608) | |
&& v6 < (unsigned int)v5 | |
&& (unsigned int)(*(_DWORD *)(a2 + 160) - *(_DWORD *)(v2 + 64)) >= 8 ) | |
{ | |
v7 = *(_DWORD *)v4; | |
*(_DWORD *)(v6 + 4) = v3; | |
*(_DWORD *)v6 = 8; | |
*(_DWORD *)(v2 + 64) += 8; | |
*(_BYTE *)v3 = 1; | |
*(_BYTE *)(v3 + 1) = *(_BYTE *)(v4 + 13); | |
v12 = v7; | |
*(_WORD *)(v3 + 4) = htons(*(_WORD *)(v4 + 14)); | |
*(_WORD *)(v3 + 6) = htons(*(_WORD *)(v4 + 8)); | |
if ( (*(_BYTE *)(v4 + 12) & 0xF) == 4 ) | |
{ | |
v8 = *(_DWORD *)(a2 + 224) == 0; | |
*(_DWORD *)(a2 + 36) = 9; | |
if ( v8 ) | |
{ | |
v9 = *(_DWORD *)(v2 + 56); | |
*(_DWORD *)(a2 + 4) = v9; | |
*(_DWORD *)a2 = v2 + 52; | |
*(_DWORD *)v9 = a2; | |
*(_DWORD *)(v2 + 56) = a2; | |
*(_DWORD *)(a2 + 224) = 1; | |
} | |
} | |
**(_DWORD **)(v4 + 4) = *(_DWORD *)v4; | |
*(_DWORD *)(*(_DWORD *)v4 + 4) = *(_DWORD *)(v4 + 4); | |
off_43D29C(v4); | |
v5 = v11; | |
v3 += 48; | |
v6 += 8; | |
if ( v12 == a2 + 176 ) | |
goto LABEL_13; | |
v4 = v12; | |
} | |
*(_DWORD *)(v2 + 60) = 1; | |
} | |
LABEL_13: | |
result = (v3 - v2 - 72) / 48; | |
*(_DWORD *)(v2 + 1608) = result; | |
*(_DWORD *)v5 = (v6 - v2 - 1612) >> 3; | |
return result; | |
} | |
// 43D29C: using guessed type int (__cdecl *off_43D29C)(_DWORD); | |
//----- (0042C400) -------------------------------------------------------- | |
int __thiscall sub_42C400(unsigned __int16 this, int a2, unsigned __int8 a3) | |
{ | |
int v3; // eax@1 | |
int v4; // ebp@1 | |
signed int v5; // edi@1 | |
int v6; // esi@2 | |
int v7; // eax@8 | |
int v8; // edi@8 | |
int v9; // ecx@16 | |
int v10; // eax@16 | |
__int16 v11; // dx@16 | |
__int16 v12; // dx@17 | |
char v13; // bl@19 | |
int v14; // ebx@19 | |
int v15; // edx@22 | |
int v16; // edi@23 | |
void (__cdecl *v17)(_DWORD); // eax@23 | |
int result; // eax@30 | |
v3 = *(_DWORD *)(a2 + 184); | |
v4 = a2 + 184; | |
v5 = 1; | |
if ( v3 == a2 + 184 ) | |
{ | |
v6 = a2; | |
} | |
else | |
{ | |
do | |
{ | |
v6 = v3; | |
if ( *(_WORD *)(v3 + 8) == this && *(_BYTE *)(v3 + 33) == a3 ) | |
break; | |
v3 = *(_DWORD *)v3; | |
} | |
while ( v3 != v4 ); | |
} | |
if ( v3 == v4 ) | |
{ | |
v7 = *(_DWORD *)(a2 + 200); | |
v8 = a2 + 200; | |
if ( v7 != a2 + 200 ) | |
{ | |
while ( 1 ) | |
{ | |
v6 = v7; | |
if ( *(_WORD *)(v7 + 30) < 1u ) | |
break; | |
if ( *(_WORD *)(v7 + 8) != this || *(_BYTE *)(v7 + 33) != a3 ) | |
{ | |
v7 = *(_DWORD *)v7; | |
if ( v7 != v8 ) | |
continue; | |
} | |
if ( v7 == v8 ) | |
break; | |
v5 = 0; | |
goto LABEL_15; | |
} | |
} | |
result = 0; | |
} | |
else | |
{ | |
LABEL_15: | |
if ( (unsigned int)a3 < *(_DWORD *)(a2 + 44) ) | |
{ | |
v9 = this >> 12; | |
v10 = *(_DWORD *)(a2 + 40) + 56 * a3; | |
v11 = *(_WORD *)(v10 + 2 * v9 + 6); | |
if ( v11 ) | |
{ | |
v12 = v11 - 1; | |
*(_WORD *)(v10 + 2 * v9 + 6) = v12; | |
if ( !v12 ) | |
*(_WORD *)(v10 + 4) &= ~(1 << v9); | |
} | |
} | |
v13 = *(_BYTE *)(v6 + 32); | |
**(_DWORD **)(v6 + 4) = *(_DWORD *)v6; | |
v14 = v13 & 0xF; | |
*(_DWORD *)(*(_DWORD *)v6 + 4) = *(_DWORD *)(v6 + 4); | |
if ( *(_DWORD *)(v6 + 80) ) | |
{ | |
if ( v5 ) | |
*(_DWORD *)(a2 + 168) -= *(_WORD *)(v6 + 28); | |
--**(_DWORD **)(v6 + 80); | |
v15 = *(_DWORD *)(v6 + 80); | |
if ( !*(_DWORD *)v15 ) | |
{ | |
v16 = *(_DWORD *)(v6 + 80); | |
v17 = *(void (__cdecl **)(_DWORD))(v15 + 16); | |
if ( v17 ) | |
v17(v15); | |
if ( !(*(_BYTE *)(v16 + 4) & 4) ) | |
off_43D29C(*(_DWORD *)(v16 + 8)); | |
off_43D29C(v16); | |
} | |
} | |
off_43D29C(v6); | |
if ( *(_DWORD *)v4 != v4 ) | |
*(_DWORD *)(a2 + 80) = *(_DWORD *)(*(_DWORD *)v4 + 12) + *(_DWORD *)(*(_DWORD *)v4 + 16); | |
result = v14; | |
} | |
return result; | |
} | |
// 43D29C: using guessed type int (__cdecl *off_43D29C)(_DWORD); | |
//----- (0042C550) -------------------------------------------------------- | |
void __cdecl sub_42C550(int a1) | |
{ | |
int v1; // ebp@1 | |
int v2; // esi@1 | |
int v3; // ecx@3 | |
int v4; // edi@4 | |
void (__cdecl *v5)(_DWORD); // eax@4 | |
v1 = a1 + 192; | |
v2 = *(_DWORD *)(a1 + 192); | |
if ( v2 != a1 + 192 ) | |
{ | |
do | |
{ | |
**(_DWORD **)(v2 + 4) = *(_DWORD *)v2; | |
*(_DWORD *)(*(_DWORD *)v2 + 4) = *(_DWORD *)(v2 + 4); | |
if ( *(_DWORD *)(v2 + 80) ) | |
{ | |
--**(_DWORD **)(v2 + 80); | |
v3 = *(_DWORD *)(v2 + 80); | |
if ( !*(_DWORD *)v3 ) | |
{ | |
v4 = *(_DWORD *)(v2 + 80); | |
v5 = *(void (__cdecl **)(_DWORD))(v3 + 16); | |
if ( v5 ) | |
v5(v3); | |
if ( !(*(_BYTE *)(v4 + 4) & 4) ) | |
off_43D29C(*(_DWORD *)(v4 + 8)); | |
off_43D29C(v4); | |
} | |
} | |
off_43D29C(v2); | |
v2 = *(_DWORD *)v1; | |
} | |
while ( *(_DWORD *)v1 != v1 ); | |
} | |
} | |
// 43D29C: using guessed type int (__cdecl *off_43D29C)(_DWORD); | |
//----- (0042C5D0) -------------------------------------------------------- | |
int __usercall sub_42C5D0<eax>(int result<eax>, int a2<ecx>, int a3) | |
{ | |
bool v3; // zf@3 | |
int v4; // edx@4 | |
*(_DWORD *)(a3 + 32) = 1; | |
if ( a2 ) | |
{ | |
*(_DWORD *)(result + 36) = 5; | |
*(_DWORD *)a2 = 1; | |
*(_DWORD *)(a2 + 4) = result; | |
result = *(_DWORD *)(result + 360); | |
*(_DWORD *)(a2 + 12) = result; | |
} | |
else | |
{ | |
v3 = *(_DWORD *)(result + 224) == 0; | |
*(_DWORD *)(result + 36) = 4 - (*(_DWORD *)(result + 36) != 1); | |
if ( v3 ) | |
{ | |
v4 = *(_DWORD *)(a3 + 56); | |
*(_DWORD *)(result + 4) = v4; | |
*(_DWORD *)result = a3 + 52; | |
*(_DWORD *)v4 = result; | |
*(_DWORD *)(a3 + 56) = result; | |
*(_DWORD *)(result + 224) = 1; | |
} | |
} | |
return result; | |
} | |
//----- (0042C630) -------------------------------------------------------- | |
signed int __usercall sub_42C630<eax>(int a1<edi>, int a2<esi>, int a3, int a4) | |
{ | |
signed int result; // eax@2 | |
u_long v5; // ebp@3 | |
u_long v6; // eax@10 | |
u_long v7; // eax@16 | |
bool v8; // zf@23 | |
int v9; // edx@24 | |
if ( *(_DWORD *)(a2 + 36) == 1 ) | |
{ | |
v5 = ntohl(*(_DWORD *)(a1 + 16)); | |
if ( v5 - 1 > 0xFE | |
|| ntohl(*(_DWORD *)(a1 + 28)) != *(_DWORD *)(a2 + 132) | |
|| ntohl(*(_DWORD *)(a1 + 32)) != *(_DWORD *)(a2 + 124) | |
|| ntohl(*(_DWORD *)(a1 + 36)) != *(_DWORD *)(a2 + 128) | |
|| *(_DWORD *)(a1 + 40) != *(_DWORD *)(a2 + 16) ) | |
{ | |
v8 = *(_DWORD *)(a2 + 224) == 0; | |
*(_DWORD *)(a2 + 360) = 0; | |
*(_DWORD *)(a2 + 36) = 9; | |
if ( v8 ) | |
{ | |
v9 = *(_DWORD *)(a3 + 56); | |
*(_DWORD *)(a2 + 4) = v9; | |
*(_DWORD *)a2 = a3 + 52; | |
*(_DWORD *)v9 = a2; | |
*(_DWORD *)(a3 + 56) = a2; | |
*(_DWORD *)(a2 + 224) = 1; | |
} | |
result = -1; | |
} | |
else | |
{ | |
sub_42C400(1u, a2, 0xFFu); | |
if ( v5 < *(_DWORD *)(a2 + 44) ) | |
*(_DWORD *)(a2 + 44) = v5; | |
*(_WORD *)(a2 + 12) = ntohs(*(_WORD *)(a1 + 4)); | |
*(_BYTE *)(a2 + 21) = *(_BYTE *)(a1 + 6); | |
*(_BYTE *)(a2 + 20) = *(_BYTE *)(a1 + 7); | |
v6 = ntohl(*(_DWORD *)(a1 + 8)); | |
if ( v6 >= 0x240 ) | |
{ | |
if ( v6 > 0x1000 ) | |
v6 = 4096; | |
} | |
else | |
{ | |
v6 = 576; | |
} | |
if ( v6 < *(_DWORD *)(a2 + 160) ) | |
*(_DWORD *)(a2 + 160) = v6; | |
v7 = ntohl(*(_DWORD *)(a1 + 12)); | |
if ( v7 >= 0x1000 ) | |
{ | |
if ( v7 > 0x8000 ) | |
v7 = 32768; | |
} | |
else | |
{ | |
v7 = 4096; | |
} | |
if ( v7 < *(_DWORD *)(a2 + 164) ) | |
*(_DWORD *)(a2 + 164) = v7; | |
*(_DWORD *)(a2 + 48) = ntohl(*(_DWORD *)(a1 + 20)); | |
*(_DWORD *)(a2 + 52) = ntohl(*(_DWORD *)(a1 + 24)); | |
sub_42C5D0(a2, a4, a3); | |
result = 0; | |
} | |
} | |
else | |
{ | |
result = 0; | |
} | |
return result; | |
} | |
//----- (0042C7A0) -------------------------------------------------------- | |
int __cdecl sub_42C7A0(int a1, int a2) | |
{ | |
int v2; // ebx@1 | |
u_long v3; // edi@1 | |
int v4; // ebp@2 | |
int v5; // ecx@2 | |
int v6; // eax@3 | |
int v7; // esi@15 | |
int v8; // edi@15 | |
char v9; // al@18 | |
char v10; // al@20 | |
char v11; // al@22 | |
char v12; // al@24 | |
unsigned int v13; // eax@26 | |
int v14; // eax@27 | |
u_long v15; // eax@29 | |
unsigned int v16; // eax@33 | |
unsigned int v17; // ecx@37 | |
unsigned int v18; // eax@43 | |
unsigned int v19; // esi@47 | |
signed int v20; // esi@48 | |
u_short v21; // ST00_2@56 | |
u_short v22; // ax@56 | |
u_short v23; // dx@56 | |
u_long v24; // eax@56 | |
u_long v25; // ST00_4@56 | |
u_long v26; // eax@56 | |
u_long v27; // ST00_4@56 | |
u_long v28; // eax@56 | |
u_long v29; // ST00_4@56 | |
u_long v30; // eax@56 | |
int v31; // ecx@56 | |
int v32; // eax@56 | |
char v34; // [sp+13h] [bp-39h]@24 | |
u_long hostlong; // [sp+14h] [bp-38h]@1 | |
__int16 v36; // [sp+18h] [bp-34h]@56 | |
u_short v37; // [sp+1Ch] [bp-30h]@56 | |
char v38; // [sp+1Eh] [bp-2Eh]@56 | |
char v39; // [sp+1Fh] [bp-2Dh]@56 | |
int v40; // [sp+20h] [bp-2Ch]@56 | |
u_long v41; // [sp+24h] [bp-28h]@56 | |
u_long v42; // [sp+28h] [bp-24h]@56 | |
u_long v43; // [sp+2Ch] [bp-20h]@56 | |
u_long v44; // [sp+30h] [bp-1Ch]@56 | |
u_long v45; // [sp+34h] [bp-18h]@56 | |
u_long v46; // [sp+38h] [bp-14h]@56 | |
u_long v47; // [sp+3Ch] [bp-10h]@56 | |
int v48; // [sp+40h] [bp-Ch]@56 | |
char v49; // [sp+54h] [bp+8h]@20 | |
v2 = a2; | |
v3 = ntohl(*(_DWORD *)(a2 + 16)); | |
hostlong = v3; | |
if ( v3 - 1 <= 0xFE ) | |
{ | |
v4 = *(_DWORD *)(a1 + 36); | |
v5 = v4 + 364 * *(_DWORD *)(a1 + 40); | |
if ( v4 < (unsigned int)v5 ) | |
{ | |
v6 = v4 + 24; | |
do | |
{ | |
if ( *(_DWORD *)(v6 + 12) | |
&& *(_DWORD *)v6 == *(_DWORD *)(a1 + 10348) | |
&& *(_WORD *)(v6 + 4) == *(_WORD *)(a1 + 10352) | |
&& *(_DWORD *)(v6 - 8) == *(_DWORD *)(a2 + 40) ) | |
return 0; | |
v6 += 364; | |
} | |
while ( v6 - 24 < (unsigned int)v5 ); | |
if ( v4 < (unsigned int)v5 ) | |
{ | |
do | |
{ | |
if ( !*(_DWORD *)(v4 + 36) ) | |
break; | |
v4 += 364; | |
} | |
while ( v4 < (unsigned int)v5 ); | |
if ( v4 < (unsigned int)v5 ) | |
{ | |
if ( v3 > *(_DWORD *)(a1 + 44) ) | |
{ | |
hostlong = *(_DWORD *)(a1 + 44); | |
v3 = *(_DWORD *)(a1 + 44); | |
} | |
v7 = 56 * v3; | |
v8 = off_43D298(56 * v3); | |
if ( !v8 ) | |
off_43D2A0(); | |
*(_DWORD *)(v4 + 40) = v8; | |
if ( v8 ) | |
{ | |
*(_DWORD *)(v4 + 44) = hostlong; | |
*(_DWORD *)(v4 + 36) = 2; | |
*(_DWORD *)(v4 + 16) = *(_DWORD *)(a2 + 40); | |
*(_DWORD *)(v4 + 24) = *(_DWORD *)(a1 + 10348); | |
*(_DWORD *)(v4 + 28) = *(_DWORD *)(a1 + 10352); | |
*(_WORD *)(v4 + 12) = ntohs(*(_WORD *)(a2 + 4)); | |
*(_DWORD *)(v4 + 48) = ntohl(*(_DWORD *)(a2 + 20)); | |
*(_DWORD *)(v4 + 52) = ntohl(*(_DWORD *)(a2 + 24)); | |
*(_DWORD *)(v4 + 132) = ntohl(*(_DWORD *)(a2 + 28)); | |
*(_DWORD *)(v4 + 124) = ntohl(*(_DWORD *)(a2 + 32)); | |
*(_DWORD *)(v4 + 128) = ntohl(*(_DWORD *)(a2 + 36)); | |
*(_DWORD *)(v4 + 360) = ntohl(*(_DWORD *)(a2 + 44)); | |
v9 = *(_BYTE *)(a2 + 6); | |
if ( v9 == -1 ) | |
v9 = *(_BYTE *)(v4 + 20); | |
v10 = (v9 + 1) & 3; | |
v49 = v10; | |
if ( v10 == *(_BYTE *)(v4 + 20) ) | |
{ | |
v10 = (v10 + 1) & 3; | |
v49 = v10; | |
} | |
*(_BYTE *)(v4 + 20) = v10; | |
v11 = *(_BYTE *)(v2 + 7); | |
if ( v11 == -1 ) | |
v11 = *(_BYTE *)(v4 + 21); | |
v12 = (v11 + 1) & 3; | |
v34 = v12; | |
if ( v12 == *(_BYTE *)(v4 + 21) ) | |
{ | |
v12 = (v12 + 1) & 3; | |
v34 = v12; | |
} | |
*(_BYTE *)(v4 + 21) = v12; | |
v13 = *(_DWORD *)(v4 + 40); | |
if ( v13 < v13 + v7 ) | |
{ | |
v14 = v13 + 52; | |
do | |
{ | |
*(_DWORD *)(v14 - 52) = 0; | |
*(_WORD *)(v14 - 14) = 0; | |
*(_DWORD *)(v14 - 8) = v14 - 12; | |
*(_DWORD *)(v14 - 12) = v14 - 12; | |
*(_DWORD *)v14 = v14 - 4; | |
*(_DWORD *)(v14 - 4) = v14 - 4; | |
*(_WORD *)(v14 - 48) = 0; | |
*(_DWORD *)(v14 - 46) = 0; | |
*(_DWORD *)(v14 - 42) = 0; | |
*(_DWORD *)(v14 - 38) = 0; | |
*(_DWORD *)(v14 - 34) = 0; | |
*(_DWORD *)(v14 - 30) = 0; | |
*(_DWORD *)(v14 - 26) = 0; | |
*(_DWORD *)(v14 - 22) = 0; | |
*(_DWORD *)(v14 - 18) = 0; | |
v14 += 56; | |
} | |
while ( v14 - 52 < (unsigned int)(v7 + *(_DWORD *)(v4 + 40)) ); | |
} | |
v15 = ntohl(*(_DWORD *)(v2 + 8)); | |
if ( v15 >= 0x240 ) | |
{ | |
if ( v15 > 0x1000 ) | |
v15 = 4096; | |
} | |
else | |
{ | |
v15 = 576; | |
} | |
*(_DWORD *)(v4 + 160) = v15; | |
v16 = *(_DWORD *)(a1 + 16); | |
if ( v16 ) | |
{ | |
v17 = *(_DWORD *)(v4 + 48); | |
if ( v17 ) | |
{ | |
if ( v16 >= v17 ) | |
goto LABEL_41; | |
goto LABEL_42; | |
} | |
} | |
else | |
{ | |
if ( !*(_DWORD *)(v4 + 48) ) | |
{ | |
*(_DWORD *)(v4 + 164) = 32768; | |
LABEL_43: | |
v18 = *(_DWORD *)(v4 + 164); | |
if ( v18 >= 0x1000 ) | |
{ | |
if ( v18 > 0x8000 ) | |
*(_DWORD *)(v4 + 164) = 32768; | |
} | |
else | |
{ | |
*(_DWORD *)(v4 + 164) = 4096; | |
} | |
v19 = *(_DWORD *)(a1 + 12); | |
if ( v19 ) | |
v20 = v19 >> 16 << 12; | |
else | |
v20 = 32768; | |
if ( v20 > ntohl(*(_DWORD *)(v2 + 12)) ) | |
v20 = ntohl(*(_DWORD *)(v2 + 12)); | |
if ( (unsigned int)v20 >= 0x1000 ) | |
{ | |
if ( (unsigned int)v20 > 0x8000 ) | |
v20 = 32768; | |
} | |
else | |
{ | |
v20 = 4096; | |
} | |
v21 = *(_WORD *)(v4 + 14); | |
v36 = -125; | |
v22 = htons(v21); | |
v23 = *(_WORD *)(v4 + 160); | |
v37 = v22; | |
v38 = v49; | |
v39 = v34; | |
v40 = htons(v23); | |
v41 = htonl(v20); | |
v24 = htonl(hostlong); | |
v25 = *(_DWORD *)(a1 + 12); | |
v42 = v24; | |
v43 = htonl(v25); | |
v26 = htonl(*(_DWORD *)(a1 + 16)); | |
v27 = *(_DWORD *)(v4 + 132); | |
v44 = v26; | |
v28 = htonl(v27); | |
v29 = *(_DWORD *)(v4 + 124); | |
v45 = v28; | |
v46 = htonl(v29); | |
v30 = htonl(*(_DWORD *)(v4 + 128)); | |
v31 = *(_DWORD *)(v4 + 16); | |
v47 = v30; | |
v48 = v31; | |
v32 = off_43D298(84); | |
if ( !v32 ) | |
{ | |
off_43D2A0(); | |
JUMPOUT(*(int *)loc_42CB15); | |
} | |
memcpy((void *)(v32 + 32), &v36, 0x30u); | |
*(_DWORD *)(v32 + 24) = 0; | |
*(_WORD *)(v32 + 28) = 0; | |
*(_DWORD *)(v32 + 80) = 0; | |
sub_42E0F0(v4, v32); | |
return v4; | |
} | |
} | |
v17 = *(_DWORD *)(v4 + 48); | |
if ( v16 <= v17 ) | |
LABEL_41: | |
v16 = v17; | |
LABEL_42: | |
*(_DWORD *)(v4 + 164) = v16 >> 16 << 12; | |
goto LABEL_43; | |
} | |
} | |
} | |
} | |
} | |
return 0; | |
} | |
// 42CB15: using guessed type int __cdecl(int, int); | |
// 43D298: using guessed type int (__cdecl *off_43D298)(_DWORD); | |
// 43D2A0: using guessed type int (*off_43D2A0)(void); | |
//----- (0042CB60) -------------------------------------------------------- | |
signed int __usercall sub_42CB60<eax>(int a1<eax>, int a2, int a3, size_t a4) | |
{ | |
size_t v4; // ebp@1 | |
int v5; // esi@1 | |
int v6; // eax@2 | |
u_short v7; // ax@4 | |
int v8; // edx@5 | |
int v9; // edi@5 | |
unsigned int v10; // ebx@5 | |
unsigned __int16 v11; // cx@5 | |
int v12; // edx@5 | |
size_t v13; // edx@9 | |
int v14; // esi@12 | |
int v15; // edi@12 | |
unsigned int v16; // ecx@13 | |
unsigned __int16 v17; // ax@14 | |
int v18; // eax@20 | |
int v19; // eax@22 | |
signed int v20; // edx@22 | |
int v21; // ecx@23 | |
unsigned int v22; // eax@23 | |
u_long v24; // [sp+10h] [bp-48h]@9 | |
int v25; // [sp+14h] [bp-44h]@9 | |
unsigned int v26; // [sp+18h] [bp-40h]@9 | |
int v27; // [sp+1Ch] [bp-3Ch]@5 | |
int v28; // [sp+20h] [bp-38h]@9 | |
int v29; // [sp+28h] [bp-30h]@20 | |
__int16 v30; // [sp+2Ch] [bp-2Ch]@21 | |
__int16 v31; // [sp+2Eh] [bp-2Ah]@21 | |
int v32; // [sp+30h] [bp-28h]@21 | |
unsigned int v33; // [sp+34h] [bp-24h]@21 | |
int v34; // [sp+38h] [bp-20h]@21 | |
u_long v35; // [sp+3Ch] [bp-1Ch]@21 | |
size_t v36; // [sp+64h] [bp+Ch]@4 | |
v4 = a4; | |
v5 = a1; | |
if ( (unsigned int)*(_BYTE *)(a4 + 1) >= *(_DWORD *)(a3 + 44) | |
|| (v6 = *(_DWORD *)(a3 + 36), v6 != 5) && v6 != 6 | |
|| (v7 = ntohs(*(_WORD *)(a4 + 6)), | |
*(_DWORD *)v5 += v7, | |
v36 = v7, | |
*(_DWORD *)v5 > (unsigned int)(*(_DWORD *)(a2 + 10356) + *(_DWORD *)(a2 + 10360))) ) | |
return -1; | |
v8 = *(_DWORD *)(a3 + 40); | |
v9 = v8 + 56 * *(_BYTE *)(v4 + 1); | |
v27 = v8 + 56 * *(_BYTE *)(v4 + 1); | |
v10 = ntohs(*(_WORD *)(v4 + 4)); | |
v11 = v10 >> 12; | |
v12 = (unsigned __int16)(*(_WORD *)(v9 + 38) >> 12); | |
if ( v10 < *(_WORD *)(v9 + 38) ) | |
v11 += 16; | |
if ( v11 < (unsigned __int16)v12 || v11 >= v12 + 7 ) | |
return 0; | |
v26 = ntohl(*(_DWORD *)(v4 + 12)); | |
v25 = ntohl(*(_DWORD *)(v4 + 8)); | |
v24 = ntohl(*(_DWORD *)(v4 + 20)); | |
v13 = ntohl(*(_DWORD *)(v4 + 16)); | |
v28 = v13; | |
if ( v24 >= v13 || v36 + v24 > v13 || v26 >= v25 ) | |
return -1; | |
v14 = *(_DWORD *)(v9 + 44); | |
v15 = v9 + 40; | |
if ( v14 == v15 ) | |
goto LABEL_20; | |
v16 = *(_WORD *)(v27 + 38); | |
while ( 1 ) | |
{ | |
v17 = *(_WORD *)(v14 + 8); | |
if ( v10 < v16 ) | |
break; | |
if ( v17 >= (unsigned __int16)v16 ) | |
goto LABEL_18; | |
LABEL_19: | |
v14 = *(_DWORD *)(v14 + 4); | |
if ( v14 == v15 ) | |
goto LABEL_20; | |
} | |
if ( v17 >= (unsigned __int16)v16 ) | |
goto LABEL_20; | |
LABEL_18: | |
if ( v17 > v10 ) | |
goto LABEL_19; | |
if ( *(_WORD *)(v14 + 8) < v10 ) | |
{ | |
LABEL_20: | |
memcpy(&v29, (const void *)v4, 0x30u); | |
v18 = sub_42EEC0(0, v13, 1); | |
if ( !v18 | |
|| (v31 = v36, | |
v33 = v26, | |
v32 = v25, | |
v35 = v24, | |
HIWORD(v29) = v10, | |
v30 = v10, | |
v34 = v28, | |
(v14 = sub_42E7A0(a3, (int)&v29, (void *)v18, v25)) == 0) ) | |
return -1; | |
goto LABEL_22; | |
} | |
if ( (*(_BYTE *)(v14 + 12) & 0xF) != 8 | |
|| v13 != *(_DWORD *)(*(_DWORD *)(v14 + 72) + 12) | |
|| v25 != *(_DWORD *)(v14 + 60) ) | |
return -1; | |
LABEL_22: | |
v19 = *(_DWORD *)(v14 + 68) + 4 * (v26 >> 5); | |
v20 = 1 << (v26 & 0x1F); | |
if ( !(v20 & *(_DWORD *)v19) ) | |
{ | |
--*(_DWORD *)(v14 + 64); | |
*(_DWORD *)v19 |= v20; | |
v21 = *(_DWORD *)(v14 + 72); | |
v22 = *(_DWORD *)(v21 + 12); | |
if ( v36 + v24 > v22 ) | |
v36 = v22 - v24; | |
memmove((void *)(v24 + *(_DWORD *)(v21 + 8)), (const void *)(v4 + 24), v36); | |
if ( !*(_DWORD *)(v14 + 64) ) | |
sub_42E2C0(a3, v27); | |
} | |
return 0; | |
} | |
//----- (0042CDC0) -------------------------------------------------------- | |
signed int __usercall sub_42CDC0<eax>(int a1<eax>, int a2<esi>, int a3, int a4) | |
{ | |
int v4; // edi@1 | |
int v5; // eax@2 | |
u_short v6; // ax@4 | |
int v7; // edx@4 | |
int v8; // eax@5 | |
signed int result; // eax@7 | |
v4 = a1; | |
if ( (unsigned int)*(_BYTE *)(a2 + 1) < *(_DWORD *)(a4 + 44) | |
&& ((v5 = *(_DWORD *)(a4 + 36), v5 == 5) || v5 == 6) | |
&& (v6 = ntohs(*(_WORD *)(a2 + 6)), | |
v7 = *(_DWORD *)(a3 + 10356) + *(_DWORD *)(a3 + 10360), | |
*(_DWORD *)v4 += v6, | |
*(_DWORD *)v4 <= (unsigned int)v7) | |
&& (v8 = sub_42EEC0((const void *)(a2 + 8), v6, 0)) != 0 | |
&& sub_42E7A0(a4, a2, (void *)v8, 0) ) | |
result = 0; | |
else | |
result = -1; | |
return result; | |
} | |
//----- (0042CE40) -------------------------------------------------------- | |
signed int __usercall sub_42CE40<eax>(int a1<eax>, int a2<edi>, int a3, int a4) | |
{ | |
int v4; // ebx@1 | |
int v5; // esi@1 | |
int v6; // eax@2 | |
u_short v7; // ax@4 | |
unsigned int v8; // ecx@5 | |
int v9; // eax@5 | |
int v10; // esi@5 | |
int v11; // eax@8 | |
int v12; // eax@11 | |
signed int result; // eax@14 | |
size_t v14; // [sp+10h] [bp+8h]@4 | |
v4 = a4; | |
v5 = a1; | |
if ( (unsigned int)*(_BYTE *)(a4 + 1) >= *(_DWORD *)(a2 + 44) || (v6 = *(_DWORD *)(a2 + 36), v6 != 5) && v6 != 6 ) | |
{ | |
result = -1; | |
} | |
else | |
{ | |
v7 = ntohs(*(_WORD *)(a4 + 6)); | |
*(_DWORD *)v5 += v7; | |
v14 = v7; | |
if ( *(_DWORD *)v5 <= (unsigned int)(*(_DWORD *)(a3 + 10356) + *(_DWORD *)(a3 + 10360)) ) | |
{ | |
LOWORD(v9) = ntohs(*(_WORD *)(v4 + 4)); | |
v8 = *(_WORD *)(a2 + 228); | |
v9 = (unsigned __int16)v9; | |
v10 = v9 & 0x3FF; | |
if ( (unsigned __int16)v9 < v8 ) | |
v9 = (unsigned __int16)v9 + 65536; | |
if ( v9 >= v8 + 32768 ) | |
return 0; | |
v11 = (unsigned __int16)v9; | |
if ( v11 - v10 == v8 ) | |
{ | |
if ( (1 << (v10 & 0x1F)) & *(_DWORD *)(a2 + 4 * ((unsigned int)v10 >> 5) + 232) ) | |
return 0; | |
} | |
else | |
{ | |
*(_WORD *)(a2 + 228) = v11 - v10; | |
memset((void *)(a2 + 232), 0, 0x80u); | |
} | |
v12 = sub_42EEC0((const void *)(v4 + 8), v14, 2); | |
if ( v12 && sub_42E7A0(a2, v4, (void *)v12, 0) ) | |
{ | |
*(_DWORD *)(a2 + 4 * ((unsigned int)v10 >> 5) + 232) |= 1 << (v10 & 0x1F); | |
return 0; | |
} | |
} | |
result = -1; | |
} | |
return result; | |
} | |
//----- (0042CF70) -------------------------------------------------------- | |
signed int __usercall sub_42CF70<eax>(int a1<eax>, int a2<esi>, int a3, int a4) | |
{ | |
int v4; // edi@1 | |
int v5; // eax@2 | |
u_short v6; // ax@4 | |
int v7; // edx@4 | |
int v8; // eax@5 | |
signed int result; // eax@7 | |
v4 = a1; | |
if ( (unsigned int)*(_BYTE *)(a2 + 1) < *(_DWORD *)(a4 + 44) | |
&& ((v5 = *(_DWORD *)(a4 + 36), v5 == 5) || v5 == 6) | |
&& (v6 = ntohs(*(_WORD *)(a2 + 4)), | |
v7 = *(_DWORD *)(a3 + 10356) + *(_DWORD *)(a3 + 10360), | |
*(_DWORD *)v4 += v6, | |
*(_DWORD *)v4 <= (unsigned int)v7) | |
&& (v8 = sub_42EEC0((const void *)(a2 + 6), v6, 1)) != 0 | |
&& sub_42E7A0(a4, a2, (void *)v8, 0) ) | |
result = 0; | |
else | |
result = -1; | |
return result; | |
} | |
//----- (0042CFF0) -------------------------------------------------------- | |
int __usercall sub_42CFF0<eax>(int a1<eax>, int a2<edi>, int a3) | |
{ | |
int v3; // esi@1 | |
int v4; // eax@1 | |
int v5; // eax@3 | |
bool v6; // zf@11 | |
int v7; // ecx@12 | |
v3 = a1; | |
v4 = *(_DWORD *)(a1 + 36); | |
if ( v4 == 9 || v4 == 8 ) | |
return 0; | |
sub_42EA80(v3); | |
v5 = *(_DWORD *)(v3 + 36); | |
if ( v5 == 4 ) | |
goto LABEL_18; | |
if ( v5 != 5 && v5 != 6 ) | |
{ | |
if ( v5 == 3 ) | |
*(_DWORD *)(a2 + 32) = 1; | |
sub_42EB80(v3); | |
goto LABEL_13; | |
} | |
if ( !(*(_BYTE *)a3 & 0x80) ) | |
{ | |
LABEL_18: | |
v6 = *(_DWORD *)(v3 + 224) == 0; | |
*(_DWORD *)(v3 + 36) = 9; | |
if ( v6 ) | |
{ | |
v7 = *(_DWORD *)(a2 + 56); | |
*(_DWORD *)(v3 + 4) = v7; | |
*(_DWORD *)v3 = a2 + 52; | |
*(_DWORD *)v7 = v3; | |
*(_DWORD *)(a2 + 56) = v3; | |
*(_DWORD *)(v3 + 224) = 1; | |
} | |
goto LABEL_13; | |
} | |
*(_DWORD *)(v3 + 36) = 8; | |
LABEL_13: | |
if ( *(_DWORD *)(v3 + 36) ) | |
*(_DWORD *)(v3 + 360) = ntohl(*(_DWORD *)(a3 + 4)); | |
return 0; | |
} | |
//----- (0042D090) -------------------------------------------------------- | |
int __usercall sub_42D090<eax>(int result<eax>, int a2<ecx>, int a3<esi>) | |
{ | |
signed int v3; // edx@3 | |
int v4; // edx@9 | |
if ( *(_DWORD *)(result + 36) >= 3 ) | |
*(_DWORD *)(a3 + 32) = 1; | |
v3 = *(_DWORD *)(result + 36); | |
if ( v3 == 1 || v3 >= 4 ) | |
{ | |
if ( a2 ) | |
{ | |
*(_DWORD *)a2 = 2; | |
*(_DWORD *)(a2 + 4) = result; | |
*(_DWORD *)(a2 + 12) = 0; | |
result = sub_42EB80(result); | |
} | |
else | |
{ | |
*(_DWORD *)(result + 360) = 0; | |
*(_DWORD *)(result + 36) = 9; | |
if ( !*(_DWORD *)(result + 224) ) | |
{ | |
v4 = *(_DWORD *)(a3 + 56); | |
*(_DWORD *)(result + 4) = v4; | |
*(_DWORD *)result = a3 + 52; | |
*(_DWORD *)v4 = result; | |
*(_DWORD *)(a3 + 56) = result; | |
*(_DWORD *)(result + 224) = 1; | |
} | |
} | |
} | |
else | |
{ | |
result = sub_42EB80(result); | |
} | |
return result; | |
} | |
//----- (0042D100) -------------------------------------------------------- | |
signed int __fastcall sub_42D100(int a1, int a2, int a3) | |
{ | |
int v3; // ebp@1 | |
int v4; // esi@2 | |
int v5; // eax@2 | |
int v6; // edi@3 | |
signed int result; // eax@5 | |
int v8; // eax@8 | |
int v9; // edx@11 | |
int v10; // [sp+10h] [bp-4h]@8 | |
v3 = a2 + 52; | |
if ( *(_DWORD *)v3 == v3 ) | |
{ | |
LABEL_5: | |
result = 0; | |
} | |
else | |
{ | |
while ( 2 ) | |
{ | |
v4 = *(_DWORD *)v3; | |
**(_DWORD **)(*(_DWORD *)v3 + 4) = **(_DWORD **)v3; | |
*(_DWORD *)(*(_DWORD *)v4 + 4) = *(_DWORD *)(v4 + 4); | |
v5 = *(_DWORD *)(v4 + 36) - 3; | |
*(_DWORD *)(v4 + 224) = 0; | |
switch ( v5 ) | |
{ | |
case 2: | |
v6 = *(_DWORD *)(v4 + 216); | |
if ( v6 == v4 + 216 ) | |
goto LABEL_4; | |
**(_DWORD **)(v6 + 4) = *(_DWORD *)v6; | |
*(_DWORD *)(*(_DWORD *)v6 + 4) = *(_DWORD *)(v6 + 4); | |
if ( a3 != -8 ) | |
*(_BYTE *)(a3 + 8) = *(_BYTE *)(v6 + 13); | |
v8 = *(_DWORD *)(v6 + 72); | |
--*(_DWORD *)v8; | |
v10 = v8; | |
if ( *(_DWORD *)(v6 + 68) ) | |
off_43D29C(*(_DWORD *)(v6 + 68)); | |
off_43D29C(v6); | |
*(_DWORD *)(a3 + 16) = v10; | |
*(_DWORD *)a3 = 3; | |
*(_DWORD *)(a3 + 4) = v4; | |
if ( *(_DWORD *)(v4 + 216) != v4 + 216 ) | |
{ | |
*(_DWORD *)(v4 + 224) = 1; | |
v9 = *(_DWORD *)(v3 + 4); | |
*(_DWORD *)(v4 + 4) = v9; | |
*(_DWORD *)v4 = v3; | |
*(_DWORD *)v9 = v4; | |
*(_DWORD *)(v3 + 4) = v4; | |
} | |
result = 1; | |
break; | |
default: | |
LABEL_4: | |
if ( *(_DWORD *)v3 == v3 ) | |
goto LABEL_5; | |
continue; | |
case 0: | |
case 1: | |
*(_DWORD *)(v4 + 36) = 5; | |
*(_DWORD *)(a3 + 4) = v4; | |
*(_DWORD *)a3 = 1; | |
*(_DWORD *)(a3 + 12) = *(_DWORD *)(v4 + 360); | |
result = 1; | |
break; | |
case 6: | |
*(_DWORD *)(a2 + 32) = 1; | |
*(_DWORD *)a3 = 2; | |
*(_DWORD *)(a3 + 4) = v4; | |
*(_DWORD *)(a3 + 12) = *(_DWORD *)(v4 + 360); | |
sub_42EB80(v4); | |
result = 1; | |
break; | |
} | |
break; | |
} | |
} | |
return result; | |
} | |
// 43D29C: using guessed type int (__cdecl *off_43D29C)(_DWORD); | |
//----- (0042D250) -------------------------------------------------------- | |
signed int __cdecl sub_42D250(int a1, int a2, int a3) | |
{ | |
int v3; // ebp@1 | |
int v4; // eax@1 | |
int v5; // esi@1 | |
int v6; // ecx@2 | |
int v7; // edi@2 | |
int v8; // edx@2 | |
int v9; // edx@5 | |
int v10; // edx@8 | |
int v11; // esi@9 | |
int v12; // edi@9 | |
int v13; // ebx@10 | |
int v14; // edx@15 | |
int v15; // esi@20 | |
int v16; // esi@20 | |
int v17; // ecx@20 | |
int v19; // [sp+18h] [bp+8h]@1 | |
v3 = a2; | |
v4 = *(_DWORD *)(a2 + 184); | |
v5 = a2 + 184; | |
v19 = *(_DWORD *)(a2 + 200); | |
if ( v4 == v5 ) | |
return 0; | |
while ( 1 ) | |
{ | |
v6 = v4; | |
v7 = *(_DWORD *)(v4 + 12); | |
v4 = *(_DWORD *)v4; | |
v8 = *(_DWORD *)(a1 + 48) - v7; | |
if ( (unsigned int)v8 >= 0x5265C00 ) | |
v8 = v7 - *(_DWORD *)(a1 + 48); | |
if ( (unsigned int)v8 < *(_DWORD *)(v6 + 16) ) | |
goto LABEL_23; | |
v9 = *(_DWORD *)(v3 + 84); | |
if ( !v9 || (unsigned int)(v7 - v9) >= 0x5265C00 ) | |
*(_DWORD *)(v3 + 84) = v7; | |
v10 = *(_DWORD *)(v3 + 84); | |
if ( v10 ) | |
{ | |
v11 = *(_DWORD *)(a1 + 48); | |
v12 = *(_DWORD *)(a1 + 48) - v10; | |
v13 = (unsigned int)v12 < 0x5265C00 ? *(_DWORD *)(a1 + 48) - v10 : v10 - v11; | |
if ( (unsigned int)v13 >= 0x7530 ) | |
break; | |
if ( *(_DWORD *)(v6 + 16) >= *(_DWORD *)(v6 + 20) ) | |
{ | |
v14 = (unsigned int)v12 < 0x5265C00 ? *(_DWORD *)(a1 + 48) - v10 : v10 - v11; | |
if ( (unsigned int)v14 >= 0x1388 ) | |
break; | |
} | |
} | |
if ( *(_DWORD *)(v6 + 80) ) | |
*(_DWORD *)(v3 + 168) -= *(_WORD *)(v6 + 28); | |
++*(_DWORD *)(v3 + 96); | |
v15 = *(_DWORD *)v6; | |
*(_DWORD *)(v6 + 16) *= 2; | |
**(_DWORD **)(v6 + 4) = v15; | |
*(_DWORD *)(*(_DWORD *)v6 + 4) = *(_DWORD *)(v6 + 4); | |
v16 = *(_DWORD *)(v19 + 4); | |
*(_DWORD *)(v6 + 4) = v16; | |
*(_DWORD *)v6 = v19; | |
*(_DWORD *)v16 = v6; | |
v5 = v3 + 184; | |
*(_DWORD *)(v19 + 4) = v6; | |
v17 = *(_DWORD *)(v3 + 184); | |
if ( v4 == v17 ) | |
{ | |
if ( v17 != v5 ) | |
*(_DWORD *)(v3 + 80) = *(_DWORD *)(v4 + 12) + *(_DWORD *)(v4 + 16); | |
} | |
LABEL_23: | |
if ( v4 == v5 ) | |
return 0; | |
} | |
sub_42D090(v3, a3, a1); | |
return 1; | |
} | |
//----- (0042D380) -------------------------------------------------------- | |
signed int __cdecl sub_42D380(int a1, int a2, int a3) | |
{ | |
int v3; // ebp@1 | |
unsigned int v4; // ebx@2 | |
unsigned int v5; // esi@2 | |
int v6; // eax@2 | |
int v7; // ebx@3 | |
int v8; // eax@4 | |
int v9; // eax@15 | |
int v10; // eax@16 | |
int v11; // eax@21 | |
int v12; // eax@29 | |
int v13; // eax@32 | |
unsigned int v14; // ecx@35 | |
int v15; // eax@36 | |
int v16; // edx@36 | |
unsigned int v17; // ecx@36 | |
unsigned int v18; // ecx@37 | |
unsigned int v19; // ecx@38 | |
struct _WSABUF *v20; // edi@41 | |
int v21; // eax@43 | |
int (__cdecl *v22)(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD); // ecx@44 | |
int v23; // esi@45 | |
int v24; // eax@45 | |
u_short v25; // ax@50 | |
int (__cdecl *v26)(_DWORD, _DWORD); // ecx@50 | |
char *v27; // esi@51 | |
int v28; // edx@52 | |
int v29; // ST14_4@54 | |
DWORD v30; // esi@57 | |
u_short v32; // [sp+10h] [bp-38h]@40 | |
u_short v33; // [sp+12h] [bp-36h]@41 | |
__int16 v34; // [sp+18h] [bp-30h]@21 | |
int v35; // [sp+4Ch] [bp+4h]@43 | |
v3 = a1; | |
*(_DWORD *)(a1 + 60) = 1; | |
while ( 1 ) | |
{ | |
v4 = *(_DWORD *)(v3 + 36); | |
v5 = 0; | |
v6 = v4 + 364 * *(_DWORD *)(v3 + 40); | |
*(_DWORD *)(v3 + 60) = 0; | |
if ( v4 < v6 ) | |
break; | |
LABEL_60: | |
if ( *(_DWORD *)(v3 + 60) == v5 ) | |
return 0; | |
} | |
v7 = v4 + 176; | |
while ( 1 ) | |
{ | |
v8 = *(_DWORD *)(v7 - 140); | |
if ( v8 != v5 && v8 != 9 ) | |
{ | |
*(_WORD *)(v3 + 68) = 0; | |
*(_DWORD *)(v3 + 1608) = v5; | |
*(_DWORD *)(v3 + 2132) = 1; | |
*(_DWORD *)(v3 + 64) = 4; | |
if ( *(_DWORD *)v7 != v7 ) | |
sub_42C290(v3, v7 - 176); | |
if ( a3 != v5 | |
&& *(_DWORD *)(v7 + 8) != v7 + 8 | |
&& (unsigned int)(*(_DWORD *)(v3 + 48) - *(_DWORD *)(v7 - 96)) < 0x5265C00 | |
&& sub_42D250(v3, v7 - 176, a2) == 1 ) | |
return 1; | |
if ( *(_DWORD *)(v7 + 24) == v7 + 24 || sub_42BCD0(v7 - 176, v3, v3) ) | |
{ | |
if ( *(_DWORD *)(v7 + 8) == v7 + 8 ) | |
{ | |
v9 = *(_DWORD *)(v7 - 100); | |
v10 = (unsigned int)(*(_DWORD *)(v3 + 48) - v9) < 0x5265C00 ? *(_DWORD *)(v3 + 48) - v9 : v9 - *(_DWORD *)(v3 + 48); | |
if ( (unsigned int)v10 >= 0x1F4 && (unsigned int)(*(_DWORD *)(v7 - 16) - *(_DWORD *)(v3 + 64)) >= 4 ) | |
{ | |
if ( *(_DWORD *)(v7 - 140) == 5 ) | |
{ | |
v34 = -123; | |
v11 = off_43D298(84); | |
if ( v11 == v5 ) | |
{ | |
off_43D2A0(); | |
JUMPOUT(*(int *)loc_42D4B8); | |
} | |
memcpy((void *)(v11 + 32), &v34, 0x30u); | |
*(_DWORD *)(v11 + 24) = 0; | |
*(_WORD *)(v11 + 28) = 0; | |
*(_DWORD *)(v11 + 80) = 0; | |
sub_42E0F0(v7 - 176, v11); | |
} | |
sub_42BCD0(v7 - 176, v3, v3); | |
v5 = 0; | |
} | |
} | |
} | |
if ( *(_DWORD *)(v7 + 32) != v7 + 32 ) | |
sub_42C020(v3, v7 - 176); | |
if ( *(_DWORD *)(v3 + 1608) != v5 ) | |
break; | |
} | |
LABEL_59: | |
v7 += 364; | |
v5 = 0; | |
if ( v7 - 176 >= (unsigned int)(*(_DWORD *)(v3 + 36) + 364 * *(_DWORD *)(v3 + 40)) ) | |
goto LABEL_60; | |
} | |
v12 = *(_DWORD *)(v7 - 88); | |
if ( v12 == v5 ) | |
{ | |
*(_DWORD *)(v7 - 88) = *(_DWORD *)(v3 + 48); | |
} | |
else | |
{ | |
if ( (unsigned int)(*(_DWORD *)(v3 + 48) - v12) < 0x5265C00 ) | |
v13 = *(_DWORD *)(v3 + 48) - v12; | |
else | |
v13 = v12 - *(_DWORD *)(v3 + 48); | |
if ( (unsigned int)v13 >= 0x2710 ) | |
{ | |
v14 = *(_DWORD *)(v7 - 84); | |
if ( v14 > v5 ) | |
{ | |
v15 = (*(_DWORD *)(v7 - 80) << 16) / v14; | |
v16 = *(_DWORD *)(v7 - 72) - (*(_DWORD *)(v7 - 72) >> 2); | |
v17 = *(_DWORD *)(v7 - 76); | |
*(_DWORD *)(v7 - 72) = v16; | |
if ( v15 < v17 ) | |
{ | |
v19 = v17 - ((v17 - v15) >> 3); | |
*(_DWORD *)(v7 - 76) = v19; | |
*(_DWORD *)(v7 - 72) = v16 + ((v19 - v15) >> 2); | |
} | |
else | |
{ | |
v18 = ((v15 - v17) >> 3) + v17; | |
*(_DWORD *)(v7 - 76) = v18; | |
*(_DWORD *)(v7 - 72) = v16 + ((v15 - v18) >> 2); | |
} | |
*(_DWORD *)(v7 - 88) = *(_DWORD *)(v3 + 48); | |
*(_DWORD *)(v7 - 84) = v5; | |
*(_DWORD *)(v7 - 80) = v5; | |
} | |
} | |
} | |
*(_DWORD *)(v3 + 1616) = &v32; | |
if ( *(_WORD *)(v3 + 68) & 0x8000 ) | |
{ | |
v20 = (struct _WSABUF *)(v3 + 1612); | |
v33 = htons(*(_WORD *)(v3 + 48)); | |
*(_DWORD *)(v3 + 1612) = 4; | |
} | |
else | |
{ | |
v20 = (struct _WSABUF *)(v3 + 1612); | |
*(_DWORD *)(v3 + 1612) = 2; | |
} | |
v21 = *(_DWORD *)(v3 + 2140); | |
v35 = v5; | |
if ( v21 != v5 ) | |
{ | |
v22 = *(int (__cdecl **)(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD))(v3 + 2144); | |
if ( v22 != (int (__cdecl *)(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD))v5 ) | |
{ | |
v23 = *(_DWORD *)(v3 + 64) - 4; | |
v24 = v22(v21, v3 + 1620, *(_DWORD *)(v3 + 2132) - 1, *(_DWORD *)(v3 + 64) - 4, v3 + 6252, v23); | |
if ( v24 ) | |
{ | |
if ( v24 < (unsigned int)v23 ) | |
{ | |
*(_WORD *)(v3 + 68) |= 0x4000u; | |
v35 = v24; | |
} | |
} | |
} | |
} | |
if ( *(_WORD *)(v7 - 164) < 0xFFFu ) | |
*(_WORD *)(v3 + 68) |= *(_BYTE *)(v7 - 156) << 12; | |
v25 = htons(*(_WORD *)(v7 - 164) | *(_WORD *)(v3 + 68)); | |
v26 = *(int (__cdecl **)(_DWORD, _DWORD))(v3 + 2136); | |
v32 = v25; | |
if ( v26 ) | |
{ | |
v27 = (char *)&v32 + v20->len; | |
if ( *(_WORD *)(v7 - 164) >= 0xFFFu ) | |
v28 = 0; | |
else | |
v28 = *(_DWORD *)(v7 - 160); | |
v20->len += 4; | |
v29 = *(_DWORD *)(v3 + 2132); | |
*(_DWORD *)v27 = v28; | |
*(_DWORD *)v27 = v26(v20, v29); | |
} | |
if ( v35 ) | |
{ | |
*(_DWORD *)(v3 + 1624) = v3 + 6252; | |
*(_DWORD *)(v3 + 1620) = v35; | |
*(_DWORD *)(v3 + 2132) = 2; | |
} | |
*(_DWORD *)(v7 - 104) = *(_DWORD *)(v3 + 48); | |
v30 = sub_42B9C0(v7 - 152, *(_DWORD *)v3, v20, *(_DWORD *)(v3 + 2132)); | |
sub_42C550(v7 - 176); | |
if ( (v30 & 0x80000000u) == 0 ) | |
{ | |
*(_DWORD *)(v3 + 10364) += v30; | |
++*(_DWORD *)(v3 + 10368); | |
goto LABEL_59; | |
} | |
return -1; | |
} | |
// 42D380: using guessed type _DWORD __cdecl sub_42D380(_DWORD, _DWORD, _DWORD); | |
// 42D4B8: using guessed type int __cdecl(int, int, int); | |
// 43D298: using guessed type int (__cdecl *off_43D298)(_DWORD); | |
// 43D2A0: using guessed type int (*off_43D2A0)(void); | |
//----- (0042D760) -------------------------------------------------------- | |
int __usercall sub_42D760<eax>(int a1<esi>) | |
{ | |
*(_DWORD *)(a1 + 48) = timeGetTime() - dword_4681C4; | |
return sub_42D380(a1, 0, 0); | |
} | |
// 42D380: using guessed type _DWORD __cdecl sub_42D380(_DWORD, _DWORD, _DWORD); | |
// 4681C4: using guessed type int dword_4681C4; | |
//----- (0042D780) -------------------------------------------------------- | |
signed int __usercall sub_42D780<eax>(int a1<edi>, int a2, int a3, int a4) | |
{ | |
int v4; // eax@1 | |
unsigned int v5; // esi@5 | |
int v6; // eax@7 | |
int v7; // ecx@7 | |
unsigned int v8; // eax@8 | |
unsigned int v9; // eax@9 | |
unsigned int v10; // ebp@10 | |
unsigned int v11; // esi@12 | |
int v12; // eax@14 | |
int v13; // eax@16 | |
int v14; // ecx@19 | |
unsigned __int16 v15; // ax@20 | |
int v16; // eax@20 | |
v4 = *(_DWORD *)(a2 + 48) & 0xFFFF0000 | ntohs(*(_WORD *)(a4 + 6)); | |
if ( (v4 & 0x8000u) > (*(_DWORD *)(a2 + 48) & 0x8000u) ) | |
v4 -= 65536; | |
if ( (unsigned int)(*(_DWORD *)(a2 + 48) - v4) < 0x5265C00 ) | |
{ | |
*(_DWORD *)(a1 + 76) = *(_DWORD *)(a2 + 48); | |
*(_DWORD *)(a1 + 84) = 0; | |
if ( (unsigned int)(*(_DWORD *)(a2 + 48) - v4) < 0x5265C00 ) | |
v5 = *(_DWORD *)(a2 + 48) - v4; | |
else | |
v5 = v4 - *(_DWORD *)(a2 + 48); | |
sub_42E000(a1, v5); | |
v6 = *(_DWORD *)(a1 + 152); | |
v7 = *(_DWORD *)(a1 + 156) - (*(_DWORD *)(a1 + 156) >> 2); | |
*(_DWORD *)(a1 + 156) = v7; | |
if ( v5 < v6 ) | |
{ | |
v9 = v6 - ((v6 - v5) >> 3); | |
*(_DWORD *)(a1 + 152) = v9; | |
*(_DWORD *)(a1 + 156) = v7 + ((v9 - v5) >> 2); | |
} | |
else | |
{ | |
v8 = ((v5 - v6) >> 3) + v6; | |
*(_DWORD *)(a1 + 152) = v8; | |
*(_DWORD *)(a1 + 156) = v7 + ((v5 - v8) >> 2); | |
} | |
v10 = *(_DWORD *)(a1 + 152); | |
if ( v10 < *(_DWORD *)(a1 + 140) ) | |
*(_DWORD *)(a1 + 140) = v10; | |
v11 = *(_DWORD *)(a1 + 156); | |
if ( v11 > *(_DWORD *)(a1 + 148) ) | |
*(_DWORD *)(a1 + 148) = v11; | |
v12 = *(_DWORD *)(a1 + 120); | |
if ( !v12 | |
|| ((unsigned int)(*(_DWORD *)(a2 + 48) - v12) < 0x5265C00 ? (v13 = *(_DWORD *)(a2 + 48) - v12) : (v13 = v12 - *(_DWORD *)(a2 + 48)), | |
(unsigned int)v13 >= *(_DWORD *)(a1 + 132)) ) | |
{ | |
v14 = *(_DWORD *)(a1 + 148); | |
*(_DWORD *)(a1 + 136) = *(_DWORD *)(a1 + 140); | |
*(_DWORD *)(a1 + 144) = v14; | |
*(_DWORD *)(a1 + 140) = v10; | |
*(_DWORD *)(a1 + 148) = v11; | |
*(_DWORD *)(a1 + 120) = *(_DWORD *)(a2 + 48); | |
} | |
v15 = ntohs(*(_WORD *)(a4 + 4)); | |
v16 = sub_42C400(v15, a1, *(_BYTE *)(a4 + 1)); | |
switch ( *(_DWORD *)(a1 + 36) ) | |
{ | |
case 2: | |
if ( v16 != 3 ) | |
return -1; | |
sub_42C5D0(a1, a3, a2); | |
break; | |
case 6: | |
if ( *(_DWORD *)(a1 + 200) == a1 + 200 && *(_DWORD *)(a1 + 208) == a1 + 208 && *(_DWORD *)(a1 + 184) == a1 + 184 ) | |
{ | |
sub_42EC70(a1, *(_DWORD *)(a1 + 360)); | |
return 0; | |
} | |
break; | |
case 7: | |
if ( v16 == 4 ) | |
{ | |
sub_42D090(a1, a3, a2); | |
return 0; | |
} | |
return -1; | |
} | |
} | |
return 0; | |
} | |
//----- (0042D970) -------------------------------------------------------- | |
signed int __cdecl sub_42D970(unsigned int a1, int a2) | |
{ | |
int v2; // ebx@1 | |
u_short v3; // ax@2 | |
__int16 v4; // di@2 | |
char v5; // dl@2 | |
int v6; // eax@2 | |
int v7; // ecx@2 | |
size_t v8; // esi@2 | |
int v9; // ebp@5 | |
int v10; // eax@7 | |
int v11; // eax@9 | |
int v12; // ecx@14 | |
int (__cdecl *v13)(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD); // eax@15 | |
unsigned int v14; // eax@16 | |
int v15; // ecx@18 | |
int v16; // edx@20 | |
int v17; // edi@20 | |
int v18; // ecx@21 | |
int v19; // ecx@23 | |
int (__cdecl *v20)(_DWORD, _DWORD); // eax@23 | |
int v21; // eax@26 | |
int v22; // esi@26 | |
int v23; // edx@29 | |
unsigned __int8 v24; // al@30 | |
int v25; // ecx@31 | |
int v26; // ecx@32 | |
unsigned __int16 v27; // cx@58 | |
int v29; // [sp+10h] [bp-14h]@23 | |
int v30; // [sp+14h] [bp-10h]@23 | |
void *v31; // [sp+18h] [bp-Ch]@2 | |
int v32; // [sp+1Ch] [bp-8h]@2 | |
v2 = a1; | |
if ( *(_DWORD *)(a1 + 10360) < 2u ) | |
return 0; | |
v31 = *(void **)(a1 + 10356); | |
v3 = ntohs(*(_WORD *)v31); | |
v4 = v3 & 0xC000; | |
v5 = ((unsigned int)v3 >> 12) & 3; | |
v6 = v3 & 0xFFF; | |
v32 = v4 & 0x8000; | |
v7 = (v4 & 0x8000) != 0; | |
v8 = 2 * v7 + 2; | |
if ( *(_DWORD *)(v2 + 2136) ) | |
v8 = 2 * v7 + 6; | |
if ( (_WORD)v6 == 4095 ) | |
{ | |
v9 = 0; | |
} | |
else | |
{ | |
if ( (unsigned int)v6 >= *(_DWORD *)(v2 + 40) | |
|| (v9 = *(_DWORD *)(v2 + 36) + 364 * v6, (v10 = *(_DWORD *)(v9 + 36)) == 0) | |
|| v10 == 9 | |
|| (v11 = *(_DWORD *)(v9 + 24), *(_DWORD *)(v2 + 10348) != v11) && v11 != -1 | |
|| *(_WORD *)(v9 + 12) < 0xFFFu && v5 != *(_BYTE *)(v9 + 21) ) | |
return 0; | |
} | |
if ( v4 & 0x4000 ) | |
{ | |
v12 = *(_DWORD *)(v2 + 2140); | |
if ( !v12 | |
|| (v13 = *(int (__cdecl **)(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD))(v2 + 2148)) == 0 | |
|| (v14 = v13(v12, v8 + *(_DWORD *)(v2 + 10356), *(_DWORD *)(v2 + 10360) - v8, v8 + v2 + 6252, 4096 - v8), | |
(a1 = v14) == 0) | |
|| v14 > 4096 - v8 ) | |
return 0; | |
memmove((void *)(v2 + 6252), v31, v8); | |
v15 = v8 + a1; | |
*(_DWORD *)(v2 + 10356) = v2 + 6252; | |
*(_DWORD *)(v2 + 10360) = v15; | |
} | |
if ( !*(_DWORD *)(v2 + 2136) | |
|| ((v16 = *(_DWORD *)(v2 + 10356), v17 = *(_DWORD *)(v8 + v16 - 4), !v9) ? (v18 = 0) : (v18 = *(_DWORD *)(v9 + 16)), | |
*(_DWORD *)(v8 + v16 - 4) = v18, | |
v19 = *(_DWORD *)(v2 + 10360), | |
v30 = *(_DWORD *)(v2 + 10356), | |
v20 = *(int (__cdecl **)(_DWORD, _DWORD))(v2 + 2136), | |
v29 = v19, | |
v20(&v29, 1) == v17) ) | |
{ | |
if ( v9 ) | |
{ | |
*(_DWORD *)(v9 + 24) = *(_DWORD *)(v2 + 10348); | |
*(_WORD *)(v9 + 28) = *(_WORD *)(v2 + 10352); | |
*(_DWORD *)(v9 + 64) += *(_DWORD *)(v2 + 10360); | |
} | |
v21 = *(_DWORD *)(v2 + 10356); | |
v22 = v21 + v8; | |
if ( v22 < (unsigned int)(v21 + *(_DWORD *)(v2 + 10360)) ) | |
{ | |
while ( 2 ) | |
{ | |
v23 = *(_DWORD *)(v2 + 10356) + *(_DWORD *)(v2 + 10360); | |
v29 = v22; | |
if ( v22 + 4 <= (unsigned int)v23 ) | |
{ | |
v24 = *(_BYTE *)v22 & 0xF; | |
if ( v24 < 0xCu ) | |
{ | |
v25 = dword_43D268[v24]; | |
if ( v25 ) | |
{ | |
v26 = v22 + v25; | |
if ( v26 <= (unsigned int)v23 ) | |
{ | |
a1 = v26; | |
if ( v9 || v24 == 2 ) | |
{ | |
*(_WORD *)(v22 + 2) = ntohs(*(_WORD *)(v22 + 2)); | |
switch ( *(_BYTE *)v22 & 0xF ) | |
{ | |
case 1: | |
if ( !sub_42D780(v9, v2, a2, v22) ) | |
goto LABEL_55; | |
break; | |
case 2: | |
v9 = sub_42C7A0(v2, v22); | |
if ( v9 ) | |
goto LABEL_56; | |
break; | |
case 3: | |
if ( !sub_42C630(v22, v9, v2, a2) ) | |
{ | |
v22 = v29; | |
goto LABEL_55; | |
} | |
break; | |
case 4: | |
if ( !sub_42CFF0(v9, v2, v22) ) | |
goto LABEL_55; | |
break; | |
case 6: | |
if ( !sub_42CF70((int)&a1, v22, v2, v9) ) | |
{ | |
v22 = v29; | |
goto LABEL_55; | |
} | |
break; | |
case 7: | |
if ( !sub_42CDC0((int)&a1, v22, v2, v9) ) | |
{ | |
v22 = v29; | |
goto LABEL_55; | |
} | |
break; | |
case 9: | |
if ( !sub_42CE40((int)&a1, v9, v2, v22) ) | |
goto LABEL_55; | |
break; | |
case 8: | |
if ( !sub_42CB60((int)&a1, v2, v9, v22) ) | |
goto LABEL_55; | |
break; | |
case 0xA: | |
if ( !sub_42BC30(v22, v9, v2) ) | |
{ | |
v22 = v29; | |
goto LABEL_55; | |
} | |
break; | |
case 0xB: | |
*(_DWORD *)(v9 + 132) = ntohl(*(_DWORD *)(v22 + 4)); | |
*(_DWORD *)(v9 + 124) = ntohl(*(_DWORD *)(v22 + 8)); | |
*(_DWORD *)(v9 + 128) = ntohl(*(_DWORD *)(v22 + 12)); | |
goto LABEL_55; | |
case 5: | |
LABEL_55: | |
if ( !v9 ) | |
goto LABEL_63; | |
LABEL_56: | |
if ( !(*(_BYTE *)v22 & 0x80) ) | |
goto LABEL_63; | |
if ( !(_WORD)v32 ) | |
break; | |
v27 = ntohs(*((_WORD *)v31 + 1)); | |
if ( *(_DWORD *)(v9 + 36) != 2 | |
&& *(_DWORD *)(v9 + 36) != 7 | |
&& (*(_DWORD *)(v9 + 36) != 8 || (*(_BYTE *)v22 & 0xF) == 4) ) | |
sub_42E1C0(v22, v9, v27); | |
LABEL_63: | |
if ( a1 >= *(_DWORD *)(v2 + 10356) + *(_DWORD *)(v2 + 10360) ) | |
break; | |
v22 = a1; | |
continue; | |
default: | |
goto LABEL_64; | |
} | |
} | |
} | |
} | |
} | |
} | |
break; | |
} | |
} | |
LABEL_64: | |
if ( a2 && *(_DWORD *)a2 ) | |
return 1; | |
} | |
return 0; | |
} | |
// 43D268: using guessed type int dword_43D268[]; | |
//----- (0042DDB0) -------------------------------------------------------- | |
signed int __usercall sub_42DDB0<eax>(unsigned int a1<edi>, int a2) | |
{ | |
SOCKET v2; // ST00_4@1 | |
DWORD v3; // eax@1 | |
bool v4; // zf@1 | |
signed int v5; // eax@3 | |
SOCKET v6; // ST00_4@5 | |
signed int result; // eax@6 | |
struct _WSABUF Buffers; // [sp+10h] [bp-8h]@1 | |
v2 = *(_DWORD *)a1; | |
Buffers.buf = (char *)(a1 + 2156); | |
Buffers.len = 4096; | |
v3 = sub_42B920(a1 + 10348, v2, &Buffers); | |
v4 = v3 == 0; | |
if ( (v3 & 0x80000000u) != 0 ) | |
{ | |
LABEL_6: | |
result = -1; | |
} | |
else | |
{ | |
while ( 1 ) | |
{ | |
if ( v4 ) | |
return 0; | |
*(_DWORD *)(a1 + 10372) += v3; | |
++*(_DWORD *)(a1 + 10376); | |
*(_DWORD *)(a1 + 10356) = a1 + 2156; | |
*(_DWORD *)(a1 + 10360) = v3; | |
v5 = sub_42D970(a1, a2); | |
if ( v5 == -1 ) | |
goto LABEL_6; | |
if ( v5 == 1 ) | |
break; | |
v6 = *(_DWORD *)a1; | |
Buffers.buf = (char *)(a1 + 2156); | |
Buffers.len = 4096; | |
v3 = sub_42B920(a1 + 10348, v6, &Buffers); | |
v4 = v3 == 0; | |
if ( (v3 & 0x80000000u) != 0 ) | |
goto LABEL_6; | |
} | |
result = 1; | |
} | |
return result; | |
} | |
//----- (0042DE60) -------------------------------------------------------- | |
signed int __thiscall sub_42DE60(int this, unsigned int a2, signed int a3, int i) | |
{ | |
int v4; // ebp@1 | |
int v5; // ST08_4@2 | |
signed int v6; // eax@2 | |
DWORD v8; // eax@6 | |
int v9; // esi@6 | |
int v10; // eax@7 | |
int v11; // eax@8 | |
int v12; // eax@12 | |
signed int v13; // eax@14 | |
int v14; // eax@16 | |
int v15; // ecx@16 | |
signed int v16; // eax@19 | |
DWORD v17; // eax@21 | |
unsigned int v18; // ecx@21 | |
DWORD v19; // eax@25 | |
bool v20; // zf@25 | |
v4 = a3; | |
if ( a3 ) | |
{ | |
v5 = a3; | |
*(_DWORD *)a3 = 0; | |
*(_DWORD *)(v4 + 4) = 0; | |
*(_DWORD *)(v4 + 16) = 0; | |
v6 = sub_42D100(this, a2, v5); | |
if ( v6 == -1 ) | |
{ | |
LABEL_5: | |
perror("Error dispatching incoming packets"); | |
return -1; | |
} | |
if ( v6 == 1 ) | |
return 1; | |
} | |
v8 = timeGetTime() - dword_4681C4; | |
v9 = v8 + i; | |
*(_DWORD *)(a2 + 48) = v8; | |
for ( i = v9; ; v9 = i ) | |
{ | |
v10 = *(_DWORD *)(a2 + 20); | |
if ( (unsigned int)(*(_DWORD *)(a2 + 48) - v10) < 0x5265C00 ) | |
v11 = *(_DWORD *)(a2 + 48) - v10; | |
else | |
v11 = v10 - *(_DWORD *)(a2 + 48); | |
if ( (unsigned int)v11 >= 0x3E8 ) | |
sub_42F060(a2); | |
v12 = sub_42D380(a2, v4, 1); | |
if ( v12 == -1 ) | |
break; | |
if ( v12 == 1 ) | |
return 1; | |
v13 = sub_42DDB0(a2, v4); | |
if ( v13 == -1 ) | |
{ | |
perror("Error receiving incoming packets"); | |
return -1; | |
} | |
if ( v13 == 1 ) | |
return 1; | |
v14 = sub_42D380(a2, v4, 1); | |
if ( v14 == -1 ) | |
break; | |
if ( v14 == 1 ) | |
return 1; | |
if ( v4 ) | |
{ | |
v16 = sub_42D100(v15, a2, v4); | |
if ( v16 == -1 ) | |
goto LABEL_5; | |
if ( v16 == 1 ) | |
return 1; | |
} | |
v17 = timeGetTime() - dword_4681C4; | |
v18 = v17 - v9; | |
*(_DWORD *)(a2 + 48) = v17; | |
if ( v17 - v9 < 0x5265C00 ) | |
return 0; | |
a3 = 2; | |
if ( v9 - v17 < 0x5265C00 ) | |
v18 = v9 - v17; | |
if ( sub_42B860(v18, *(_DWORD *)a2, (int)&a3) ) | |
return -1; | |
v19 = timeGetTime(); | |
v20 = a3 == 2; | |
*(_DWORD *)(a2 + 48) = v19 - dword_4681C4; | |
if ( !v20 ) | |
return 0; | |
} | |
perror("Error sending outgoing packets"); | |
return -1; | |
} | |
// 42D380: using guessed type _DWORD __cdecl sub_42D380(_DWORD, _DWORD, _DWORD); | |
// 4681C4: using guessed type int dword_4681C4; | |
//----- (0042E000) -------------------------------------------------------- | |
signed int __usercall sub_42E000<eax>(int a1<eax>, unsigned int a2<esi>) | |
{ | |
unsigned int v2; // ecx@1 | |
unsigned int v3; // edx@1 | |
signed int result; // eax@3 | |
unsigned int v5; // ecx@5 | |
unsigned int v6; // ecx@9 | |
unsigned int v7; // edx@9 | |
v2 = *(_DWORD *)(a1 + 136); | |
v3 = *(_DWORD *)(a1 + 144); | |
if ( v2 <= v3 ) | |
{ | |
*(_DWORD *)(a1 + 108) = *(_DWORD *)(a1 + 112); | |
return 0; | |
} | |
if ( a2 >= v2 ) | |
{ | |
if ( a2 <= v2 + 2 * v3 ) | |
return 0; | |
v6 = *(_DWORD *)(a1 + 108); | |
v7 = *(_DWORD *)(a1 + 128); | |
if ( v6 <= v7 ) | |
{ | |
*(_DWORD *)(a1 + 108) = 0; | |
result = -1; | |
} | |
else | |
{ | |
*(_DWORD *)(a1 + 108) = v6 - v7; | |
result = -1; | |
} | |
} | |
else | |
{ | |
v5 = *(_DWORD *)(a1 + 112); | |
*(_DWORD *)(a1 + 108) += *(_DWORD *)(a1 + 124); | |
if ( *(_DWORD *)(a1 + 108) > v5 ) | |
*(_DWORD *)(a1 + 108) = v5; | |
result = 1; | |
} | |
return result; | |
} | |
//----- (0042E060) -------------------------------------------------------- | |
int __usercall sub_42E060<eax>(int a1<esi>, int a2) | |
{ | |
int v2; // ecx@1 | |
int result; // eax@1 | |
int v4; // eax@7 | |
int v5; // ecx@7 | |
v2 = *(_DWORD *)(a2 + 48); | |
for ( result = *(_DWORD *)(a2 + 48); result != a2 + 48; result = *(_DWORD *)result ) | |
{ | |
if ( (*(_BYTE *)(result + 12) & 0xF) == 7 && *(_WORD *)(result + 8) != *(_WORD *)(a2 + 38) ) | |
break; | |
} | |
if ( result != v2 ) | |
{ | |
result = *(_DWORD *)(result + 4); | |
**(_DWORD **)(v2 + 4) = *(_DWORD *)result; | |
*(_DWORD *)(*(_DWORD *)result + 4) = *(_DWORD *)(v2 + 4); | |
*(_DWORD *)(v2 + 4) = *(_DWORD *)(a1 + 220); | |
*(_DWORD *)result = a1 + 216; | |
**(_DWORD **)(v2 + 4) = v2; | |
*(_DWORD *)(a1 + 220) = result; | |
if ( !*(_DWORD *)(a1 + 224) ) | |
{ | |
v4 = *(_DWORD *)(a1 + 8); | |
v5 = *(_DWORD *)(v4 + 56); | |
result = v4 + 52; | |
*(_DWORD *)(a1 + 4) = v5; | |
*(_DWORD *)a1 = result; | |
*(_DWORD *)v5 = a1; | |
*(_DWORD *)(result + 4) = a1; | |
*(_DWORD *)(a1 + 224) = 1; | |
} | |
} | |
return result; | |
} | |
//----- (0042E0F0) -------------------------------------------------------- | |
int __usercall sub_42E0F0<eax>(int a1<edi>, int a2<esi>) | |
{ | |
int v2; // eax@1 | |
__int16 v3; // dx@2 | |
char v4; // cl@3 | |
__int16 v5; // cx@4 | |
u_short v6; // ST00_2@9 | |
u_short v7; // ax@9 | |
bool v8; // zf@9 | |
int result; // eax@9 | |
int v10; // edx@11 | |
v2 = *(_DWORD *)(a1 + 40) + 56 * *(_BYTE *)(a2 + 33); | |
*(_DWORD *)(a1 + 68) += *(_WORD *)(a2 + 28) + dword_43D268[*(_BYTE *)(a2 + 32) & 0xF]; | |
if ( *(_BYTE *)(a2 + 33) == -1 ) | |
{ | |
++*(_WORD *)(a1 + 172); | |
*(_WORD *)(a2 + 8) = *(_WORD *)(a1 + 172); | |
v3 = 0; | |
} | |
else | |
{ | |
v4 = *(_BYTE *)(a2 + 32); | |
if ( v4 < 0 ) | |
{ | |
++*(_WORD *)v2; | |
v5 = *(_WORD *)v2; | |
*(_WORD *)(v2 + 2) = 0; | |
*(_WORD *)(a2 + 8) = v5; | |
*(_WORD *)(a2 + 10) = 0; | |
goto LABEL_9; | |
} | |
if ( v4 & 0x40 ) | |
{ | |
++*(_WORD *)(a1 + 230); | |
*(_DWORD *)(a2 + 8) = 0; | |
goto LABEL_9; | |
} | |
++*(_WORD *)(v2 + 2); | |
*(_WORD *)(a2 + 8) = *(_WORD *)v2; | |
v3 = *(_WORD *)(v2 + 2); | |
} | |
*(_WORD *)(a2 + 10) = v3; | |
LABEL_9: | |
v6 = *(_WORD *)(a2 + 8); | |
*(_WORD *)(a2 + 30) = 0; | |
*(_DWORD *)(a2 + 12) = 0; | |
*(_DWORD *)(a2 + 16) = 0; | |
*(_DWORD *)(a2 + 20) = 0; | |
v7 = htons(v6); | |
v8 = (*(_BYTE *)(a2 + 32) & 0x80) == 0; | |
*(_WORD *)(a2 + 34) = v7; | |
result = a1 + 200; | |
if ( v8 ) | |
result = a1 + 208; | |
v10 = *(_DWORD *)(result + 4); | |
*(_DWORD *)(a2 + 4) = v10; | |
*(_DWORD *)a2 = result; | |
*(_DWORD *)v10 = a2; | |
*(_DWORD *)(result + 4) = a2; | |
return result; | |
} | |
// 43D268: using guessed type int dword_43D268[]; | |
//----- (0042E1C0) -------------------------------------------------------- | |
int __usercall sub_42E1C0<eax>(int a1<eax>, int a2, unsigned __int16 a3) | |
{ | |
int v3; // esi@1 | |
unsigned int v4; // eax@1 | |
unsigned __int16 v5; // cx@2 | |
unsigned __int16 v6; // dx@2 | |
int v7; // edi@2 | |
int result; // eax@6 | |
int v9; // edx@9 | |
v3 = a1; | |
v4 = *(_BYTE *)(a1 + 1); | |
if ( v4 < *(_DWORD *)(a2 + 44) ) | |
{ | |
v5 = *(_WORD *)(*(_DWORD *)(a2 + 40) + 56 * v4 + 38); | |
v6 = *(_WORD *)(v3 + 2) >> 12; | |
v7 = v5 >> 12; | |
if ( *(_WORD *)(v3 + 2) < v5 ) | |
v6 += 16; | |
if ( v6 >= v7 + 7 && v6 <= v7 + 8 ) | |
return 0; | |
} | |
result = off_43D298(60); | |
if ( !result ) | |
{ | |
off_43D2A0(); | |
return 0; | |
} | |
*(_DWORD *)(a2 + 68) += 8; | |
*(_DWORD *)(result + 8) = a3; | |
memcpy((void *)(result + 12), (const void *)v3, 0x30u); | |
v9 = *(_DWORD *)(a2 + 180); | |
*(_DWORD *)(result + 4) = v9; | |
*(_DWORD *)result = a2 + 176; | |
*(_DWORD *)v9 = result; | |
*(_DWORD *)(a2 + 180) = result; | |
return result; | |
} | |
// 43D298: using guessed type int (__cdecl *off_43D298)(_DWORD); | |
// 43D2A0: using guessed type int (*off_43D2A0)(void); | |
//----- (0042E2C0) -------------------------------------------------------- | |
int __usercall sub_42E2C0<eax>(int a1<eax>, int a2<edi>) | |
{ | |
int v2; // edx@1 | |
int v3; // esi@1 | |
int result; // eax@1 | |
__int16 v5; // cx@3 | |
int v6; // eax@8 | |
int v7; // eax@9 | |
int v8; // ecx@9 | |
v2 = *(_DWORD *)(a2 + 40); | |
v3 = a1; | |
for ( result = *(_DWORD *)(a2 + 40); result != a2 + 40; result = *(_DWORD *)result ) | |
{ | |
if ( *(_DWORD *)(result + 64) ) | |
break; | |
v5 = *(_WORD *)(result + 8); | |
if ( v5 != *(_WORD *)(a2 + 38) + 1 ) | |
break; | |
*(_WORD *)(a2 + 38) = v5; | |
if ( *(_DWORD *)(result + 60) ) | |
*(_WORD *)(a2 + 38) = v5 + *(_WORD *)(result + 60) - 1; | |
} | |
if ( result != v2 ) | |
{ | |
v6 = *(_DWORD *)(result + 4); | |
**(_DWORD **)(v2 + 4) = *(_DWORD *)v6; | |
*(_DWORD *)(*(_DWORD *)v6 + 4) = *(_DWORD *)(v2 + 4); | |
*(_DWORD *)(v2 + 4) = *(_DWORD *)(v3 + 220); | |
*(_DWORD *)v6 = v3 + 216; | |
**(_DWORD **)(v2 + 4) = v2; | |
*(_DWORD *)(v3 + 220) = v6; | |
if ( !*(_DWORD *)(v3 + 224) ) | |
{ | |
v7 = *(_DWORD *)(v3 + 8); | |
v8 = *(_DWORD *)(v7 + 56); | |
v7 += 52; | |
*(_DWORD *)(v3 + 4) = v8; | |
*(_DWORD *)v3 = v7; | |
*(_DWORD *)v8 = v3; | |
*(_DWORD *)(v7 + 4) = v3; | |
*(_DWORD *)(v3 + 224) = 1; | |
} | |
result = sub_42E060(v3, a2); | |
} | |
return result; | |
} | |
//----- (0042E370) -------------------------------------------------------- | |
int __cdecl sub_42E370(int a1, const void *a2, int a3, __int16 a4) | |
{ | |
int v4; // ebx@1 | |
v4 = off_43D298(84); | |
if ( !v4 ) | |
{ | |
off_43D2A0(); | |
JUMPOUT(*(int *)loc_42E38D); | |
} | |
memcpy((void *)(v4 + 32), a2, 0x30u); | |
*(_DWORD *)(v4 + 24) = 0; | |
*(_WORD *)(v4 + 28) = a4; | |
*(_DWORD *)(v4 + 80) = a3; | |
if ( a3 ) | |
++*(_DWORD *)a3; | |
sub_42E0F0(a1, v4); | |
return v4; | |
} | |
// 42E38D: using guessed type int __cdecl(int, int, int, __int16); | |
// 43D298: using guessed type int (__cdecl *off_43D298)(_DWORD); | |
// 43D2A0: using guessed type int (*off_43D2A0)(void); | |
//----- (0042E430) -------------------------------------------------------- | |
void __cdecl sub_42E430(int a1) | |
{ | |
int i; // esi@1 | |
int v2; // ecx@3 | |
int v3; // edi@4 | |
void (__cdecl *v4)(_DWORD); // eax@4 | |
for ( i = *(_DWORD *)a1; *(_DWORD *)a1 != a1; i = *(_DWORD *)a1 ) | |
{ | |
**(_DWORD **)(i + 4) = *(_DWORD *)i; | |
*(_DWORD *)(*(_DWORD *)i + 4) = *(_DWORD *)(i + 4); | |
if ( *(_DWORD *)(i + 72) ) | |
{ | |
--**(_DWORD **)(i + 72); | |
v2 = *(_DWORD *)(i + 72); | |
if ( !*(_DWORD *)v2 ) | |
{ | |
v3 = *(_DWORD *)(i + 72); | |
v4 = *(void (__cdecl **)(_DWORD))(v2 + 16); | |
if ( v4 ) | |
v4(v2); | |
if ( !(*(_BYTE *)(v3 + 4) & 4) ) | |
off_43D29C(*(_DWORD *)(v3 + 8)); | |
off_43D29C(v3); | |
} | |
} | |
if ( *(_DWORD *)(i + 68) ) | |
off_43D29C(*(_DWORD *)(i + 68)); | |
off_43D29C(i); | |
} | |
} | |
// 43D29C: using guessed type int (__cdecl *off_43D29C)(_DWORD); | |
//----- (0042E4C0) -------------------------------------------------------- | |
void __cdecl sub_42E4C0(int a1) | |
{ | |
int i; // esi@1 | |
int v2; // ecx@3 | |
int v3; // edi@4 | |
void (__cdecl *v4)(_DWORD); // eax@4 | |
for ( i = *(_DWORD *)a1; *(_DWORD *)a1 != a1; i = *(_DWORD *)a1 ) | |
{ | |
**(_DWORD **)(i + 4) = *(_DWORD *)i; | |
*(_DWORD *)(*(_DWORD *)i + 4) = *(_DWORD *)(i + 4); | |
if ( *(_DWORD *)(i + 80) ) | |
{ | |
--**(_DWORD **)(i + 80); | |
v2 = *(_DWORD *)(i + 80); | |
if ( !*(_DWORD *)v2 ) | |
{ | |
v3 = *(_DWORD *)(i + 80); | |
v4 = *(void (__cdecl **)(_DWORD))(v2 + 16); | |
if ( v4 ) | |
v4(v2); | |
if ( !(*(_BYTE *)(v3 + 4) & 4) ) | |
off_43D29C(*(_DWORD *)(v3 + 8)); | |
off_43D29C(v3); | |
} | |
} | |
off_43D29C(i); | |
} | |
} | |
// 43D29C: using guessed type int (__cdecl *off_43D29C)(_DWORD); | |
//----- (0042E540) -------------------------------------------------------- | |
signed int __cdecl sub_42E540(int a1) | |
{ | |
int v1; // esi@1 | |
int v2; // eax@1 | |
u_long v3; // ebx@2 | |
unsigned int v4; // edi@3 | |
void **v5; // eax@6 | |
int v6; // eax@9 | |
void **v7; // esi@9 | |
void **v8; // eax@10 | |
int v10; // ecx@18 | |
u_short (__stdcall *v11)(u_short); // edi@20 | |
u_short v12; // ST0C_2@20 | |
u_short v13; // ax@20 | |
u_short v14; // dx@20 | |
unsigned __int16 v15; // ax@21 | |
u_short v16; // ST0C_2@22 | |
u_short v17; // [sp-4h] [bp-5Ch]@20 | |
u_long hostlong; // [sp+10h] [bp-48h]@6 | |
u_short v19; // [sp+14h] [bp-44h]@6 | |
u_long v20; // [sp+18h] [bp-40h]@6 | |
int v21; // [sp+1Ch] [bp-3Ch]@1 | |
void *v22; // [sp+20h] [bp-38h]@6 | |
void **v23; // [sp+24h] [bp-34h]@6 | |
char v24; // [sp+28h] [bp-30h]@20 | |
char v25; // [sp+29h] [bp-2Fh]@18 | |
u_short v26; // [sp+2Ch] [bp-2Ch]@20 | |
u_short v27; // [sp+2Eh] [bp-2Ah]@24 | |
v1 = dword_283CC94; | |
v2 = *(_DWORD *)(dword_283CC94 + 40); | |
v21 = dword_283CC94; | |
if ( *(_DWORD *)(dword_283CC94 + 36) != 5 || (v3 = 0, !*(_DWORD *)(dword_283CC94 + 44)) ) | |
return -1; | |
v4 = *(_DWORD *)(dword_283CC94 + 160) - 28; | |
if ( *(_DWORD *)(*(_DWORD *)(dword_283CC94 + 8) + 2136) ) | |
v4 = *(_DWORD *)(dword_283CC94 + 160) - 32; | |
if ( *(_DWORD *)(a1 + 12) <= v4 ) | |
{ | |
v10 = *(_DWORD *)(a1 + 4); | |
v25 = 0; | |
if ( !(v10 & 1) ) | |
{ | |
if ( v10 & 2 ) | |
{ | |
v11 = htons; | |
v12 = *(_WORD *)(dword_283CC94 + 230) + 1; | |
v24 = 73; | |
v13 = htons(v12); | |
v14 = *(_WORD *)(a1 + 12); | |
v26 = v13; | |
v17 = v14; | |
LABEL_24: | |
v27 = v11(v17); | |
return (sub_42E370(v1, &v24, a1, *(_WORD *)(a1 + 12)) != 0) - 1; | |
} | |
v15 = *(_WORD *)(v2 + 2); | |
if ( v15 < 0xFFFFu ) | |
{ | |
v11 = htons; | |
v24 = 7; | |
v26 = htons(v15 + 1); | |
v17 = *(_WORD *)(a1 + 12); | |
goto LABEL_24; | |
} | |
} | |
v16 = *(_WORD *)(a1 + 12); | |
v24 = -122; | |
v26 = htons(v16); | |
return (sub_42E370(v1, &v24, a1, *(_WORD *)(a1 + 12)) != 0) - 1; | |
} | |
v19 = htons(*(_WORD *)v2 + 1); | |
v20 = htonl((*(_DWORD *)(a1 + 12) + v4 - 1) / v4); | |
v5 = &v22; | |
v22 = &v22; | |
v23 = &v22; | |
hostlong = 0; | |
if ( *(_DWORD *)(a1 + 12) > 0u ) | |
{ | |
do | |
{ | |
if ( *(_DWORD *)(a1 + 12) - v3 < v4 ) | |
v4 = *(_DWORD *)(a1 + 12) - v3; | |
v6 = off_43D298(84); | |
v7 = (void **)v6; | |
if ( !v6 ) | |
{ | |
off_43D2A0(); | |
JUMPOUT(*(int *)loc_42E6B8); | |
} | |
*(_DWORD *)(v6 + 24) = v3; | |
*(_WORD *)(v6 + 28) = v4; | |
*(_DWORD *)(v6 + 80) = a1; | |
*(_WORD *)(v6 + 32) = 136; | |
*(_WORD *)(v6 + 36) = v19; | |
*(_WORD *)(v6 + 38) = htons(v4); | |
v7[10] = (void *)v20; | |
v7[11] = (void *)htonl(hostlong); | |
v7[12] = (void *)htonl(*(_DWORD *)(a1 + 12)); | |
++hostlong; | |
v7[13] = (void *)ntohl(v3); | |
v8 = v23; | |
v7[1] = v23; | |
*v7 = &v22; | |
*v8 = v7; | |
v3 += v4; | |
v23 = v7; | |
} | |
while ( v3 < *(_DWORD *)(a1 + 12) ); | |
v5 = (void **)v22; | |
} | |
*(_DWORD *)a1 += hostlong; | |
if ( v5 != &v22 ) | |
{ | |
do | |
{ | |
*(_DWORD *)v5[1] = *v5; | |
*((_DWORD *)*v5 + 1) = v5[1]; | |
sub_42E0F0(v21, (int)v5); | |
v5 = (void **)v22; | |
} | |
while ( v22 != &v22 ); | |
} | |
return 0; | |
} | |
// 42E6B8: using guessed type int __cdecl(int); | |
// 43D298: using guessed type int (__cdecl *off_43D298)(_DWORD); | |
// 43D2A0: using guessed type int (*off_43D2A0)(void); | |
//----- (0042E7A0) -------------------------------------------------------- | |
int __cdecl sub_42E7A0(int a1, int a2, void *a3, int a4) | |
{ | |
int v4; // edx@1 | |
int v5; // ebx@1 | |
unsigned int v6; // edi@3 | |
unsigned __int16 v7; // cx@3 | |
int v8; // ebp@3 | |
void (__cdecl *v9)(_DWORD); // eax@10 | |
int result; // eax@15 | |
unsigned __int16 v11; // cx@18 | |
unsigned int v12; // edx@18 | |
int v13; // ebp@19 | |
int v14; // ebx@19 | |
unsigned __int16 v15; // ax@20 | |
u_short v16; // ax@29 | |
unsigned int v17; // ecx@31 | |
unsigned __int16 v18; // ax@31 | |
int v19; // ebx@43 | |
__int16 v20; // ax@46 | |
void *v21; // ecx@46 | |
void *v22; // edi@47 | |
int v23; // ebp@54 | |
int v24; // edx@54 | |
void (__cdecl *v25)(_DWORD); // eax@60 | |
unsigned int v26; // [sp+10h] [bp-8h]@1 | |
int v27; // [sp+14h] [bp-4h]@1 | |
v4 = *(_DWORD *)(a1 + 40); | |
v5 = v4 + 56 * *(_BYTE *)(a2 + 1); | |
v27 = v4 + 56 * *(_BYTE *)(a2 + 1); | |
LOWORD(v26) = 0; | |
if ( *(_DWORD *)(a1 + 36) == 6 ) | |
{ | |
LABEL_7: | |
if ( a4 ) | |
goto LABEL_8; | |
if ( a3 && !*(_DWORD *)a3 ) | |
{ | |
v25 = (void (__cdecl *)(_DWORD))*((_DWORD *)a3 + 4); | |
if ( v25 ) | |
v25(a3); | |
if ( !(*((_BYTE *)a3 + 4) & 4) ) | |
off_43D29C(*((_DWORD *)a3 + 2)); | |
off_43D29C(a3); | |
} | |
return (int)&unk_43E788; | |
} | |
if ( (*(_BYTE *)a2 & 0xF) == 9 ) | |
{ | |
v6 = a1; | |
} | |
else | |
{ | |
v6 = *(_WORD *)(a2 + 2); | |
v7 = (unsigned int)*(_WORD *)(a2 + 2) >> 12; | |
v8 = (unsigned __int16)(*(_WORD *)(v5 + 38) >> 12); | |
if ( v6 < *(_WORD *)(v5 + 38) ) | |
v7 += 16; | |
if ( v7 < (unsigned __int16)v8 || v7 >= v8 + 7 ) | |
goto LABEL_7; | |
} | |
switch ( *(_BYTE *)a2 & 0xF ) | |
{ | |
case 6: | |
case 8: | |
v11 = *(_WORD *)(v5 + 38); | |
v12 = *(_WORD *)(v5 + 38); | |
if ( v6 == v12 ) | |
goto LABEL_7; | |
v13 = *(_DWORD *)(v5 + 44); | |
v14 = v5 + 40; | |
if ( v13 == v14 ) | |
goto LABEL_43; | |
while ( 2 ) | |
{ | |
v15 = *(_WORD *)(v13 + 8); | |
if ( v6 < v12 ) | |
{ | |
if ( v15 >= v11 ) | |
goto LABEL_43; | |
} | |
else | |
{ | |
if ( v15 < v11 ) | |
goto LABEL_25; | |
} | |
if ( v15 > v6 ) | |
{ | |
LABEL_25: | |
v13 = *(_DWORD *)(v13 + 4); | |
if ( v13 == v14 ) | |
goto LABEL_43; | |
continue; | |
} | |
break; | |
} | |
if ( *(_WORD *)(v13 + 8) < v6 ) | |
goto LABEL_43; | |
goto LABEL_7; | |
case 7: | |
v16 = ntohs(*(_WORD *)(a2 + 4)); | |
v13 = *(_DWORD *)(v5 + 52); | |
v26 = v16; | |
if ( v13 == v5 + 48 ) | |
goto LABEL_43; | |
while ( 2 ) | |
{ | |
if ( (*(_BYTE *)(v13 + 12) & 0xF) != 7 ) | |
goto LABEL_38; | |
v17 = *(_WORD *)(v5 + 38); | |
v18 = *(_WORD *)(v13 + 8); | |
if ( v6 < v17 ) | |
{ | |
if ( v18 >= (unsigned __int16)v17 ) | |
goto LABEL_43; | |
} | |
else | |
{ | |
if ( v18 < (unsigned __int16)v17 ) | |
goto LABEL_38; | |
} | |
if ( v18 < v6 ) | |
goto LABEL_43; | |
if ( v18 > v6 || *(_WORD *)(v13 + 10) > v26 ) | |
{ | |
LABEL_38: | |
v13 = *(_DWORD *)(v13 + 4); | |
if ( v13 == v5 + 48 ) | |
goto LABEL_43; | |
continue; | |
} | |
break; | |
} | |
if ( *(_WORD *)(v13 + 10) >= v26 ) | |
goto LABEL_7; | |
LABEL_43: | |
v19 = off_43D298(76); | |
if ( !v19 ) | |
{ | |
off_43D2A0(); | |
JUMPOUT(*(int *)loc_42E94B); | |
} | |
v20 = *(_WORD *)(a2 + 2); | |
*(_WORD *)(v19 + 10) = v26; | |
*(_WORD *)(v19 + 8) = v20; | |
memcpy((void *)(v19 + 12), (const void *)a2, 0x30u); | |
v21 = a3; | |
*(_DWORD *)(v19 + 60) = a4; | |
*(_DWORD *)(v19 + 64) = a4; | |
*(_DWORD *)(v19 + 72) = a3; | |
*(_DWORD *)(v19 + 68) = 0; | |
if ( a4 ) | |
{ | |
v22 = (void *)off_43D298(4 * ((unsigned int)(a4 + 31) >> 5)); | |
if ( !v22 ) | |
off_43D2A0(); | |
*(_DWORD *)(v19 + 68) = v22; | |
if ( !v22 ) | |
{ | |
off_43D29C(v19); | |
LABEL_8: | |
if ( a3 && !*(_DWORD *)a3 ) | |
{ | |
v9 = (void (__cdecl *)(_DWORD))*((_DWORD *)a3 + 4); | |
if ( v9 ) | |
v9(a3); | |
if ( !(*((_BYTE *)a3 + 4) & 4) ) | |
off_43D29C(*((_DWORD *)a3 + 2)); | |
off_43D29C(a3); | |
} | |
return 0; | |
} | |
memset(v22, 0, 4 * ((unsigned int)(a4 + 31) >> 5)); | |
v21 = a3; | |
} | |
if ( v21 ) | |
++*(_DWORD *)v21; | |
v23 = *(_DWORD *)v13; | |
v24 = *(_DWORD *)(v23 + 4); | |
*(_DWORD *)(v19 + 4) = v24; | |
*(_DWORD *)v19 = v23; | |
*(_DWORD *)v24 = v19; | |
*(_DWORD *)(v23 + 4) = v19; | |
if ( (*(_BYTE *)a2 & 0xF) == 6 || (*(_BYTE *)a2 & 0xF) == 8 ) | |
{ | |
sub_42E2C0(a1, v27); | |
result = v19; | |
} | |
else | |
{ | |
sub_42E060(a1, v27); | |
result = v19; | |
} | |
return result; | |
case 9: | |
v13 = v5 + 48; | |
goto LABEL_43; | |
default: | |
goto LABEL_7; | |
} | |
} | |
// 42E94B: using guessed type int __cdecl(int, int, void *, int); | |
// 43D298: using guessed type int (__cdecl *off_43D298)(_DWORD); | |
// 43D29C: using guessed type int (__cdecl *off_43D29C)(_DWORD); | |
// 43D2A0: using guessed type int (*off_43D2A0)(void); | |
//----- (0042EA80) -------------------------------------------------------- | |
unsigned int __usercall sub_42EA80<eax>(int a1<esi>) | |
{ | |
int v1; // edi@3 | |
int v2; // eax@4 | |
unsigned int result; // eax@5 | |
unsigned int v4; // ecx@6 | |
int v5; // edi@8 | |
if ( *(_DWORD *)(a1 + 224) ) | |
{ | |
**(_DWORD **)(a1 + 4) = *(_DWORD *)a1; | |
*(_DWORD *)(*(_DWORD *)a1 + 4) = *(_DWORD *)(a1 + 4); | |
*(_DWORD *)(a1 + 224) = 0; | |
} | |
v1 = a1 + 176; | |
while ( *(_DWORD *)v1 != v1 ) | |
{ | |
v2 = *(_DWORD *)v1; | |
**(_DWORD **)(*(_DWORD *)v1 + 4) = **(_DWORD **)v1; | |
*(_DWORD *)(*(_DWORD *)v2 + 4) = *(_DWORD *)(v2 + 4); | |
off_43D29C(v2); | |
} | |
sub_42E4C0(a1 + 184); | |
sub_42E4C0(a1 + 192); | |
sub_42E4C0(a1 + 200); | |
sub_42E4C0(a1 + 208); | |
sub_42E430(a1 + 216); | |
result = *(_DWORD *)(a1 + 40); | |
if ( result ) | |
{ | |
v4 = *(_DWORD *)(a1 + 44); | |
if ( v4 > 0 ) | |
{ | |
if ( result < result + 56 * v4 ) | |
{ | |
v5 = result + 48; | |
do | |
{ | |
sub_42E430(v5 - 8); | |
sub_42E430(v5); | |
v5 += 56; | |
} | |
while ( v5 - 48 < (unsigned int)(*(_DWORD *)(a1 + 40) + 56 * *(_DWORD *)(a1 + 44)) ); | |
} | |
result = off_43D29C(*(_DWORD *)(a1 + 40)); | |
} | |
} | |
*(_DWORD *)(a1 + 40) = 0; | |
*(_DWORD *)(a1 + 44) = 0; | |
return result; | |
} | |
// 43D29C: using guessed type int (__cdecl *off_43D29C)(_DWORD); | |
//----- (0042EB80) -------------------------------------------------------- | |
unsigned int __usercall sub_42EB80<eax>(int a1<eax>) | |
{ | |
int v1; // esi@1 | |
int v2; // ecx@1 | |
v1 = a1; | |
*(_DWORD *)(a1 + 108) = 32; | |
*(_DWORD *)(a1 + 112) = 32; | |
*(_DWORD *)(a1 + 124) = 2; | |
*(_DWORD *)(a1 + 128) = 2; | |
*(_WORD *)(a1 + 12) = 4095; | |
*(_DWORD *)(a1 + 136) = 500; | |
*(_DWORD *)(a1 + 140) = 500; | |
*(_DWORD *)(a1 + 152) = 500; | |
v2 = *(_DWORD *)(a1 + 8); | |
*(_DWORD *)(a1 + 16) = 0; | |
*(_DWORD *)(a1 + 36) = 0; | |
*(_DWORD *)(a1 + 48) = 0; | |
*(_DWORD *)(a1 + 52) = 0; | |
*(_DWORD *)(a1 + 56) = 0; | |
*(_DWORD *)(a1 + 60) = 0; | |
*(_DWORD *)(a1 + 64) = 0; | |
*(_DWORD *)(a1 + 68) = 0; | |
*(_DWORD *)(a1 + 72) = 0; | |
*(_DWORD *)(a1 + 76) = 0; | |
*(_DWORD *)(a1 + 80) = 0; | |
*(_DWORD *)(a1 + 84) = 0; | |
*(_DWORD *)(a1 + 88) = 0; | |
*(_DWORD *)(a1 + 92) = 0; | |
*(_DWORD *)(a1 + 96) = 0; | |
*(_DWORD *)(a1 + 100) = 0; | |
*(_DWORD *)(a1 + 104) = 0; | |
*(_DWORD *)(a1 + 116) = 0; | |
*(_DWORD *)(a1 + 120) = 0; | |
*(_DWORD *)(a1 + 132) = 5000; | |
*(_DWORD *)(a1 + 144) = 0; | |
*(_DWORD *)(a1 + 148) = 0; | |
*(_DWORD *)(a1 + 156) = 0; | |
*(_DWORD *)(a1 + 160) = *(_DWORD *)(v2 + 24); | |
*(_DWORD *)(a1 + 228) = 0; | |
*(_DWORD *)(a1 + 168) = 0; | |
*(_WORD *)(a1 + 172) = 0; | |
*(_DWORD *)(a1 + 164) = 32768; | |
*(_DWORD *)(a1 + 360) = 0; | |
memset((void *)(a1 + 232), 0, 0x80u); | |
return sub_42EA80(v1); | |
} | |
//----- (0042EC70) -------------------------------------------------------- | |
unsigned int __cdecl sub_42EC70(int a1, u_long hostlong) | |
{ | |
unsigned int result; // eax@1 | |
int v3; // eax@5 | |
int v4; // eax@8 | |
char v5; // [sp+10h] [bp-30h]@6 | |
char v6; // [sp+11h] [bp-2Fh]@5 | |
u_long v7; // [sp+14h] [bp-2Ch]@5 | |
result = *(_DWORD *)(a1 + 36); | |
if ( result != 7 && result && result != 8 && result != 9 ) | |
{ | |
sub_42EA80(a1); | |
v6 = -1; | |
v7 = htonl(hostlong); | |
v3 = *(_DWORD *)(a1 + 36); | |
if ( v3 == 5 || (v5 = 68, v3 == 6) ) | |
v5 = -124; | |
v4 = off_43D298(84); | |
if ( !v4 ) | |
{ | |
off_43D2A0(); | |
JUMPOUT(*(int *)loc_42ECEB); | |
} | |
memcpy((void *)(v4 + 32), &v5, 0x30u); | |
*(_DWORD *)(v4 + 24) = 0; | |
*(_WORD *)(v4 + 28) = 0; | |
*(_DWORD *)(v4 + 80) = 0; | |
sub_42E0F0(a1, v4); | |
result = *(_DWORD *)(a1 + 36); | |
if ( result == 5 || result == 6 ) | |
{ | |
*(_DWORD *)(a1 + 36) = 7; | |
} | |
else | |
{ | |
sub_42D760(*(_DWORD *)(a1 + 8)); | |
result = sub_42EB80(a1); | |
} | |
} | |
return result; | |
} | |
// 42ECEB: using guessed type int __cdecl(int, u_long hostlong); | |
// 43D298: using guessed type int (__cdecl *off_43D298)(_DWORD); | |
// 43D2A0: using guessed type int (*off_43D2A0)(void); | |
//----- (0042ED80) -------------------------------------------------------- | |
int __cdecl sub_42ED80() | |
{ | |
signed int v0; // ebx@1 | |
signed int v1; // eax@2 | |
signed int v2; // ecx@14 | |
signed int v3; // eax@18 | |
int v4; // eax@19 | |
int v5; // eax@22 | |
int v6; // eax@25 | |
int v7; // eax@28 | |
int v8; // eax@31 | |
int v9; // eax@34 | |
int v10; // eax@37 | |
int result; // eax@40 | |
int v12; // edx@42 | |
signed int v13; // ecx@42 | |
v0 = 0; | |
do | |
{ | |
v1 = 0; | |
if ( v0 & 1 ) | |
v1 = 128; | |
if ( (v0 >> 1) & 1 ) | |
v1 |= 0x40u; | |
if ( (v0 >> 2) & 1 ) | |
v1 |= 0x20u; | |
if ( (v0 >> 3) & 1 ) | |
v1 |= 0x10u; | |
if ( (v0 >> 4) & 1 ) | |
v1 |= 8u; | |
if ( (v0 >> 5) & 1 ) | |
v1 |= 4u; | |
v2 = v0 >> 6; | |
if ( (v0 >> 6) & 1 ) | |
v1 |= 2u; | |
if ( v2 & 2 ) | |
v1 |= 1u; | |
v3 = v1 << 24; | |
if ( v3 >= 0 ) | |
v4 = 2 * v3; | |
else | |
v4 = 2 * v3 ^ 0x4C11DB7; | |
if ( v4 >= 0 ) | |
v5 = 2 * v4; | |
else | |
v5 = 2 * v4 ^ 0x4C11DB7; | |
if ( v5 >= 0 ) | |
v6 = 2 * v5; | |
else | |
v6 = 2 * v5 ^ 0x4C11DB7; | |
if ( v6 >= 0 ) | |
v7 = 2 * v6; | |
else | |
v7 = 2 * v6 ^ 0x4C11DB7; | |
if ( v7 >= 0 ) | |
v8 = 2 * v7; | |
else | |
v8 = 2 * v7 ^ 0x4C11DB7; | |
if ( v8 >= 0 ) | |
v9 = 2 * v8; | |
else | |
v9 = 2 * v8 ^ 0x4C11DB7; | |
if ( v9 >= 0 ) | |
v10 = 2 * v9; | |
else | |
v10 = 2 * v9 ^ 0x4C11DB7; | |
if ( v10 >= 0 ) | |
result = 2 * v10; | |
else | |
result = 2 * v10 ^ 0x4C11DB7; | |
v12 = 0; | |
v13 = 31; | |
do | |
{ | |
if ( result & 1 ) | |
v12 |= 1 << v13; | |
--v13; | |
result >>= 1; | |
} | |
while ( v13 > -1 ); | |
dword_43E388[v0++] = v12; | |
} | |
while ( v0 < 256 ); | |
dword_4681C0 = 1; | |
return result; | |
} | |
// 43E388: using guessed type int dword_43E388[]; | |
// 4681C0: using guessed type int dword_4681C0; | |
//----- (0042EEC0) -------------------------------------------------------- | |
int __cdecl sub_42EEC0(const void *a1, size_t a2, int a3) | |
{ | |
int v3; // eax@1 | |
int v4; // esi@1 | |
void *v5; // edi@6 | |
v3 = off_43D298(20); | |
v4 = v3; | |
if ( !v3 ) | |
{ | |
off_43D2A0(); | |
JUMPOUT(*(int *)loc_42EEE2); | |
} | |
if ( a3 & 4 ) | |
{ | |
*(_DWORD *)(v3 + 8) = a1; | |
} | |
else | |
{ | |
v5 = (void *)off_43D298(a2); | |
if ( !v5 ) | |
off_43D2A0(); | |
*(_DWORD *)(v4 + 8) = v5; | |
if ( !v5 ) | |
{ | |
off_43D29C(v4); | |
return 0; | |
} | |
if ( a1 ) | |
memmove(v5, a1, a2); | |
} | |
*(_DWORD *)(v4 + 4) = a3; | |
*(_DWORD *)(v4 + 12) = a2; | |
*(_DWORD *)v4 = 0; | |
*(_DWORD *)(v4 + 16) = 0; | |
return v4; | |
} | |
// 42EEE2: using guessed type int __cdecl(void *, size_t, int); | |
// 43D298: using guessed type int (__cdecl *off_43D298)(_DWORD); | |
// 43D29C: using guessed type int (__cdecl *off_43D29C)(_DWORD); | |
// 43D2A0: using guessed type int (*off_43D2A0)(void); | |
//----- (0042EF50) -------------------------------------------------------- | |
u_long __usercall sub_42EF50<eax>(int a1<eax>) | |
{ | |
int v1; // esi@1 | |
int v2; // edi@1 | |
unsigned int v3; // eax@3 | |
int i; // ecx@3 | |
v1 = -1; | |
v2 = a1; | |
if ( !dword_4681C0 ) | |
sub_42ED80(); | |
v3 = *(_DWORD *)(v2 + 4); | |
for ( i = v3 + *(_DWORD *)v2; v3 < i; ++v3 ) | |
v1 = dword_43E388[*(_BYTE *)v3 ^ (unsigned __int8)v1] ^ ((unsigned int)v1 >> 8); | |
return htonl(~v1); | |
} | |
// 43E388: using guessed type int dword_43E388[]; | |
// 4681C0: using guessed type int dword_4681C0; | |
//----- (0042F060) -------------------------------------------------------- | |
int __cdecl sub_42F060(int a1) | |
{ | |
int v1; // ebx@1 | |
DWORD v2; // eax@1 | |
unsigned int v3; // edi@1 | |
int result; // eax@1 | |
unsigned int v5; // ebp@1 | |
int v6; // esi@3 | |
unsigned int v7; // ecx@3 | |
signed int v8; // ebp@9 | |
int v9; // ecx@9 | |
unsigned int v10; // eax@10 | |
unsigned int v11; // ecx@11 | |
unsigned int v12; // esi@19 | |
int v13; // esi@20 | |
int v14; // eax@21 | |
unsigned int v15; // edi@25 | |
unsigned int v16; // ecx@25 | |
unsigned int v17; // eax@28 | |
unsigned int v18; // eax@35 | |
int v19; // eax@36 | |
unsigned int v20; // esi@44 | |
unsigned int v21; // ebp@44 | |
signed int v22; // edi@44 | |
unsigned int v23; // eax@48 | |
int v24; // eax@49 | |
int v25; // ecx@50 | |
unsigned int v26; // ecx@53 | |
unsigned int v27; // ebp@58 | |
int v28; // ebp@59 | |
u_long v29; // ST00_4@62 | |
int v30; // eax@65 | |
int v31; // ecx@70 | |
u_long v32; // [sp-4h] [bp-64h]@63 | |
unsigned int v33; // [sp+14h] [bp-4Ch]@10 | |
unsigned int v34; // [sp+18h] [bp-48h]@1 | |
unsigned int v35; // [sp+1Ch] [bp-44h]@9 | |
unsigned int v36; // [sp+20h] [bp-40h]@8 | |
int hostlong; // [sp+24h] [bp-3Ch]@1 | |
unsigned int v38; // [sp+28h] [bp-38h]@17 | |
int v39; // [sp+2Ch] [bp-34h]@1 | |
__int16 v40; // [sp+30h] [bp-30h]@62 | |
u_long v41; // [sp+34h] [bp-2Ch]@65 | |
u_long v42; // [sp+38h] [bp-28h]@62 | |
DWORD v43; // [sp+64h] [bp+4h]@1 | |
v1 = a1; | |
v2 = timeGetTime() - dword_4681C4; | |
v3 = 0; | |
v43 = v2; | |
result = v2 - *(_DWORD *)(v1 + 20); | |
v5 = 0; | |
v39 = result; | |
v34 = 0; | |
hostlong = 0; | |
if ( (unsigned int)result >= 0x3E8 ) | |
{ | |
result = *(_DWORD *)(v1 + 36); | |
if ( result < (unsigned int)(result + 364 * *(_DWORD *)(v1 + 40)) ) | |
{ | |
v6 = result + 36; | |
v7 = (364 * *(_DWORD *)(v1 + 40) - 1) / 0x16Cu + 1; | |
do | |
{ | |
result = *(_DWORD *)v6; | |
if ( *(_DWORD *)v6 == 5 || result == 6 ) | |
{ | |
++v5; | |
v34 += *(_DWORD *)(v6 + 32); | |
} | |
v6 += 364; | |
--v7; | |
} | |
while ( v7 ); | |
v36 = v5; | |
if ( v5 ) | |
{ | |
v35 = v5; | |
v8 = 1; | |
v9 = *(_DWORD *)(v1 + 16); | |
if ( v9 ) | |
{ | |
v11 = v39 * v9; | |
v33 = v11 / 0x3E8; | |
v10 = v11 / 0x3E8; | |
} | |
else | |
{ | |
v10 = -1; | |
v33 = -1; | |
} | |
if ( v36 > 0 ) | |
{ | |
while ( v8 ) | |
{ | |
v8 = 0; | |
if ( v34 >= v10 ) | |
v38 = 32 * v10 / v34; | |
else | |
v38 = 32; | |
v12 = *(_DWORD *)(v1 + 36); | |
if ( v12 < v12 + 364 * *(_DWORD *)(v1 + 40) ) | |
{ | |
v13 = v12 + 48; | |
do | |
{ | |
v14 = *(_DWORD *)(v13 - 12); | |
if ( v14 == 5 || v14 == 6 ) | |
{ | |
if ( *(_DWORD *)v13 ) | |
{ | |
if ( *(_DWORD *)(v13 + 12) != v43 ) | |
{ | |
v15 = *(_DWORD *)(v13 + 20); | |
v16 = v39 * *(_DWORD *)v13 / 0x3E8u; | |
if ( v38 * *(_DWORD *)(v13 + 20) >> 5 > v16 ) | |
{ | |
*(_DWORD *)(v13 + 64) = 32 * v16 / v15; | |
if ( !(32 * v16 / v15) ) | |
*(_DWORD *)(v13 + 64) = 1; | |
v17 = *(_DWORD *)(v13 + 64); | |
if ( *(_DWORD *)(v13 + 60) > v17 ) | |
*(_DWORD *)(v13 + 60) = v17; | |
v33 -= v16; | |
v8 = 1; | |
--v35; | |
v34 -= v16; | |
*(_DWORD *)(v13 + 12) = v43; | |
} | |
} | |
} | |
} | |
v13 += 364; | |
} | |
while ( v13 - 48 < (unsigned int)(*(_DWORD *)(v1 + 36) + 364 * *(_DWORD *)(v1 + 40)) ); | |
} | |
if ( !v35 ) | |
goto LABEL_43; | |
v3 = v38; | |
v10 = v33; | |
} | |
if ( v35 ) | |
{ | |
v18 = *(_DWORD *)(v1 + 36); | |
if ( v18 < v18 + 364 * *(_DWORD *)(v1 + 40) ) | |
{ | |
v19 = v18 + 36; | |
do | |
{ | |
if ( *(_DWORD *)v19 == 5 || *(_DWORD *)v19 == 6 ) | |
{ | |
if ( *(_DWORD *)(v19 + 24) != v43 ) | |
{ | |
*(_DWORD *)(v19 + 76) = v3; | |
if ( *(_DWORD *)(v19 + 72) > v3 ) | |
*(_DWORD *)(v19 + 72) = v3; | |
} | |
} | |
v19 += 364; | |
} | |
while ( v19 - 36 < (unsigned int)(*(_DWORD *)(v1 + 36) + 364 * *(_DWORD *)(v1 + 40)) ); | |
} | |
} | |
} | |
LABEL_43: | |
if ( *(_DWORD *)(v1 + 32) ) | |
{ | |
v20 = *(_DWORD *)(v1 + 12); | |
v21 = v36; | |
*(_DWORD *)(v1 + 32) = 0; | |
v22 = 1; | |
if ( v20 ) | |
{ | |
if ( v36 ) | |
{ | |
do | |
{ | |
if ( !v22 ) | |
break; | |
v22 = 0; | |
hostlong = v20 / v21; | |
v23 = *(_DWORD *)(v1 + 36); | |
if ( v23 < v23 + 364 * *(_DWORD *)(v1 + 40) ) | |
{ | |
v24 = v23 + 56; | |
do | |
{ | |
v25 = *(_DWORD *)(v24 - 20); | |
if ( v25 == 5 || v25 == 6 ) | |
{ | |
if ( *(_DWORD *)v24 != v43 ) | |
{ | |
v26 = *(_DWORD *)(v24 - 4); | |
if ( !v26 || v26 < hostlong ) | |
{ | |
--v21; | |
*(_DWORD *)v24 = v43; | |
v22 = 1; | |
v20 -= v26; | |
} | |
} | |
} | |
v24 += 364; | |
} | |
while ( v24 - 56 < (unsigned int)(*(_DWORD *)(v1 + 36) + 364 * *(_DWORD *)(v1 + 40)) ); | |
} | |
} | |
while ( v21 ); | |
} | |
} | |
else | |
{ | |
hostlong = 0; | |
} | |
v27 = *(_DWORD *)(v1 + 36); | |
if ( v27 < v27 + 364 * *(_DWORD *)(v1 + 40) ) | |
{ | |
v28 = v27 + 36; | |
do | |
{ | |
if ( *(_DWORD *)v28 == 5 || *(_DWORD *)v28 == 6 ) | |
{ | |
v29 = *(_DWORD *)(v1 + 16); | |
v40 = -118; | |
v42 = htonl(v29); | |
if ( *(_DWORD *)(v28 + 20) == v43 ) | |
v32 = *(_DWORD *)(v28 + 16); | |
else | |
v32 = hostlong; | |
v41 = htonl(v32); | |
v30 = off_43D298(84); | |
if ( !v30 ) | |
{ | |
off_43D2A0(); | |
JUMPOUT(*(int *)loc_42F383); | |
} | |
memcpy((void *)(v30 + 32), &v40, 0x30u); | |
*(_DWORD *)(v30 + 24) = 0; | |
*(_WORD *)(v30 + 28) = 0; | |
*(_DWORD *)(v30 + 80) = 0; | |
sub_42E0F0(v28 - 36, v30); | |
} | |
v28 += 364; | |
} | |
while ( v28 - 36 < (unsigned int)(*(_DWORD *)(v1 + 36) + 364 * *(_DWORD *)(v1 + 40)) ); | |
} | |
} | |
result = *(_DWORD *)(v1 + 36); | |
v31 = result + 364 * *(_DWORD *)(v1 + 40); | |
*(_DWORD *)(v1 + 20) = v43; | |
if ( result < (unsigned int)v31 ) | |
{ | |
result += 68; | |
do | |
{ | |
*(_DWORD *)(result - 4) = 0; | |
*(_DWORD *)result = 0; | |
result += 364; | |
} | |
while ( result - 68 < (unsigned int)(*(_DWORD *)(v1 + 36) + 364 * *(_DWORD *)(v1 + 40)) ); | |
} | |
} | |
} | |
} | |
return result; | |
} | |
// 42F383: using guessed type int __cdecl(int); | |
// 43D298: using guessed type int (__cdecl *off_43D298)(_DWORD); | |
// 43D2A0: using guessed type int (*off_43D2A0)(void); | |
// 4681C4: using guessed type int dword_4681C4; | |
//----- (0042F410) -------------------------------------------------------- | |
int __usercall sub_42F410<eax>(int a1<eax>, int a2, u_long hostlong) | |
{ | |
int v3; // edi@1 | |
int v4; // ebx@1 | |
int v5; // eax@1 | |
int result; // eax@5 | |
int v7; // esi@6 | |
int v8; // edx@9 | |
unsigned int v9; // eax@9 | |
unsigned int v10; // eax@12 | |
unsigned int v11; // eax@16 | |
int v12; // eax@17 | |
u_short v13; // ST00_2@19 | |
u_short v14; // ax@19 | |
char v15; // cl@19 | |
char v16; // dl@19 | |
u_long v17; // ST00_4@19 | |
u_long v18; // eax@19 | |
u_long v19; // ST00_4@19 | |
u_long v20; // eax@19 | |
u_long v21; // ST00_4@19 | |
u_long v22; // eax@19 | |
u_long v23; // ST00_4@19 | |
u_long v24; // eax@19 | |
u_long v25; // ST00_4@19 | |
u_long v26; // eax@19 | |
int v27; // ecx@19 | |
int v28; // eax@19 | |
__int16 v29; // [sp+10h] [bp-34h]@19 | |
u_short v30; // [sp+14h] [bp-30h]@19 | |
char v31; // [sp+16h] [bp-2Eh]@19 | |
char v32; // [sp+17h] [bp-2Dh]@19 | |
u_long v33; // [sp+18h] [bp-2Ch]@19 | |
u_long v34; // [sp+1Ch] [bp-28h]@19 | |
u_long v35; // [sp+20h] [bp-24h]@19 | |
u_long v36; // [sp+24h] [bp-20h]@19 | |
u_long v37; // [sp+28h] [bp-1Ch]@19 | |
u_long v38; // [sp+2Ch] [bp-18h]@19 | |
u_long v39; // [sp+30h] [bp-14h]@19 | |
u_long v40; // [sp+34h] [bp-10h]@19 | |
int v41; // [sp+38h] [bp-Ch]@19 | |
u_long v42; // [sp+3Ch] [bp-8h]@19 | |
v3 = a1; | |
v4 = *(_DWORD *)(a1 + 36); | |
v5 = v4 + 364 * *(_DWORD *)(a1 + 40); | |
if ( v4 >= (unsigned int)v5 ) | |
goto LABEL_25; | |
do | |
{ | |
if ( !*(_DWORD *)(v4 + 36) ) | |
break; | |
v4 += 364; | |
} | |
while ( v4 < (unsigned int)(*(_DWORD *)(v3 + 36) + 364 * *(_DWORD *)(v3 + 40)) ); | |
if ( v4 >= (unsigned int)v5 ) | |
goto LABEL_25; | |
v7 = off_43D298(56); | |
if ( !v7 ) | |
off_43D2A0(); | |
*(_DWORD *)(v4 + 40) = v7; | |
if ( v7 ) | |
{ | |
v8 = *(_DWORD *)a2; | |
*(_DWORD *)(v4 + 28) = *(_DWORD *)(a2 + 4); | |
*(_DWORD *)(v4 + 44) = 1; | |
*(_DWORD *)(v4 + 36) = 1; | |
*(_DWORD *)(v4 + 24) = v8; | |
++*(_DWORD *)(v3 + 28); | |
*(_DWORD *)(v4 + 16) = *(_DWORD *)(v3 + 28); | |
v9 = *(_DWORD *)(v3 + 16); | |
if ( v9 ) | |
*(_DWORD *)(v4 + 164) = v9 >> 16 << 12; | |
else | |
*(_DWORD *)(v4 + 164) = 32768; | |
v10 = *(_DWORD *)(v4 + 164); | |
if ( v10 >= 0x1000 ) | |
{ | |
if ( v10 > 0x8000 ) | |
*(_DWORD *)(v4 + 164) = 32768; | |
} | |
else | |
{ | |
*(_DWORD *)(v4 + 164) = 4096; | |
} | |
v11 = *(_DWORD *)(v4 + 40); | |
if ( v11 < v11 + 56 ) | |
{ | |
v12 = v11 + 52; | |
do | |
{ | |
*(_DWORD *)(v12 - 52) = 0; | |
*(_WORD *)(v12 - 14) = 0; | |
*(_DWORD *)(v12 - 8) = v12 - 12; | |
*(_DWORD *)(v12 - 12) = v12 - 12; | |
*(_DWORD *)v12 = v12 - 4; | |
*(_DWORD *)(v12 - 4) = v12 - 4; | |
*(_WORD *)(v12 - 48) = 0; | |
*(_DWORD *)(v12 - 46) = 0; | |
*(_DWORD *)(v12 - 42) = 0; | |
*(_DWORD *)(v12 - 38) = 0; | |
*(_DWORD *)(v12 - 34) = 0; | |
*(_DWORD *)(v12 - 30) = 0; | |
*(_DWORD *)(v12 - 26) = 0; | |
*(_DWORD *)(v12 - 22) = 0; | |
*(_DWORD *)(v12 - 18) = 0; | |
v12 += 56; | |
} | |
while ( v12 - 52 < (unsigned int)(*(_DWORD *)(v4 + 40) + 56) ); | |
} | |
v13 = *(_WORD *)(v4 + 14); | |
v29 = -126; | |
v14 = htons(v13); | |
v15 = *(_BYTE *)(v4 + 21); | |
v16 = *(_BYTE *)(v4 + 20); | |
v30 = v14; | |
v17 = *(_DWORD *)(v4 + 160); | |
v31 = v15; | |
v32 = v16; | |
v18 = htonl(v17); | |
v19 = *(_DWORD *)(v4 + 164); | |
v33 = v18; | |
v34 = htonl(v19); | |
v20 = htonl(1u); | |
v21 = *(_DWORD *)(v3 + 12); | |
v35 = v20; | |
v36 = htonl(v21); | |
v22 = htonl(*(_DWORD *)(v3 + 16)); | |
v23 = *(_DWORD *)(v4 + 132); | |
v37 = v22; | |
v24 = htonl(v23); | |
v25 = *(_DWORD *)(v4 + 124); | |
v38 = v24; | |
v39 = htonl(v25); | |
v26 = htonl(*(_DWORD *)(v4 + 128)); | |
v27 = *(_DWORD *)(v4 + 16); | |
v40 = v26; | |
v41 = v27; | |
v42 = htonl(hostlong); | |
v28 = off_43D298(84); | |
if ( !v28 ) | |
{ | |
off_43D2A0(); | |
JUMPOUT(*(int *)loc_42F5E6); | |
} | |
memcpy((void *)(v28 + 32), &v29, 0x30u); | |
*(_DWORD *)(v28 + 24) = 0; | |
*(_WORD *)(v28 + 28) = 0; | |
*(_DWORD *)(v28 + 80) = 0; | |
sub_42E0F0(v4, v28); | |
result = v4; | |
} | |
else | |
{ | |
LABEL_25: | |
result = 0; | |
} | |
return result; | |
} | |
// 42F5E6: using guessed type int __cdecl(int, u_long hostlong); | |
// 43D298: using guessed type int (__cdecl *off_43D298)(_DWORD); | |
// 43D2A0: using guessed type int (*off_43D2A0)(void); | |
//----- (0042F620) -------------------------------------------------------- | |
int __cdecl sub_42F620() | |
{ | |
void *v0; // ebp@1 | |
unsigned int v1; // eax@1 | |
int v2; // edi@2 | |
int v3; // eax@3 | |
int v4; // ecx@3 | |
void (__cdecl *v5)(_DWORD); // eax@5 | |
v0 = dword_2848704; | |
closesocket(*(_DWORD *)dword_2848704); | |
v1 = *((_DWORD *)v0 + 9); | |
if ( v1 < v1 + 364 * *((_DWORD *)v0 + 10) ) | |
{ | |
v2 = v1 + 16; | |
do | |
{ | |
*(_DWORD *)(v2 + 92) = 32; | |
*(_DWORD *)(v2 + 96) = 32; | |
*(_DWORD *)(v2 + 108) = 2; | |
*(_DWORD *)(v2 + 112) = 2; | |
*(_DWORD *)(v2 + 120) = 500; | |
*(_DWORD *)(v2 + 124) = 500; | |
*(_DWORD *)(v2 + 136) = 500; | |
v3 = *(_DWORD *)(v2 - 8); | |
*(_WORD *)(v2 - 4) = 4095; | |
*(_DWORD *)v2 = 0; | |
*(_DWORD *)(v2 + 20) = 0; | |
*(_DWORD *)(v2 + 32) = 0; | |
*(_DWORD *)(v2 + 36) = 0; | |
*(_DWORD *)(v2 + 40) = 0; | |
*(_DWORD *)(v2 + 44) = 0; | |
*(_DWORD *)(v2 + 48) = 0; | |
*(_DWORD *)(v2 + 52) = 0; | |
*(_DWORD *)(v2 + 56) = 0; | |
*(_DWORD *)(v2 + 60) = 0; | |
*(_DWORD *)(v2 + 64) = 0; | |
*(_DWORD *)(v2 + 68) = 0; | |
*(_DWORD *)(v2 + 72) = 0; | |
*(_DWORD *)(v2 + 76) = 0; | |
*(_DWORD *)(v2 + 80) = 0; | |
*(_DWORD *)(v2 + 84) = 0; | |
*(_DWORD *)(v2 + 88) = 0; | |
*(_DWORD *)(v2 + 100) = 0; | |
*(_DWORD *)(v2 + 104) = 0; | |
*(_DWORD *)(v2 + 116) = 5000; | |
*(_DWORD *)(v2 + 128) = 0; | |
*(_DWORD *)(v2 + 132) = 0; | |
*(_DWORD *)(v2 + 140) = 0; | |
v4 = *(_DWORD *)(v3 + 24); | |
*(_WORD *)(v2 + 156) = 0; | |
*(_DWORD *)(v2 + 144) = v4; | |
*(_DWORD *)(v2 + 152) = 0; | |
*(_DWORD *)(v2 + 148) = 32768; | |
*(_DWORD *)(v2 + 212) = 0; | |
*(_DWORD *)(v2 + 344) = 0; | |
memset((void *)(v2 + 216), 0, 0x80u); | |
sub_42EA80(v2 - 16); | |
v2 += 364; | |
} | |
while ( v2 - 16 < (unsigned int)(*((_DWORD *)v0 + 9) + 364 * *((_DWORD *)v0 + 10)) ); | |
} | |
if ( *((_DWORD *)v0 + 535) ) | |
{ | |
v5 = (void (__cdecl *)(_DWORD))*((_DWORD *)v0 + 538); | |
if ( v5 ) | |
v5(*((_DWORD *)v0 + 535)); | |
} | |
off_43D29C(*((_DWORD *)v0 + 9)); | |
return off_43D29C(v0); | |
} | |
// 43D29C: using guessed type int (__cdecl *off_43D29C)(_DWORD); | |
//----- (0042F780) -------------------------------------------------------- | |
int __cdecl sub_42F780(int a1) | |
{ | |
int v1; // edi@1 | |
void *v2; // ebx@4 | |
SOCKET v3; // eax@7 | |
int v4; // eax@8 | |
unsigned int v5; // eax@8 | |
int v6; // esi@9 | |
int v7; // ecx@10 | |
v1 = off_43D298(10380); | |
if ( !v1 ) | |
{ | |
off_43D2A0(); | |
JUMPOUT(*(int *)loc_42F7A0); | |
} | |
v2 = (void *)off_43D298(364 * a1); | |
if ( !v2 ) | |
off_43D2A0(); | |
*(_DWORD *)(v1 + 36) = v2; | |
if ( !v2 ) | |
goto LABEL_13; | |
memset(v2, 0, 364 * a1); | |
v3 = socket(2, 2, 0); | |
*(_DWORD *)v1 = v3; | |
if ( v3 == -1 ) | |
{ | |
off_43D29C(*(_DWORD *)(v1 + 36)); | |
LABEL_13: | |
off_43D29C(v1); | |
return 0; | |
} | |
sub_42BA70(v3, 0, 1); | |
sub_42BA70(*(_DWORD *)v1, 1, 1); | |
sub_42BA70(*(_DWORD *)v1, 2, 262144); | |
sub_42BA70(*(_DWORD *)v1, 3, 262144); | |
v4 = __ROL__(v1 + (unsigned __int64)_time64(0), 16); | |
*(_DWORD *)(v1 + 28) = v4; | |
*(_DWORD *)(v1 + 40) = a1; | |
*(_DWORD *)(v1 + 44) = 1; | |
*(_DWORD *)(v1 + 12) = 0; | |
*(_DWORD *)(v1 + 16) = 0; | |
*(_DWORD *)(v1 + 20) = 0; | |
*(_DWORD *)(v1 + 32) = 0; | |
*(_DWORD *)(v1 + 24) = 1400; | |
*(_DWORD *)(v1 + 1608) = 0; | |
*(_DWORD *)(v1 + 2132) = 0; | |
*(_DWORD *)(v1 + 2136) = 0; | |
*(_DWORD *)(v1 + 10348) = 0; | |
*(_WORD *)(v1 + 10352) = 0; | |
*(_DWORD *)(v1 + 10356) = 0; | |
*(_DWORD *)(v1 + 10360) = 0; | |
*(_DWORD *)(v1 + 10364) = 0; | |
*(_DWORD *)(v1 + 10368) = 0; | |
*(_DWORD *)(v1 + 10372) = 0; | |
*(_DWORD *)(v1 + 10376) = 0; | |
*(_DWORD *)(v1 + 2140) = 0; | |
*(_DWORD *)(v1 + 2144) = 0; | |
*(_DWORD *)(v1 + 2148) = 0; | |
*(_DWORD *)(v1 + 2152) = 0; | |
*(_DWORD *)(v1 + 52) = v1 + 52; | |
*(_DWORD *)(v1 + 56) = v1 + 52; | |
v5 = *(_DWORD *)(v1 + 36); | |
if ( v5 < v5 + 364 * *(_DWORD *)(v1 + 40) ) | |
{ | |
v6 = v5 + 188; | |
do | |
{ | |
*(_DWORD *)(v6 - 180) = v1; | |
v7 = v6 - 188 - *(_DWORD *)(v1 + 36); | |
*(_WORD *)(v6 - 168) = -1; | |
*(_DWORD *)(v6 - 156) = 0; | |
*(_WORD *)(v6 - 174) = (signed __int16)v7 / 364; | |
*(_DWORD *)(v6 - 12) = v6 - 12; | |
*(_DWORD *)(v6 - 8) = v6 - 12; | |
*(_DWORD *)(v6 - 4) = v6 - 4; | |
*(_DWORD *)v6 = v6 - 4; | |
*(_DWORD *)(v6 + 4) = v6 + 4; | |
*(_DWORD *)(v6 + 8) = v6 + 4; | |
*(_DWORD *)(v6 + 12) = v6 + 12; | |
*(_DWORD *)(v6 + 16) = v6 + 12; | |
*(_DWORD *)(v6 + 20) = v6 + 20; | |
*(_DWORD *)(v6 + 24) = v6 + 20; | |
*(_DWORD *)(v6 + 28) = v6 + 28; | |
*(_DWORD *)(v6 + 32) = v6 + 28; | |
sub_42EB80(v6 - 188); | |
v6 += 364; | |
} | |
while ( v6 - 188 < (unsigned int)(*(_DWORD *)(v1 + 36) + 364 * *(_DWORD *)(v1 + 40)) ); | |
} | |
return v1; | |
} | |
// 42F7A0: using guessed type int __cdecl(int); | |
// 43D298: using guessed type int (__cdecl *off_43D298)(_DWORD); | |
// 43D29C: using guessed type int (__cdecl *off_43D29C)(_DWORD); | |
// 43D2A0: using guessed type int (*off_43D2A0)(void); | |
//----- (0042F9B0) -------------------------------------------------------- | |
__int16 __cdecl sub_42F9B0(int a1) | |
{ | |
int v1; // esi@1 | |
__int16 v2; // di@1 | |
unsigned __int8 v3; // al@2 | |
__int16 v4; // dx@2 | |
int v5; // eax@2 | |
int v6; // eax@4 | |
v1 = a1; | |
v2 = 0; | |
while ( 1 ) | |
{ | |
v3 = *(_BYTE *)(v1 + 1) - (*(_BYTE *)(v1 + 1) >> 1); | |
v4 = v3; | |
*(_BYTE *)(v1 + 1) = v3; | |
v5 = *(_WORD *)(v1 + 4); | |
*(_WORD *)(v1 + 2) = v4; | |
if ( (_WORD)v5 ) | |
*(_WORD *)(v1 + 2) += sub_42F9B0(v1 + 16 * v5); | |
v6 = *(_WORD *)(v1 + 6); | |
v2 += *(_WORD *)(v1 + 2); | |
if ( !(_WORD)v6 ) | |
break; | |
v1 += 16 * v6; | |
} | |
return v2; | |
} | |
//----- (0042FA10) -------------------------------------------------------- | |
int __cdecl sub_42FA10(int a1, int a2, unsigned int a3, unsigned int a4, int a5) | |
{ | |
unsigned int v5; // esi@1 | |
int v6; // edx@1 | |
int v7; // edi@1 | |
int v8; // eax@4 | |
int v9; // ecx@4 | |
int v10; // esi@5 | |
int v11; // eax@5 | |
int v12; // ecx@5 | |
int v13; // esi@6 | |
int v14; // eax@6 | |
int v15; // ecx@6 | |
int v16; // ebx@8 | |
int v17; // esi@8 | |
int v18; // eax@8 | |
int v19; // ecx@9 | |
unsigned int v20; // eax@10 | |
__int64 v21; // qax@11 | |
int v22; // ebp@11 | |
unsigned __int64 v23; // qtt@11 | |
unsigned __int16 v24; // bx@11 | |
unsigned int v25; // eax@12 | |
int v26; // eax@21 | |
int v27; // eax@22 | |
unsigned __int8 v28; // bl@23 | |
unsigned __int16 v29; // di@23 | |
int v30; // eax@23 | |
int v31; // edx@23 | |
int v32; // ecx@24 | |
int v33; // eax@24 | |
unsigned __int16 v34; // bx@24 | |
int v35; // eax@25 | |
__int16 v36; // dx@27 | |
int v37; // esi@27 | |
int v38; // edi@27 | |
int v39; // ecx@28 | |
int v40; // ecx@31 | |
unsigned __int8 v41; // cl@33 | |
unsigned __int16 v42; // dx@33 | |
unsigned __int16 v43; // di@33 | |
int v44; // esi@33 | |
int v45; // eax@33 | |
unsigned int v46; // ecx@33 | |
int v47; // eax@43 | |
__int16 v48; // cx@44 | |
__int16 v49; // ax@46 | |
int i; // ecx@47 | |
int v51; // edi@48 | |
int v52; // eax@48 | |
unsigned __int16 v53; // dx@48 | |
int v54; // edx@49 | |
int v55; // edi@52 | |
char v56; // bl@54 | |
signed int v57; // eax@54 | |
signed int v58; // eax@55 | |
unsigned __int8 v59; // dl@56 | |
unsigned __int16 v60; // ax@56 | |
int v61; // eax@57 | |
unsigned int v62; // ecx@57 | |
int v63; // edx@57 | |
unsigned __int16 v64; // cx@64 | |
int v65; // eax@66 | |
__int16 v66; // cx@67 | |
__int16 v67; // ax@69 | |
int v68; // esi@70 | |
int v69; // ebp@71 | |
int v70; // eax@72 | |
int v71; // eax@73 | |
signed int v72; // edx@73 | |
int j; // ecx@74 | |
int v74; // eax@76 | |
int v75; // eax@79 | |
signed int v76; // edx@81 | |
signed int v77; // edx@82 | |
unsigned __int8 v78; // al@83 | |
int v79; // edx@84 | |
int v80; // eax@88 | |
__int16 v81; // cx@89 | |
__int16 v82; // ax@91 | |
int v83; // eax@99 | |
unsigned int v84; // ecx@99 | |
signed int v86; // [sp+Ch] [bp-38h]@3 | |
int v87; // [sp+10h] [bp-34h]@1 | |
int v88; // [sp+10h] [bp-34h]@24 | |
int v89; // [sp+14h] [bp-30h]@8 | |
int v90; // [sp+18h] [bp-2Ch]@22 | |
__int16 v91; // [sp+18h] [bp-2Ch]@24 | |
signed __int16 v92; // [sp+1Ch] [bp-28h]@22 | |
unsigned __int16 v93; // [sp+1Ch] [bp-28h]@72 | |
int v94; // [sp+20h] [bp-24h]@1 | |
unsigned int v95; // [sp+24h] [bp-20h]@1 | |
unsigned int v96; // [sp+28h] [bp-1Ch]@1 | |
int v97; // [sp+2Ch] [bp-18h]@8 | |
int v98; // [sp+30h] [bp-14h]@48 | |
unsigned int v99; // [sp+34h] [bp-10h]@21 | |
int v100; // [sp+38h] [bp-Ch]@8 | |
unsigned int v101; // [sp+3Ch] [bp-8h]@1 | |
unsigned int v102; // [sp+40h] [bp-4h]@1 | |
int v103; // [sp+50h] [bp+Ch]@1 | |
unsigned int v104; // [sp+58h] [bp+14h]@21 | |
int v105; // [sp+58h] [bp+14h]@22 | |
unsigned __int16 v106; // [sp+58h] [bp+14h]@24 | |
int v107; // [sp+58h] [bp+14h]@33 | |
v102 = a4; | |
v5 = a3; | |
v101 = a5 + a4; | |
v6 = a2 + a3; | |
v7 = -1; | |
v96 = a2 + a3; | |
v87 = 0; | |
v103 = 0; | |
v94 = 0; | |
v95 = 0; | |
if ( !a1 || v5 <= 0 ) | |
return 0; | |
*(_WORD *)(a1 + 4) = 0; | |
*(_WORD *)(a1 + 6) = 0; | |
*(_WORD *)(a1 + 14) = 0; | |
*(_WORD *)(a1 + 10) = 1; | |
*(_WORD *)(a1 + 12) = 257; | |
v86 = 1; | |
*(_DWORD *)a1 = 0; | |
*(_WORD *)(a1 + 8) = 0; | |
if ( a2 < (unsigned int)v6 ) | |
{ | |
v8 = a2 + 1; | |
v9 = *(_BYTE *)a2 << 24; | |
v103 = *(_BYTE *)a2 << 24; | |
a2 = v8; | |
if ( v8 < (unsigned int)v6 ) | |
{ | |
v10 = *(_BYTE *)v8 << 16; | |
v11 = v8 + 1; | |
v12 = v10 | v9; | |
v103 = v12; | |
a2 = v11; | |
if ( v11 < (unsigned int)v6 ) | |
{ | |
v13 = *(_BYTE *)v11 << 8; | |
v14 = v11 + 1; | |
v15 = v13 | v12; | |
v103 = v15; | |
a2 = v14; | |
if ( v14 < (unsigned int)v6 ) | |
{ | |
v103 = *(_BYTE *)v14 | v15; | |
a2 = v14 + 1; | |
} | |
} | |
} | |
} | |
while ( 2 ) | |
{ | |
v16 = a1; | |
v17 = v87; | |
v97 = (int)&v94; | |
v18 = a1 + 16 * (unsigned __int16)v94; | |
v100 = v18; | |
v89 = a1 + 16 * (unsigned __int16)v94; | |
if ( v18 == a1 ) | |
{ | |
LABEL_21: | |
v99 = v7 / (unsigned int)*(_WORD *)(v16 + 12); | |
v26 = *(_WORD *)(v16 + 10); | |
v104 = (v103 - v17) / v99; | |
if ( (unsigned __int16)v104 >= (unsigned __int16)v26 ) | |
{ | |
v105 = v104 - v26; | |
v27 = *(_WORD *)(v16 + 8); | |
v90 = 0; | |
v92 = 1; | |
if ( (_WORD)v27 ) | |
{ | |
for ( i = v16 + 16 * v27; ; i += 16 * v54 ) | |
{ | |
while ( 1 ) | |
{ | |
v51 = *(_WORD *)(i + 2); | |
v52 = (unsigned __int16)((_WORD)v90 + v51 + *(_BYTE *)i + 1); | |
v53 = *(_BYTE *)(i + 1) + 1; | |
v98 = (unsigned __int16)(*(_BYTE *)(i + 1) + 1); | |
if ( (unsigned __int16)v105 >= (unsigned __int16)v52 ) | |
break; | |
if ( (unsigned __int16)v105 >= v52 - v53 ) | |
{ | |
v59 = *(_BYTE *)(i + 1); | |
v60 = v52 - v98; | |
*(_WORD *)(i + 2) += 3; | |
v28 = *(_BYTE *)i; | |
v29 = v60; | |
*(_BYTE *)(i + 1) += 3; | |
v92 = v59 + 1; | |
v30 = i; | |
goto LABEL_57; | |
} | |
*(_WORD *)(i + 2) = v51 + 3; | |
v55 = *(_WORD *)(i + 4); | |
if ( !(_WORD)v55 ) | |
{ | |
v28 = v105 + (_BYTE)v53 + *(_BYTE *)i - v52; | |
v58 = v86++; | |
v30 = a1 + 16 * v58; | |
*(_WORD *)(v30 + 2) = 3; | |
*(_WORD *)(v30 + 4) = 0; | |
*(_WORD *)(v30 + 6) = 0; | |
*(_WORD *)(v30 + 8) = 0; | |
*(_WORD *)(v30 + 10) = 0; | |
*(_WORD *)(v30 + 12) = 0; | |
*(_WORD *)(v30 + 14) = 0; | |
*(_BYTE *)v30 = v28; | |
*(_BYTE *)(v30 + 1) = 3; | |
v29 = v105; | |
*(_WORD *)(i + 4) = (v30 - i) >> 4; | |
goto LABEL_57; | |
} | |
i += 16 * v55; | |
} | |
v54 = *(_WORD *)(i + 6); | |
v90 += v51; | |
if ( !(_WORD)v54 ) | |
break; | |
} | |
v56 = v105 + *(_BYTE *)i - v52; | |
v57 = v86++; | |
v30 = a1 + 16 * v57; | |
*(_WORD *)(v30 + 2) = 3; | |
*(_WORD *)(v30 + 4) = 0; | |
*(_WORD *)(v30 + 6) = 0; | |
*(_WORD *)(v30 + 8) = 0; | |
*(_WORD *)(v30 + 10) = 0; | |
*(_WORD *)(v30 + 12) = 0; | |
*(_WORD *)(v30 + 14) = 0; | |
v28 = v56 + 1; | |
*(_BYTE *)v30 = v28; | |
*(_BYTE *)(v30 + 1) = 3; | |
v29 = v105; | |
*(_WORD *)(i + 6) = (v30 - i) >> 4; | |
} | |
else | |
{ | |
v28 = v105; | |
v29 = v105; | |
v30 = a1 + 16 * v86; | |
v31 = a1 + 16 * v86++; | |
*(_BYTE *)v30 = v105; | |
*(_BYTE *)(v30 + 1) = 3; | |
*(_DWORD *)(v30 + 2) = 3; | |
*(_DWORD *)(v30 + 6) = 0; | |
*(_DWORD *)(v30 + 10) = 0; | |
*(_WORD *)(v30 + 14) = 0; | |
*(_WORD *)(a1 + 8) = (v31 - a1) >> 4; | |
} | |
LABEL_57: | |
v107 = (unsigned __int16)((v30 - a1) >> 4); | |
v61 = v99 * (v29 + *(_WORD *)(a1 + 10)) + v87; | |
v7 = v99 * (unsigned __int16)v92; | |
v62 = a2; | |
v63 = v103; | |
while ( 1 ) | |
{ | |
if ( (v61 ^ (unsigned int)(v7 + v61)) >= (unsigned int)&unk_1000000 ) | |
{ | |
if ( (unsigned int)v7 >= 0x10000 ) | |
{ | |
v87 = v61; | |
v103 = v63; | |
a2 = v62; | |
v64 = *(_WORD *)(a1 + 12) + 3; | |
*(_WORD *)(a1 + 12) = v64; | |
if ( (unsigned __int16)v92 > 0xFAu || v64 > 0xFF00u ) | |
{ | |
v65 = *(_WORD *)(a1 + 8); | |
if ( (_WORD)v65 ) | |
v66 = sub_42F9B0(a1 + 16 * v65); | |
else | |
v66 = 0; | |
v67 = *(_WORD *)(a1 + 10) - (*(_WORD *)(a1 + 10) >> 1); | |
*(_WORD *)(a1 + 10) = v67; | |
*(_WORD *)(a1 + 12) = v67 + v66 + 256; | |
} | |
goto LABEL_70; | |
} | |
v7 = -v61 & 0xFFFF; | |
} | |
v63 <<= 8; | |
if ( v62 < v96 ) | |
v63 |= *(_BYTE *)v62++; | |
v7 <<= 8; | |
v61 <<= 8; | |
} | |
} | |
v83 = v99 * *(_WORD *)(v16 + 10); | |
v84 = a2; | |
while ( 1 ) | |
{ | |
if ( (v17 ^ (unsigned int)(v83 + v17)) >= (unsigned int)&unk_1000000 ) | |
{ | |
if ( (unsigned int)v83 >= 0x10000 ) | |
return a4 - v102; | |
v83 = -v17 & 0xFFFF; | |
} | |
if ( v84 < v96 ) | |
++v84; | |
v83 <<= 8; | |
v17 <<= 8; | |
} | |
} | |
while ( 1 ) | |
{ | |
v19 = *(_WORD *)(v18 + 10); | |
if ( (_WORD)v19 ) | |
{ | |
v20 = *(_WORD *)(v18 + 12); | |
if ( (unsigned __int16)v19 < (unsigned __int16)v20 ) | |
break; | |
} | |
LABEL_19: | |
v16 = a1; | |
v18 = a1 + 16 * *(_WORD *)(v89 + 14); | |
v89 = v18; | |
if ( v18 == a1 ) | |
{ | |
v87 = v17; | |
goto LABEL_21; | |
} | |
} | |
v21 = v7 / v20; | |
v22 = v21; | |
LODWORD(v23) = v103 - v17; | |
HIDWORD(v23) = HIDWORD(v21); | |
v24 = v23 / (unsigned int)v21; | |
if ( v24 < (unsigned __int16)v19 ) | |
{ | |
v25 = a2; | |
v7 = v22 * v19; | |
while ( 1 ) | |
{ | |
if ( (v17 ^ (unsigned int)(v7 + v17)) >= (unsigned int)&unk_1000000 ) | |
{ | |
if ( (unsigned int)v7 >= 0x10000 ) | |
goto LABEL_19; | |
v25 = a2; | |
v7 = -v17 & 0xFFFF; | |
} | |
v103 <<= 8; | |
if ( v25 < v96 ) | |
{ | |
v103 |= *(_BYTE *)v25++; | |
a2 = v25; | |
} | |
v7 <<= 8; | |
v17 <<= 8; | |
} | |
} | |
v32 = v89; | |
v33 = *(_WORD *)(v89 + 8); | |
v34 = v24 - *(_WORD *)(v89 + 10); | |
v88 = v17; | |
v106 = v34; | |
v91 = 0; | |
if ( !(_WORD)v33 ) | |
return 0; | |
v35 = 16 * v33; | |
LABEL_26: | |
for ( v35 += v32; ; v35 += 16 * v40 ) | |
{ | |
v36 = *(_WORD *)(v35 + 2); | |
v37 = *(_BYTE *)(v35 + 1); | |
v38 = (unsigned __int16)(v36 + v91); | |
if ( v34 >= (unsigned __int16)v38 ) | |
{ | |
v39 = *(_WORD *)(v35 + 6); | |
v91 += v36; | |
if ( !(_WORD)v39 ) | |
return 0; | |
v32 = 16 * v39; | |
goto LABEL_26; | |
} | |
if ( v106 >= v38 - v37 ) | |
break; | |
v40 = *(_WORD *)(v35 + 4); | |
*(_WORD *)(v35 + 2) = v36 + 2; | |
if ( !(_WORD)v40 ) | |
return 0; | |
v34 = v106; | |
} | |
v41 = *(_BYTE *)(v35 + 1); | |
*(_WORD *)(v35 + 2) += 2; | |
v28 = *(_BYTE *)v35; | |
v42 = v41; | |
*(_BYTE *)(v35 + 1) = v41 + 2; | |
v43 = v38 - v37; | |
v44 = v89; | |
v107 = (unsigned __int16)((v35 - a1) >> 4); | |
v45 = v22 * (*(_WORD *)(v89 + 10) + v43) + v88; | |
v7 = v22 * v41; | |
v46 = a2; | |
while ( 1 ) | |
{ | |
if ( (v45 ^ (unsigned int)(v7 + v45)) < (unsigned int)&unk_1000000 ) | |
goto LABEL_37; | |
if ( (unsigned int)v7 >= 0x10000 ) | |
break; | |
v7 = -v45 & 0xFFFF; | |
LABEL_37: | |
v103 <<= 8; | |
if ( v46 < v96 ) | |
{ | |
v103 |= *(_BYTE *)v46; | |
v44 = v89; | |
++v46; | |
} | |
v7 <<= 8; | |
v45 <<= 8; | |
} | |
*(_WORD *)(v44 + 12) += 2; | |
a2 = v46; | |
v87 = v45; | |
if ( v42 <= 0xFBu ) | |
{ | |
if ( *(_WORD *)(v44 + 12) <= 0xFF00u ) | |
goto LABEL_70; | |
v44 = v89; | |
} | |
v47 = *(_WORD *)(v44 + 8); | |
if ( (_WORD)v47 ) | |
v48 = sub_42F9B0(v89 + 16 * v47); | |
else | |
v48 = 0; | |
v49 = *(_WORD *)(v89 + 10) - (*(_WORD *)(v89 + 10) >> 1); | |
*(_WORD *)(v89 + 10) = v49; | |
*(_WORD *)(v89 + 12) = v49 + v48; | |
LABEL_70: | |
v68 = v100; | |
if ( v100 != v89 ) | |
{ | |
v69 = a1 + 16 * v86; | |
do | |
{ | |
v70 = *(_WORD *)(v68 + 8); | |
v93 = 0; | |
if ( (_WORD)v70 ) | |
{ | |
for ( j = v68 + 16 * v70; ; j += 16 * v75 ) | |
{ | |
while ( v28 < *(_BYTE *)j ) | |
{ | |
v74 = *(_WORD *)(j + 4); | |
*(_WORD *)(j + 2) += 2; | |
if ( !(_WORD)v74 ) | |
{ | |
++v86; | |
v71 = v69; | |
*(_BYTE *)(v69 + 1) = 2; | |
*(_WORD *)(v69 + 2) = 2; | |
*(_WORD *)(v69 + 4) = 0; | |
*(_WORD *)(v69 + 6) = 0; | |
*(_WORD *)(v69 + 8) = 0; | |
*(_WORD *)(v69 + 10) = 0; | |
*(_WORD *)(v69 + 12) = 0; | |
*(_WORD *)(v69 + 14) = 0; | |
v76 = v69 - j; | |
v69 += 16; | |
*(_BYTE *)v71 = v28; | |
*(_WORD *)(j + 4) = v76 >> 4; | |
goto LABEL_84; | |
} | |
j += 16 * v74; | |
} | |
if ( v28 <= *(_BYTE *)j ) | |
break; | |
v75 = *(_WORD *)(j + 6); | |
if ( !(_WORD)v75 ) | |
{ | |
++v86; | |
v71 = v69; | |
*(_BYTE *)(v69 + 1) = 2; | |
*(_WORD *)(v69 + 2) = 2; | |
*(_WORD *)(v69 + 4) = 0; | |
*(_WORD *)(v69 + 6) = 0; | |
*(_WORD *)(v69 + 8) = 0; | |
*(_WORD *)(v69 + 10) = 0; | |
*(_WORD *)(v69 + 12) = 0; | |
*(_WORD *)(v69 + 14) = 0; | |
v77 = v69 - j; | |
v69 += 16; | |
*(_BYTE *)v71 = v28; | |
*(_WORD *)(j + 6) = v77 >> 4; | |
goto LABEL_84; | |
} | |
} | |
v78 = *(_BYTE *)(j + 1); | |
*(_WORD *)(j + 2) += 2; | |
*(_BYTE *)(j + 1) = v78 + 2; | |
v93 = v78; | |
v71 = j; | |
} | |
else | |
{ | |
++v86; | |
v71 = v69; | |
v72 = v69 - v68; | |
v69 += 16; | |
*(_BYTE *)v71 = v28; | |
*(_BYTE *)(v71 + 1) = 2; | |
*(_DWORD *)(v71 + 2) = 2; | |
*(_DWORD *)(v71 + 6) = 0; | |
*(_DWORD *)(v71 + 10) = 0; | |
*(_WORD *)(v71 + 14) = 0; | |
*(_WORD *)(v68 + 8) = v72 >> 4; | |
} | |
LABEL_84: | |
v79 = v97; | |
v97 = v71 + 14; | |
*(_WORD *)v79 = (v71 - a1) >> 4; | |
if ( !v93 ) | |
{ | |
*(_WORD *)(v68 + 10) += 5; | |
*(_WORD *)(v68 + 12) += 5; | |
} | |
*(_WORD *)(v68 + 12) += 2; | |
if ( v93 > 0xFBu || *(_WORD *)(v68 + 12) > 0xFF00u ) | |
{ | |
v80 = *(_WORD *)(v68 + 8); | |
if ( (_WORD)v80 ) | |
v81 = sub_42F9B0(v68 + 16 * v80); | |
else | |
v81 = 0; | |
v82 = *(_WORD *)(v68 + 10) - (*(_WORD *)(v68 + 10) >> 1); | |
*(_WORD *)(v68 + 10) = v82; | |
*(_WORD *)(v68 + 12) = v82 + v81; | |
} | |
v68 = a1 + 16 * *(_WORD *)(v68 + 14); | |
} | |
while ( v68 != v89 ); | |
} | |
*(_WORD *)v97 = v107; | |
if ( a4 < v101 ) | |
{ | |
*(_BYTE *)a4++ = v28; | |
if ( v95 < 2 ) | |
++v95; | |
else | |
v94 = *(_WORD *)(a1 + 16 * (unsigned __int16)v94 + 14); | |
if ( (unsigned int)v86 >= 0xFFE ) | |
{ | |
*(_DWORD *)a1 = 0; | |
*(_DWORD *)(a1 + 4) = 0; | |
*(_WORD *)(a1 + 14) = 0; | |
*(_DWORD *)(a1 + 10) = &unk_1010001; | |
*(_WORD *)(a1 + 8) = 0; | |
v86 = 1; | |
v94 = 0; | |
v95 = 0; | |
} | |
continue; | |
} | |
return 0; | |
} | |
} | |
//----- (00430290) -------------------------------------------------------- | |
int __cdecl sub_430290(int a1, int a2, unsigned int a3, unsigned int a4, unsigned int a5, int a6) | |
{ | |
unsigned int v6; // eax@1 | |
int v7; // ebp@1 | |
int v8; // ebx@1 | |
int v9; // edi@1 | |
unsigned int v10; // esi@4 | |
int v11; // ecx@4 | |
int v12; // eax@8 | |
unsigned __int8 v13; // dl@9 | |
int v14; // esi@9 | |
int v15; // ecx@10 | |
int v16; // eax@12 | |
int v17; // eax@13 | |
int k; // ecx@14 | |
int v19; // eax@16 | |
int v20; // eax@19 | |
unsigned __int8 v21; // al@23 | |
int v22; // ebp@23 | |
unsigned __int16 v23; // cx@24 | |
unsigned int v24; // eax@24 | |
int v25; // eax@25 | |
int v26; // ecx@31 | |
int v27; // eax@42 | |
__int16 v28; // cx@43 | |
__int16 v29; // ax@45 | |
__int16 v30; // ax@45 | |
int v31; // eax@48 | |
signed int v32; // eax@49 | |
int v33; // eax@49 | |
__int16 v34; // si@50 | |
int i; // ecx@50 | |
int v36; // eax@52 | |
int v37; // eax@55 | |
unsigned __int8 v38; // al@59 | |
__int16 v39; // si@59 | |
unsigned int v40; // eax@60 | |
unsigned __int16 v41; // cx@66 | |
int v42; // eax@68 | |
__int16 v43; // cx@69 | |
__int16 v44; // ax@71 | |
int v45; // esi@78 | |
signed int v47; // [sp+Ch] [bp-30h]@4 | |
int v48; // [sp+10h] [bp-2Ch]@12 | |
int v49; // [sp+10h] [bp-2Ch]@48 | |
int j; // [sp+14h] [bp-28h]@10 | |
unsigned __int16 v51; // [sp+18h] [bp-24h]@12 | |
signed __int16 v52; // [sp+18h] [bp-24h]@48 | |
int v53; // [sp+1Ch] [bp-20h]@1 | |
int v54; // [sp+20h] [bp-1Ch]@1 | |
unsigned int v55; // [sp+24h] [bp-18h]@4 | |
unsigned int v56; // [sp+28h] [bp-14h]@1 | |
int v57; // [sp+2Ch] [bp-10h]@1 | |
int v58; // [sp+30h] [bp-Ch]@6 | |
int v59; // [sp+34h] [bp-8h]@4 | |
unsigned int v60; // [sp+38h] [bp-4h]@1 | |
int v61; // [sp+44h] [bp+8h]@4 | |
int v62; // [sp+48h] [bp+Ch]@4 | |
unsigned __int8 v63; // [sp+54h] [bp+18h]@9 | |
v6 = a5; | |
v7 = a1; | |
v8 = 0; | |
v9 = -1; | |
v60 = a5; | |
v57 = a5 + a6; | |
v53 = 0; | |
v54 = 0; | |
v56 = 0; | |
if ( a1 && a3 > 0 && a4 > 0 ) | |
{ | |
v10 = *(_DWORD *)(a2 + 4); | |
v59 = v10 + *(_DWORD *)a2; | |
v62 = a3 - 1; | |
v55 = v10; | |
v11 = a2 + 8; | |
v47 = 1; | |
*(_WORD *)(a1 + 10) = 1; | |
v61 = a2 + 8; | |
*(_DWORD *)a1 = 0; | |
*(_WORD *)(a1 + 4) = 0; | |
*(_WORD *)(a1 + 6) = 0; | |
*(_DWORD *)(a1 + 12) = 257; | |
*(_WORD *)(a1 + 8) = 0; | |
LABEL_6: | |
v58 = (int)&v54; | |
if ( v55 >= v59 ) | |
{ | |
if ( !v62 ) | |
{ | |
if ( !v8 ) | |
return v6 - v60; | |
v45 = v57; | |
while ( v6 < v45 ) | |
{ | |
*(_BYTE *)v6 = BYTE3(v8); | |
v8 <<= 8; | |
++v6; | |
if ( !v8 ) | |
return v6 - v60; | |
} | |
return 0; | |
} | |
v12 = *(_DWORD *)(v11 + 4) + *(_DWORD *)v11; | |
--v62; | |
v55 = *(_DWORD *)(v11 + 4); | |
v59 = v12; | |
v61 = v11 + 8; | |
} | |
v13 = *(_BYTE *)v55; | |
v14 = v7 + 16 * (unsigned __int16)v54; | |
v63 = *(_BYTE *)v55++; | |
if ( v14 == v7 ) | |
{ | |
LABEL_48: | |
v31 = *(_WORD *)(v7 + 8); | |
v49 = v13; | |
v52 = 1; | |
if ( (_WORD)v31 ) | |
{ | |
v34 = v13; | |
for ( i = v7 + 16 * v31; ; i += 16 * v36 ) | |
{ | |
while ( v13 >= *(_BYTE *)i ) | |
{ | |
if ( v13 <= *(_BYTE *)i ) | |
{ | |
v38 = *(_BYTE *)(i + 1); | |
v52 = v38 + 1; | |
v39 = *(_WORD *)(i + 2); | |
v49 += *(_WORD *)(i + 2) - v38; | |
v8 = v53; | |
*(_BYTE *)(i + 1) = v38 + 3; | |
*(_WORD *)(i + 2) = v39 + 3; | |
v33 = i; | |
goto LABEL_60; | |
} | |
v37 = *(_WORD *)(i + 6); | |
v34 += *(_WORD *)(i + 2); | |
LOWORD(v49) = v34; | |
if ( !(_WORD)v37 ) | |
{ | |
v33 = v7 + 16 * v47; | |
*(_BYTE *)v33 = v13; | |
*(_WORD *)(v33 + 2) = 3; | |
*(_WORD *)(v33 + 4) = 0; | |
*(_WORD *)(v33 + 6) = 0; | |
*(_WORD *)(v33 + 8) = 0; | |
*(_WORD *)(v33 + 10) = 0; | |
*(_WORD *)(v33 + 12) = 0; | |
*(_WORD *)(v33 + 14) = 0; | |
*(_BYTE *)(v33 + 1) = 3; | |
++v47; | |
*(_WORD *)(i + 6) = (v33 - i) >> 4; | |
goto LABEL_60; | |
} | |
i += 16 * v37; | |
} | |
v36 = *(_WORD *)(i + 4); | |
*(_WORD *)(i + 2) += 3; | |
if ( !(_WORD)v36 ) | |
break; | |
} | |
v33 = v7 + 16 * v47; | |
*(_BYTE *)v33 = v13; | |
*(_WORD *)(v33 + 2) = 3; | |
*(_WORD *)(v33 + 4) = 0; | |
*(_WORD *)(v33 + 6) = 0; | |
*(_WORD *)(v33 + 8) = 0; | |
*(_WORD *)(v33 + 10) = 0; | |
*(_WORD *)(v33 + 12) = 0; | |
*(_WORD *)(v33 + 14) = 0; | |
*(_BYTE *)(v33 + 1) = 3; | |
++v47; | |
*(_WORD *)(i + 4) = (v33 - i) >> 4; | |
} | |
else | |
{ | |
v32 = v47++; | |
v33 = v7 + 16 * v32; | |
*(_BYTE *)v33 = v13; | |
*(_BYTE *)(v33 + 1) = 3; | |
*(_DWORD *)(v33 + 2) = 3; | |
*(_DWORD *)(v33 + 6) = 0; | |
*(_DWORD *)(v33 + 10) = 0; | |
*(_WORD *)(v33 + 14) = 0; | |
*(_WORD *)(v7 + 8) = (v33 - v7) >> 4; | |
} | |
LABEL_60: | |
*(_WORD *)v58 = (v33 - v7) >> 4; | |
v40 = v9 / (unsigned int)*(_WORD *)(v7 + 12); | |
v8 += v40 * ((unsigned __int16)v49 + *(_WORD *)(v7 + 10)); | |
v9 = v40 * (unsigned __int16)v52; | |
while ( 1 ) | |
{ | |
v53 = v8; | |
if ( (v8 ^ (unsigned int)(v9 + v8)) >= (unsigned int)&unk_1000000 ) | |
{ | |
if ( (unsigned int)v9 >= 0x10000 ) | |
{ | |
v41 = *(_WORD *)(v7 + 12) + 3; | |
*(_WORD *)(v7 + 12) = v41; | |
if ( (unsigned __int16)v52 > 0xFAu || v41 > 0xFF00u ) | |
{ | |
v42 = *(_WORD *)(v7 + 8); | |
if ( (_WORD)v42 ) | |
v43 = sub_42F9B0(v7 + 16 * v42); | |
else | |
v43 = 0; | |
v44 = *(_WORD *)(v7 + 10) - (*(_WORD *)(v7 + 10) >> 1); | |
*(_WORD *)(v7 + 10) = v44; | |
*(_WORD *)(v7 + 12) = v43 + v44 + 256; | |
} | |
goto LABEL_72; | |
} | |
v9 = -v8 & 0xFFFF; | |
} | |
if ( a5 >= v57 ) | |
return 0; | |
*(_BYTE *)a5 = BYTE3(v8); | |
v9 <<= 8; | |
++a5; | |
v8 <<= 8; | |
} | |
} | |
v15 = v7 + 16 * v47; | |
for ( j = v7 + 16 * v47; ; v15 = j ) | |
{ | |
v48 = 0; | |
v51 = 0; | |
v16 = *(_WORD *)(v14 + 8); | |
if ( (_WORD)v16 ) | |
{ | |
for ( k = v14 + 16 * v16; ; k += 16 * v20 ) | |
{ | |
while ( v13 < *(_BYTE *)k ) | |
{ | |
v19 = *(_WORD *)(k + 4); | |
*(_WORD *)(k + 2) += 2; | |
if ( !(_WORD)v19 ) | |
{ | |
v17 = j; | |
++v47; | |
j += 16; | |
*(_BYTE *)v17 = v63; | |
*(_WORD *)(v17 + 2) = 2; | |
*(_WORD *)(v17 + 4) = 0; | |
*(_WORD *)(v17 + 6) = 0; | |
*(_WORD *)(v17 + 8) = 0; | |
*(_WORD *)(v17 + 10) = 0; | |
*(_WORD *)(v17 + 12) = 0; | |
*(_WORD *)(v17 + 14) = 0; | |
*(_BYTE *)(v17 + 1) = 2; | |
*(_WORD *)(k + 4) = (v17 - k) >> 4; | |
goto LABEL_24; | |
} | |
k += 16 * v19; | |
} | |
if ( v13 <= *(_BYTE *)k ) | |
break; | |
LOWORD(v48) = *(_WORD *)(k + 2) + v48; | |
v20 = *(_WORD *)(k + 6); | |
if ( !(_WORD)v20 ) | |
{ | |
v17 = j; | |
++v47; | |
j += 16; | |
*(_BYTE *)v17 = v63; | |
*(_WORD *)(v17 + 2) = 2; | |
*(_WORD *)(v17 + 4) = 0; | |
*(_WORD *)(v17 + 6) = 0; | |
*(_WORD *)(v17 + 8) = 0; | |
*(_WORD *)(v17 + 10) = 0; | |
*(_WORD *)(v17 + 12) = 0; | |
*(_WORD *)(v17 + 14) = 0; | |
*(_BYTE *)(v17 + 1) = 2; | |
*(_WORD *)(k + 6) = (v17 - k) >> 4; | |
goto LABEL_24; | |
} | |
} | |
v21 = *(_BYTE *)(k + 1); | |
v22 = *(_WORD *)(k + 2); | |
v51 = v21; | |
v48 += v22 - v21; | |
v8 = v53; | |
*(_WORD *)(k + 2) = v22 + 2; | |
v7 = a1; | |
*(_BYTE *)(k + 1) = v21 + 2; | |
v17 = k; | |
} | |
else | |
{ | |
++v47; | |
j += 16; | |
v17 = v15; | |
*(_BYTE *)v15 = v13; | |
*(_BYTE *)(v15 + 1) = 2; | |
*(_DWORD *)(v15 + 2) = 2; | |
*(_DWORD *)(v15 + 6) = 0; | |
*(_DWORD *)(v15 + 10) = 0; | |
*(_WORD *)(v15 + 14) = 0; | |
*(_WORD *)(v14 + 8) = (v15 - v14) >> 4; | |
} | |
LABEL_24: | |
*(_WORD *)v58 = (v17 - v7) >> 4; | |
v23 = v51; | |
v58 = v17 + 14; | |
v24 = *(_WORD *)(v14 + 12); | |
if ( v51 ) | |
{ | |
v25 = v9 / v24; | |
v8 += v25 * ((unsigned __int16)v48 + *(_WORD *)(v14 + 10)); | |
v9 = v25 * v51; | |
while ( 1 ) | |
{ | |
v53 = v8; | |
if ( (v8 ^ (unsigned int)(v9 + v8)) >= (unsigned int)&unk_1000000 ) | |
{ | |
if ( (unsigned int)v9 >= 0x10000 ) | |
goto LABEL_40; | |
v9 = -v8 & 0xFFFF; | |
} | |
if ( a5 >= v57 ) | |
return 0; | |
*(_BYTE *)a5 = BYTE3(v8); | |
v9 <<= 8; | |
++a5; | |
v8 <<= 8; | |
} | |
} | |
v26 = *(_WORD *)(v14 + 10); | |
if ( (_WORD)v26 ) | |
{ | |
if ( (unsigned __int16)v26 < (unsigned __int16)v24 ) | |
break; | |
} | |
LABEL_39: | |
v23 = 0; | |
*(_WORD *)(v14 + 10) += 5; | |
*(_WORD *)(v14 + 12) += 5; | |
LABEL_40: | |
*(_WORD *)(v14 + 12) += 2; | |
if ( v23 > 0xFBu || *(_WORD *)(v14 + 12) > 0xFF00u ) | |
{ | |
v27 = *(_WORD *)(v14 + 8); | |
if ( (_WORD)v27 ) | |
v28 = sub_42F9B0(v14 + 16 * v27); | |
else | |
v28 = 0; | |
v29 = *(_WORD *)(v14 + 10) - (*(_WORD *)(v14 + 10) >> 1); | |
*(_WORD *)(v14 + 10) = v29; | |
v30 = v28 + v29; | |
v23 = v51; | |
*(_WORD *)(v14 + 12) = v30; | |
} | |
if ( v23 ) | |
{ | |
LABEL_72: | |
if ( v56 < 2 ) | |
++v56; | |
else | |
v54 = *(_WORD *)(v7 + 16 * (unsigned __int16)v54 + 14); | |
if ( (unsigned int)v47 >= 0xFFE ) | |
{ | |
v47 = 1; | |
*(_DWORD *)v7 = 0; | |
*(_DWORD *)(v7 + 4) = 0; | |
*(_WORD *)(v7 + 14) = 0; | |
*(_DWORD *)(v7 + 10) = &unk_1010001; | |
*(_WORD *)(v7 + 8) = 0; | |
v54 = 0; | |
v56 = 0; | |
} | |
v6 = a5; | |
v11 = v61; | |
goto LABEL_6; | |
} | |
v13 = v63; | |
v14 = v7 + 16 * *(_WORD *)(v14 + 14); | |
if ( v14 == v7 ) | |
goto LABEL_48; | |
} | |
v9 = v9 / v24 * v26; | |
while ( 1 ) | |
{ | |
if ( (v8 ^ (unsigned int)(v9 + v8)) >= (unsigned int)&unk_1000000 ) | |
{ | |
if ( (unsigned int)v9 >= 0x10000 ) | |
goto LABEL_39; | |
v9 = -v8 & 0xFFFF; | |
} | |
if ( a5 >= v57 ) | |
return 0; | |
*(_BYTE *)a5 = BYTE3(v8); | |
v9 <<= 8; | |
v8 <<= 8; | |
++a5; | |
v53 = v8; | |
} | |
} | |
return 0; | |
} | |
//----- (00430960) -------------------------------------------------------- | |
signed int __usercall sub_430960<eax>(int a1<esi>) | |
{ | |
int v1; // eax@1 | |
signed int result; // eax@5 | |
void (__cdecl *v3)(_DWORD); // ecx@7 | |
int v4; // [sp+Ch] [bp-14h]@4 | |
v1 = off_43D298(65536); | |
if ( !v1 ) | |
{ | |
off_43D2A0(); | |
JUMPOUT(*(int *)loc_430990); | |
} | |
v4 = v1; | |
if ( v1 ) | |
{ | |
if ( *(_DWORD *)(a1 + 2140) ) | |
{ | |
v3 = *(void (__cdecl **)(_DWORD))(a1 + 2152); | |
if ( v3 ) | |
v3(*(_DWORD *)(a1 + 2140)); | |
} | |
*(_DWORD *)(a1 + 2140) = v4; | |
*(_DWORD *)(a1 + 2144) = sub_430290; | |
*(_DWORD *)(a1 + 2148) = sub_42FA10; | |
*(_DWORD *)(a1 + 2152) = sub_430920; | |
result = 0; | |
} | |
else | |
{ | |
result = -1; | |
} | |
return result; | |
} | |
// 430920: using guessed type int sub_430920(); | |
// 430990: using guessed type int(); | |
// 43D298: using guessed type int (__cdecl *off_43D298)(_DWORD); | |
// 43D2A0: using guessed type int (*off_43D2A0)(void); | |
//----- (00431EC8) -------------------------------------------------------- | |
int __cdecl sub_431EC8() | |
{ | |
dword_47005C = IsProcessorFeaturePresent(0xAu); | |
return 0; | |
} | |
// 47005C: using guessed type int dword_47005C; | |
//----- (00431FB0) -------------------------------------------------------- | |
signed int __cdecl sub_431FB0(int a1, int a2, int a3) | |
{ | |
signed int v3; // eax@1 | |
char v6; // [sp+Ch] [bp-28h]@1 | |
char v7; // [sp+10h] [bp-24h]@1 | |
int v8; // [sp+18h] [bp-1Ch]@4 | |
char v9; // [sp+1Ch] [bp-18h]@3 | |
int v10; // [sp+20h] [bp-14h]@1 | |
char v11; // [sp+24h] [bp-10h]@1 | |
unsigned int v12; // [sp+30h] [bp-4h]@1 | |
int v13; // [sp+34h] [bp+0h]@1 | |
v12 = (unsigned int)&v13 ^ dword_43C588; | |
_LocaleUpdate::_LocaleUpdate(a3); | |
v10 = __strgtold12_l(&v11, &v6, a2, 0, 0, 0, 0, &v7); | |
v3 = sub_433283((int)&v11, a1); | |
if ( v10 & 3 ) | |
{ | |
if ( v10 & 1 ) | |
goto LABEL_8; | |
if ( v10 & 2 ) | |
goto LABEL_3; | |
} | |
else | |
{ | |
if ( v3 == 1 ) | |
{ | |
LABEL_3: | |
if ( v9 ) | |
*(_DWORD *)(v8 + 112) &= 0xFFFFFFFDu; | |
return 3; | |
} | |
if ( v3 == 2 ) | |
{ | |
LABEL_8: | |
if ( v9 ) | |
*(_DWORD *)(v8 + 112) &= 0xFFFFFFFDu; | |
return 4; | |
} | |
} | |
if ( v9 ) | |
*(_DWORD *)(v8 + 112) &= 0xFFFFFFFDu; | |
return 0; | |
} | |
// 40BC93: using guessed type _DWORD __stdcall _LocaleUpdate___LocaleUpdate(_DWORD); | |
// 433D25: using guessed type _DWORD __cdecl __strgtold12_l(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD); | |
// 43C588: using guessed type int dword_43C588; | |
//----- (00432058) -------------------------------------------------------- | |
signed int __cdecl sub_432058(int a1, int a2, int a3) | |
{ | |
signed int v3; // eax@1 | |
char v6; // [sp+Ch] [bp-28h]@1 | |
char v7; // [sp+10h] [bp-24h]@1 | |
int v8; // [sp+18h] [bp-1Ch]@4 | |
char v9; // [sp+1Ch] [bp-18h]@3 | |
int v10; // [sp+20h] [bp-14h]@1 | |
char v11; // [sp+24h] [bp-10h]@1 | |
unsigned int v12; // [sp+30h] [bp-4h]@1 | |
int v13; // [sp+34h] [bp+0h]@1 | |
v12 = (unsigned int)&v13 ^ dword_43C588; | |
_LocaleUpdate::_LocaleUpdate(a3); | |
v10 = __strgtold12_l(&v11, &v6, a2, 0, 0, 0, 0, &v7); | |
v3 = sub_4337D4((int)&v11, a1); | |
if ( v10 & 3 ) | |
{ | |
if ( v10 & 1 ) | |
goto LABEL_8; | |
if ( v10 & 2 ) | |
goto LABEL_3; | |
} | |
else | |
{ | |
if ( v3 == 1 ) | |
{ | |
LABEL_3: | |
if ( v9 ) | |
*(_DWORD *)(v8 + 112) &= 0xFFFFFFFDu; | |
return 3; | |
} | |
if ( v3 == 2 ) | |
{ | |
LABEL_8: | |
if ( v9 ) | |
*(_DWORD *)(v8 + 112) &= 0xFFFFFFFDu; | |
return 4; | |
} | |
} | |
if ( v9 ) | |
*(_DWORD *)(v8 + 112) &= 0xFFFFFFFDu; | |
return 0; | |
} | |
// 40BC93: using guessed type _DWORD __stdcall _LocaleUpdate___LocaleUpdate(_DWORD); | |
// 433D25: using guessed type _DWORD __cdecl __strgtold12_l(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD); | |
// 43C588: using guessed type int dword_43C588; | |
//----- (004328FD) -------------------------------------------------------- | |
int __cdecl sub_4328FD() | |
{ | |
return 0; | |
} | |
//----- (00433283) -------------------------------------------------------- | |
signed int __cdecl sub_433283(int a1, int a2) | |
{ | |
__int16 v2; // bx@1 | |
int v3; // ebx@1 | |
int v4; // eax@1 | |
int v5; // ebx@2 | |
signed int v6; // eax@2 | |
signed int result; // eax@5 | |
signed int v8; // edi@7 | |
int v9; // edx@7 | |
int *v10; // esi@7 | |
int v11; // eax@8 | |
bool i; // zf@8 | |
int v13; // eax@13 | |
int v14; // edi@13 | |
signed int v15; // edx@15 | |
int *v16; // ecx@15 | |
bool v17; // cf@16 | |
int v18; // edi@18 | |
int v19; // eax@30 | |
int v20; // edx@30 | |
int *v21; // ebx@31 | |
int v22; // ST1C_4@31 | |
signed int v23; // edx@32 | |
int *v24; // ecx@32 | |
signed int v25; // esi@37 | |
int v26; // eax@37 | |
int v27; // edx@37 | |
int *v28; // ebx@37 | |
bool j; // zf@38 | |
int v30; // eax@43 | |
int v31; // esi@43 | |
signed int v32; // edx@45 | |
int *v33; // ecx@45 | |
int v34; // edi@45 | |
signed int k; // ecx@48 | |
int *v36; // ecx@50 | |
int v37; // esi@50 | |
signed int v38; // edi@50 | |
int v39; // eax@57 | |
int v40; // edx@57 | |
int *v41; // ebx@58 | |
int v42; // ST1C_4@58 | |
signed int v43; // edx@59 | |
int *v44; // ecx@59 | |
int v45; // eax@66 | |
int v46; // edx@66 | |
int *v47; // ebx@67 | |
int v48; // ST1C_4@67 | |
signed int v49; // edx@68 | |
int *v50; // ecx@68 | |
int v51; // eax@74 | |
int v52; // edx@74 | |
int v53; // ST1C_4@75 | |
signed int v54; // edx@76 | |
int *v55; // ecx@76 | |
int v56; // ebx@82 | |
int v57; // edx@83 | |
int v58; // [sp+8h] [bp-38h]@1 | |
char v59; // [sp+10h] [bp-30h]@7 | |
int v60; // [sp+10h] [bp-30h]@37 | |
int v61; // [sp+14h] [bp-2Ch]@7 | |
char v62; // [sp+14h] [bp-2Ch]@37 | |
int v63; // [sp+18h] [bp-28h]@7 | |
int v64; // [sp+18h] [bp-28h]@30 | |
signed int v65; // [sp+18h] [bp-28h]@45 | |
int v66; // [sp+18h] [bp-28h]@57 | |
int v67; // [sp+18h] [bp-28h]@66 | |
int v68; // [sp+18h] [bp-28h]@74 | |
signed int v69; // [sp+1Ch] [bp-24h]@7 | |
int v70; // [sp+20h] [bp-20h]@15 | |
signed int v71; // [sp+20h] [bp-20h]@30 | |
signed int v72; // [sp+20h] [bp-20h]@57 | |
signed int v73; // [sp+20h] [bp-20h]@66 | |
signed int v74; // [sp+20h] [bp-20h]@74 | |
int v75; // [sp+24h] [bp-1Ch]@7 | |
int v76; // [sp+28h] [bp-18h]@7 | |
int v77; // [sp+2Ch] [bp-14h]@7 | |
int v78; // [sp+30h] [bp-10h]@1 | |
int v79; // [sp+34h] [bp-Ch]@1 | |
int v80; // [sp+38h] [bp-8h]@1 | |
unsigned int v81; // [sp+3Ch] [bp-4h]@1 | |
int v82; // [sp+40h] [bp+0h]@1 | |
v81 = (unsigned int)&v82 ^ dword_43C588; | |
v2 = *(_WORD *)(a1 + 10); | |
v58 = *(_WORD *)(a1 + 10) & 0x8000; | |
v78 = *(_DWORD *)(a1 + 6); | |
v3 = (v2 & 0x7FFF) - 16383; | |
v4 = *(_WORD *)a1 << 16; | |
v79 = *(_DWORD *)(a1 + 2); | |
v80 = v4; | |
if ( v3 != -16383 ) | |
{ | |
v69 = 0; | |
v75 = v78; | |
v76 = v79; | |
v77 = v80; | |
v8 = dword_43D40C - 1; | |
v61 = v3; | |
v63 = dword_43D40C / 32; | |
v9 = dword_43D40C % 32; | |
v10 = &v78 + dword_43D40C / 32; | |
v59 = 31 - dword_43D40C % 32; | |
if ( (1 << (31 - dword_43D40C % 32)) & *v10 ) | |
{ | |
v11 = dword_43D40C / 32; | |
for ( i = (~(-1 << (31 - v9)) & *(&v78 + v63)) == 0; i; i = *(&v78 + v11) == 0 ) | |
{ | |
++v11; | |
if ( v11 >= 3 ) | |
goto LABEL_23; | |
} | |
v13 = v8 / 32; | |
v14 = v8 & 0x8000001F; | |
if ( v14 < 0 ) | |
LOBYTE(v14) = ((unsigned __int8)(v14 - 1) | 0xE0) + 1; | |
v69 = 0; | |
v15 = 1 << (31 - v14); | |
v16 = &v78 + v13; | |
v70 = v15 + *v16; | |
if ( v70 >= (unsigned int)*v16 ) | |
{ | |
v17 = v70 < (unsigned int)v15; | |
goto LABEL_20; | |
} | |
LABEL_21: | |
v69 = 1; | |
while ( 1 ) | |
{ | |
--v13; | |
*v16 = v70; | |
if ( v13 < 0 ) | |
break; | |
if ( !v69 ) | |
break; | |
v69 = 0; | |
v16 = &v78 + v13; | |
v18 = *v16 + 1; | |
v70 = v18; | |
if ( v18 >= (unsigned int)*v16 ) | |
{ | |
v17 = (unsigned int)v18 < 1; | |
LABEL_20: | |
if ( !v17 ) | |
continue; | |
} | |
goto LABEL_21; | |
} | |
} | |
LABEL_23: | |
*v10 &= -1 << v59; | |
if ( v63 + 1 < 3 ) | |
memset(&v78 + v63 + 1, 0, 4 * (3 - (v63 + 1))); | |
if ( v69 ) | |
++v3; | |
if ( v3 >= dword_43D408 - dword_43D40C ) | |
{ | |
if ( v3 > dword_43D408 ) | |
{ | |
if ( v3 < dword_43D404 ) | |
{ | |
v5 = dword_43D418 + v3; | |
v78 &= 0x7FFFFFFFu; | |
v51 = dword_43D410 / 32; | |
v52 = dword_43D410 % 32; | |
v68 = 0; | |
v74 = 0; | |
do | |
{ | |
v53 = ~(-1 << v52) & *(&v78 + v74); | |
*(&v78 + v74) = v68 | ((unsigned int)*(&v78 + v74) >> v52); | |
++v74; | |
v68 = v53 << (32 - v52); | |
} | |
while ( v74 < 3 ); | |
v54 = 2; | |
v55 = &v80 - v51; | |
do | |
{ | |
if ( v54 < v51 ) | |
*(&v78 + v54) = 0; | |
else | |
*(&v78 + v54) = *v55; | |
--v55; | |
--v54; | |
} | |
while ( v54 >= 0 ); | |
result = 0; | |
} | |
else | |
{ | |
v79 = 0; | |
v80 = 0; | |
v78 = -2147483648; | |
v45 = dword_43D410 / 32; | |
v46 = dword_43D410 % 32; | |
v67 = 0; | |
v73 = 0; | |
do | |
{ | |
v47 = &v78 + v73; | |
v48 = ~(-1 << v46) & *v47; | |
*v47 = v67 | ((unsigned int)*v47 >> v46); | |
++v73; | |
v67 = v48 << (32 - v46); | |
} | |
while ( v73 < 3 ); | |
v49 = 2; | |
v50 = &v80 - v45; | |
do | |
{ | |
if ( v49 < v45 ) | |
*(&v78 + v49) = 0; | |
else | |
*(&v78 + v49) = *v50; | |
--v50; | |
--v49; | |
} | |
while ( v49 >= 0 ); | |
v5 = dword_43D404 + dword_43D418; | |
result = 1; | |
} | |
goto LABEL_82; | |
} | |
v78 = v75; | |
v79 = v76; | |
v19 = (dword_43D408 - v61) / 32; | |
v80 = v77; | |
v20 = (dword_43D408 - v61) % 32; | |
v64 = 0; | |
v71 = 0; | |
do | |
{ | |
v21 = &v78 + v71; | |
v22 = ~(-1 << v20) & *v21; | |
*v21 = v64 | ((unsigned int)*v21 >> v20); | |
++v71; | |
v64 = v22 << (32 - v20); | |
} | |
while ( v71 < 3 ); | |
v23 = 2; | |
v24 = &v80 - v19; | |
do | |
{ | |
if ( v23 < v19 ) | |
*(&v78 + v23) = 0; | |
else | |
*(&v78 + v23) = *v24; | |
--v24; | |
--v23; | |
} | |
while ( v23 >= 0 ); | |
v25 = dword_43D40C - 1; | |
v26 = dword_43D40C / 32; | |
v60 = dword_43D40C / 32; | |
v27 = dword_43D40C % 32; | |
v28 = &v78 + dword_43D40C / 32; | |
v62 = 31 - dword_43D40C % 32; | |
if ( (1 << (31 - dword_43D40C % 32)) & *v28 ) | |
{ | |
for ( j = (~(-1 << (31 - v27)) & *(&v78 + v26)) == 0; j; j = *(&v78 + v26) == 0 ) | |
{ | |
++v26; | |
if ( v26 >= 3 ) | |
goto LABEL_55; | |
} | |
v30 = v25 / 32; | |
v31 = v25 & 0x8000001F; | |
if ( v31 < 0 ) | |
LOBYTE(v31) = ((unsigned __int8)(v31 - 1) | 0xE0) + 1; | |
v65 = 0; | |
v32 = 1 << (31 - v31); | |
v33 = &v78 + v30; | |
v34 = *v33 + v32; | |
if ( v34 < (unsigned int)*v33 || v34 < (unsigned int)v32 ) | |
v65 = 1; | |
*v33 = v34; | |
for ( k = v65; ; k = v38 ) | |
{ | |
--v30; | |
if ( v30 < 0 ) | |
break; | |
if ( !k ) | |
break; | |
v36 = &v78 + v30; | |
v37 = *v36 + 1; | |
v38 = 0; | |
if ( v37 < (unsigned int)*v36 || (unsigned int)v37 < 1 ) | |
v38 = 1; | |
*v36 = v37; | |
} | |
} | |
LABEL_55: | |
*v28 &= -1 << v62; | |
if ( v60 + 1 < 3 ) | |
memset(&v78 + v60 + 1, 0, 4 * (3 - (v60 + 1))); | |
v39 = (dword_43D410 + 1) / 32; | |
v40 = (dword_43D410 + 1) % 32; | |
v66 = 0; | |
v72 = 0; | |
do | |
{ | |
v41 = &v78 + v72; | |
v42 = ~(-1 << v40) & *v41; | |
*v41 = v66 | ((unsigned int)*v41 >> v40); | |
++v72; | |
v66 = v42 << (32 - v40); | |
} | |
while ( v72 < 3 ); | |
v43 = 2; | |
v44 = &v80 - v39; | |
do | |
{ | |
if ( v43 < v39 ) | |
*(&v78 + v43) = 0; | |
else | |
*(&v78 + v43) = *v44; | |
--v44; | |
--v43; | |
} | |
while ( v43 >= 0 ); | |
} | |
else | |
{ | |
v78 = 0; | |
v79 = 0; | |
v80 = 0; | |
} | |
v5 = 0; | |
result = 2; | |
goto LABEL_82; | |
} | |
v5 = 0; | |
v6 = 0; | |
while ( !*(&v78 + v6) ) | |
{ | |
++v6; | |
if ( v6 >= 3 ) | |
{ | |
result = 0; | |
goto LABEL_82; | |
} | |
} | |
v78 = 0; | |
v79 = 0; | |
v80 = 0; | |
result = 2; | |
LABEL_82: | |
v56 = v78 | (v58 != 0 ? 0x80000000 : 0) | (v5 << (31 - dword_43D410)); | |
if ( dword_43D414 == 64 ) | |
{ | |
v57 = v79; | |
*(_DWORD *)(a2 + 4) = v56; | |
*(_DWORD *)a2 = v57; | |
} | |
else | |
{ | |
if ( dword_43D414 == 32 ) | |
*(_DWORD *)a2 = v56; | |
} | |
return result; | |
} | |
// 43C588: using guessed type int dword_43C588; | |
// 43D404: using guessed type int dword_43D404; | |
// 43D408: using guessed type int dword_43D408; | |
// 43D40C: using guessed type int dword_43D40C; | |
// 43D410: using guessed type int dword_43D410; | |
// 43D414: using guessed type int dword_43D414; | |
// 43D418: using guessed type int dword_43D418; | |
//----- (004337D4) -------------------------------------------------------- | |
signed int __cdecl sub_4337D4(int a1, int a2) | |
{ | |
__int16 v2; // bx@1 | |
int v3; // ebx@1 | |
int v4; // eax@1 | |
int v5; // ebx@2 | |
signed int v6; // eax@2 | |
signed int result; // eax@5 | |
signed int v8; // edi@7 | |
int v9; // edx@7 | |
int *v10; // esi@7 | |
int v11; // eax@8 | |
bool i; // zf@8 | |
int v13; // eax@13 | |
int v14; // edi@13 | |
signed int v15; // edx@15 | |
int *v16; // ecx@15 | |
bool v17; // cf@16 | |
int v18; // edi@18 | |
int v19; // eax@30 | |
int v20; // edx@30 | |
int *v21; // ebx@31 | |
int v22; // ST1C_4@31 | |
signed int v23; // edx@32 | |
int *v24; // ecx@32 | |
signed int v25; // esi@37 | |
int v26; // eax@37 | |
int v27; // edx@37 | |
int *v28; // ebx@37 | |
bool j; // zf@38 | |
int v30; // eax@43 | |
int v31; // esi@43 | |
signed int v32; // edx@45 | |
int *v33; // ecx@45 | |
int v34; // edi@45 | |
signed int k; // ecx@48 | |
int *v36; // ecx@50 | |
int v37; // esi@50 | |
signed int v38; // edi@50 | |
int v39; // eax@57 | |
int v40; // edx@57 | |
int *v41; // ebx@58 | |
int v42; // ST1C_4@58 | |
signed int v43; // edx@59 | |
int *v44; // ecx@59 | |
int v45; // eax@66 | |
int v46; // edx@66 | |
int *v47; // ebx@67 | |
int v48; // ST1C_4@67 | |
signed int v49; // edx@68 | |
int *v50; // ecx@68 | |
int v51; // eax@74 | |
int v52; // edx@74 | |
int v53; // ST1C_4@75 | |
signed int v54; // edx@76 | |
int *v55; // ecx@76 | |
int v56; // ebx@82 | |
int v57; // edx@83 | |
int v58; // [sp+8h] [bp-38h]@1 | |
char v59; // [sp+10h] [bp-30h]@7 | |
int v60; // [sp+10h] [bp-30h]@37 | |
int v61; // [sp+14h] [bp-2Ch]@7 | |
char v62; // [sp+14h] [bp-2Ch]@37 | |
int v63; // [sp+18h] [bp-28h]@7 | |
int v64; // [sp+18h] [bp-28h]@30 | |
signed int v65; // [sp+18h] [bp-28h]@45 | |
int v66; // [sp+18h] [bp-28h]@57 | |
int v67; // [sp+18h] [bp-28h]@66 | |
int v68; // [sp+18h] [bp-28h]@74 | |
signed int v69; // [sp+1Ch] [bp-24h]@7 | |
int v70; // [sp+20h] [bp-20h]@15 | |
signed int v71; // [sp+20h] [bp-20h]@30 | |
signed int v72; // [sp+20h] [bp-20h]@57 | |
signed int v73; // [sp+20h] [bp-20h]@66 | |
signed int v74; // [sp+20h] [bp-20h]@74 | |
int v75; // [sp+24h] [bp-1Ch]@7 | |
int v76; // [sp+28h] [bp-18h]@7 | |
int v77; // [sp+2Ch] [bp-14h]@7 | |
int v78; // [sp+30h] [bp-10h]@1 | |
int v79; // [sp+34h] [bp-Ch]@1 | |
int v80; // [sp+38h] [bp-8h]@1 | |
unsigned int v81; // [sp+3Ch] [bp-4h]@1 | |
int v82; // [sp+40h] [bp+0h]@1 | |
v81 = (unsigned int)&v82 ^ dword_43C588; | |
v2 = *(_WORD *)(a1 + 10); | |
v58 = *(_WORD *)(a1 + 10) & 0x8000; | |
v78 = *(_DWORD *)(a1 + 6); | |
v3 = (v2 & 0x7FFF) - 16383; | |
v4 = *(_WORD *)a1 << 16; | |
v79 = *(_DWORD *)(a1 + 2); | |
v80 = v4; | |
if ( v3 != -16383 ) | |
{ | |
v69 = 0; | |
v75 = v78; | |
v76 = v79; | |
v77 = v80; | |
v8 = dword_43D424 - 1; | |
v61 = v3; | |
v63 = dword_43D424 / 32; | |
v9 = dword_43D424 % 32; | |
v10 = &v78 + dword_43D424 / 32; | |
v59 = 31 - dword_43D424 % 32; | |
if ( (1 << (31 - dword_43D424 % 32)) & *v10 ) | |
{ | |
v11 = dword_43D424 / 32; | |
for ( i = (~(-1 << (31 - v9)) & *(&v78 + v63)) == 0; i; i = *(&v78 + v11) == 0 ) | |
{ | |
++v11; | |
if ( v11 >= 3 ) | |
goto LABEL_23; | |
} | |
v13 = v8 / 32; | |
v14 = v8 & 0x8000001F; | |
if ( v14 < 0 ) | |
LOBYTE(v14) = ((unsigned __int8)(v14 - 1) | 0xE0) + 1; | |
v69 = 0; | |
v15 = 1 << (31 - v14); | |
v16 = &v78 + v13; | |
v70 = v15 + *v16; | |
if ( v70 >= (unsigned int)*v16 ) | |
{ | |
v17 = v70 < (unsigned int)v15; | |
goto LABEL_20; | |
} | |
LABEL_21: | |
v69 = 1; | |
while ( 1 ) | |
{ | |
--v13; | |
*v16 = v70; | |
if ( v13 < 0 ) | |
break; | |
if ( !v69 ) | |
break; | |
v69 = 0; | |
v16 = &v78 + v13; | |
v18 = *v16 + 1; | |
v70 = v18; | |
if ( v18 >= (unsigned int)*v16 ) | |
{ | |
v17 = (unsigned int)v18 < 1; | |
LABEL_20: | |
if ( !v17 ) | |
continue; | |
} | |
goto LABEL_21; | |
} | |
} | |
LABEL_23: | |
*v10 &= -1 << v59; | |
if ( v63 + 1 < 3 ) | |
memset(&v78 + v63 + 1, 0, 4 * (3 - (v63 + 1))); | |
if ( v69 ) | |
++v3; | |
if ( v3 >= dword_43D420 - dword_43D424 ) | |
{ | |
if ( v3 > dword_43D420 ) | |
{ | |
if ( v3 < dword_43D41C ) | |
{ | |
v5 = dword_43D430 + v3; | |
v78 &= 0x7FFFFFFFu; | |
v51 = dword_43D428 / 32; | |
v52 = dword_43D428 % 32; | |
v68 = 0; | |
v74 = 0; | |
do | |
{ | |
v53 = ~(-1 << v52) & *(&v78 + v74); | |
*(&v78 + v74) = v68 | ((unsigned int)*(&v78 + v74) >> v52); | |
++v74; | |
v68 = v53 << (32 - v52); | |
} | |
while ( v74 < 3 ); | |
v54 = 2; | |
v55 = &v80 - v51; | |
do | |
{ | |
if ( v54 < v51 ) | |
*(&v78 + v54) = 0; | |
else | |
*(&v78 + v54) = *v55; | |
--v55; | |
--v54; | |
} | |
while ( v54 >= 0 ); | |
result = 0; | |
} | |
else | |
{ | |
v79 = 0; | |
v80 = 0; | |
v78 = -2147483648; | |
v45 = dword_43D428 / 32; | |
v46 = dword_43D428 % 32; | |
v67 = 0; | |
v73 = 0; | |
do | |
{ | |
v47 = &v78 + v73; | |
v48 = ~(-1 << v46) & *v47; | |
*v47 = v67 | ((unsigned int)*v47 >> v46); | |
++v73; | |
v67 = v48 << (32 - v46); | |
} | |
while ( v73 < 3 ); | |
v49 = 2; | |
v50 = &v80 - v45; | |
do | |
{ | |
if ( v49 < v45 ) | |
*(&v78 + v49) = 0; | |
else | |
*(&v78 + v49) = *v50; | |
--v50; | |
--v49; | |
} | |
while ( v49 >= 0 ); | |
v5 = dword_43D41C + dword_43D430; | |
result = 1; | |
} | |
goto LABEL_82; | |
} | |
v78 = v75; | |
v79 = v76; | |
v19 = (dword_43D420 - v61) / 32; | |
v80 = v77; | |
v20 = (dword_43D420 - v61) % 32; | |
v64 = 0; | |
v71 = 0; | |
do | |
{ | |
v21 = &v78 + v71; | |
v22 = ~(-1 << v20) & *v21; | |
*v21 = v64 | ((unsigned int)*v21 >> v20); | |
++v71; | |
v64 = v22 << (32 - v20); | |
} | |
while ( v71 < 3 ); | |
v23 = 2; | |
v24 = &v80 - v19; | |
do | |
{ | |
if ( v23 < v19 ) | |
*(&v78 + v23) = 0; | |
else | |
*(&v78 + v23) = *v24; | |
--v24; | |
--v23; | |
} | |
while ( v23 >= 0 ); | |
v25 = dword_43D424 - 1; | |
v26 = dword_43D424 / 32; | |
v60 = dword_43D424 / 32; | |
v27 = dword_43D424 % 32; | |
v28 = &v78 + dword_43D424 / 32; | |
v62 = 31 - dword_43D424 % 32; | |
if ( (1 << (31 - dword_43D424 % 32)) & *v28 ) | |
{ | |
for ( j = (~(-1 << (31 - v27)) & *(&v78 + v26)) == 0; j; j = *(&v78 + v26) == 0 ) | |
{ | |
++v26; | |
if ( v26 >= 3 ) | |
goto LABEL_55; | |
} | |
v30 = v25 / 32; | |
v31 = v25 & 0x8000001F; | |
if ( v31 < 0 ) | |
LOBYTE(v31) = ((unsigned __int8)(v31 - 1) | 0xE0) + 1; | |
v65 = 0; | |
v32 = 1 << (31 - v31); | |
v33 = &v78 + v30; | |
v34 = *v33 + v32; | |
if ( v34 < (unsigned int)*v33 || v34 < (unsigned int)v32 ) | |
v65 = 1; | |
*v33 = v34; | |
for ( k = v65; ; k = v38 ) | |
{ | |
--v30; | |
if ( v30 < 0 ) | |
break; | |
if ( !k ) | |
break; | |
v36 = &v78 + v30; | |
v37 = *v36 + 1; | |
v38 = 0; | |
if ( v37 < (unsigned int)*v36 || (unsigned int)v37 < 1 ) | |
v38 = 1; | |
*v36 = v37; | |
} | |
} | |
LABEL_55: | |
*v28 &= -1 << v62; | |
if ( v60 + 1 < 3 ) | |
memset(&v78 + v60 + 1, 0, 4 * (3 - (v60 + 1))); | |
v39 = (dword_43D428 + 1) / 32; | |
v40 = (dword_43D428 + 1) % 32; | |
v66 = 0; | |
v72 = 0; | |
do | |
{ | |
v41 = &v78 + v72; | |
v42 = ~(-1 << v40) & *v41; | |
*v41 = v66 | ((unsigned int)*v41 >> v40); | |
++v72; | |
v66 = v42 << (32 - v40); | |
} | |
while ( v72 < 3 ); | |
v43 = 2; | |
v44 = &v80 - v39; | |
do | |
{ | |
if ( v43 < v39 ) | |
*(&v78 + v43) = 0; | |
else | |
*(&v78 + v43) = *v44; | |
--v44; | |
--v43; | |
} | |
while ( v43 >= 0 ); | |
} | |
else | |
{ | |
v78 = 0; | |
v79 = 0; | |
v80 = 0; | |
} | |
v5 = 0; | |
result = 2; | |
goto LABEL_82; | |
} | |
v5 = 0; | |
v6 = 0; | |
while ( !*(&v78 + v6) ) | |
{ | |
++v6; | |
if ( v6 >= 3 ) | |
{ | |
result = 0; | |
goto LABEL_82; | |
} | |
} | |
v78 = 0; | |
v79 = 0; | |
v80 = 0; | |
result = 2; | |
LABEL_82: | |
v56 = v78 | (v58 != 0 ? 0x80000000 : 0) | (v5 << (31 - dword_43D428)); | |
if ( dword_43D42C == 64 ) | |
{ | |
v57 = v79; | |
*(_DWORD *)(a2 + 4) = v56; | |
*(_DWORD *)a2 = v57; | |
} | |
else | |
{ | |
if ( dword_43D42C == 32 ) | |
*(_DWORD *)a2 = v56; | |
} | |
return result; | |
} | |
// 43C588: using guessed type int dword_43C588; | |
// 43D41C: using guessed type int dword_43D41C; | |
// 43D420: using guessed type int dword_43D420; | |
// 43D424: using guessed type int dword_43D424; | |
// 43D428: using guessed type int dword_43D428; | |
// 43D42C: using guessed type int dword_43D42C; | |
// 43D430: using guessed type int dword_43D430; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment