Skip to content

Instantly share code, notes, and snippets.

@NateShoffner
Created December 31, 2013 15:22
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save NateShoffner/8198284 to your computer and use it in GitHub Desktop.
Save NateShoffner/8198284 to your computer and use it in GitHub Desktop.
#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